Files
PLFM_RADAR/9_Firmware/9_2_FPGA/edge_detector.v
T
Jason 5fd632bc47 Fix all 10 CDC bugs from report_cdc audit, add overflow guard in range_bin_decimator
CDC fixes across 6 RTL files based on post-implementation report_cdc analysis:
- P0: sync stm32_mixers_enable and new_chirp_pulse to clk_120m via toggle CDC
       in radar_transmitter, add ft601 reset synchronizer and USB holding
       registers with proper edge detection in usb_data_interface
- P1: add ASYNC_REG to edge_detector, convert new_chirp_frame to toggle CDC,
       fix USB valid edge detect to use fully-synced signal
- P2: register Gray encoding in cdc_adc_to_processing source domain, sync
       ft601_txe and stm32_mixers_enable for status_reg in radar_system_top
- Safety: add in_bin_count overflow guard in range_bin_decimator to prevent
          downstream BRAM corruption

All 13 regression test suites pass (159 individual tests).
2026-03-17 13:48:47 +02:00

26 lines
818 B
Verilog

module edge_detector_enhanced (
input wire clk,
input wire reset_n,
input wire signal_in,
output wire rising_falling_edge
);
(* ASYNC_REG = "TRUE" *) reg signal_in_prev;
(* ASYNC_REG = "TRUE" *) reg signal_in_prev2;
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
signal_in_prev <= 1'b0;
signal_in_prev2 <= 1'b0;
end else begin
signal_in_prev <= signal_in;
signal_in_prev2 <= signal_in_prev;
end
end
// Rising edge: was low, now high (with synchronization) signal_in_prev & ~signal_in_prev2;
//Falling edge: was high, now low (with synchronization) falling_edge = ~signal_in_prev & signal_in_prev2
assign rising_falling_edge = (signal_in_prev & ~signal_in_prev2)|(~signal_in_prev & signal_in_prev2);
endmodule