~/PLFM_RADAR_work/vivado_project/reports_build21/.~/PLFM_RADAR_work/vivado_project/reports_build24/.reports_build21/.Status: PASS — Production-safe bitstream generated
+Date: 2026-03-20 | Commit: 0745cc4 | Device: XC7A200T-2FBG484I | Vivado 2025.2
| Clock Domain | Period (ns) | WNS (ns) | WHS (ns) | WPWS (ns) | Status |
|---|---|---|---|---|---|
| clk_100m | 10.000 | +0.287 | +0.056 | +3.870 | PASS |
| clk_mmcm_out0 (400 MHz) | 2.500 | +0.179 | +0.092 | +0.684 | PASS |
| adc_dco_p | — | +0.904 | — | +0.361 | PASS |
| ft601_clk_in | 10.000 | +0.347 | +0.094 | +4.500 | PASS |
| clk_120m_dac | — | +1.755 | +0.056 | +3.666 | PASS |
TNS = 0.000 ns, THS = 0.000 ns across all domains. Zero failing endpoints.
+ + +| Resource | Build 21 (baseline) | Build 24 | Available | Util% | Delta |
|---|---|---|---|---|---|
| Slice LUTs | 6,192 | 8,558 | 134,600 | 6.36% | +2,366 (+38%) |
| Slice Registers (FFs) | 9,064 | 10,384 | 269,200 | 3.86% | +1,320 (+15%) |
| Block RAM Tiles | 16 | 17 | 365 | 4.66% | +1 |
| RAMB36E1 | — | 12 | 365 | 3.29% | — |
| RAMB18E1 | — | 10 | 730 | 1.37% | — |
| DSP48E1 | 139 | 142 | 740 | 19.19% | +3 |
| Bonded IOBs | — | 178 | 285 | 62.46% | — |
| BUFGCTRL | — | 5 | 32 | 15.63% | — |
| MMCME2_ADV | — | 1 | 10 | 10.00% | — |
CFAR added +1 BRAM18 (magnitude buffer, 2048×17), +3 DSP48E1 (alpha multiply + cross-multiply for GO/SO), +2,366 LUTs (sliding window logic, state machine, mode mux), +1,320 FFs (pipeline registers, counters, window sums).
+ + +| Module | DSP48E1 | Notes |
|---|---|---|
| DDC (FIR I + FIR Q + CIC + NCO) | 117 | Dominant consumer: 47+47 FIR taps + 10+10 CIC + 2 DDC + 1 NCO |
| Matched Filter Processing Chain | 12 | 8 FFT butterflies + 4 freq-domain multiply |
| Doppler Processor + FFT | 10 | 8 FFT butterflies + 2 magnitude |
| CFAR Detector | 3 | alpha*noise multiply + GO/SO cross-multiply (pipelined) |
| System Top + Other | 0 | — |
| Total | 142 | 19.19% of 740 available |
| Module | RAMB36 | RAMB18 | Tiles | Notes |
|---|---|---|---|---|
| Doppler Processor | 4 | 0 | 4 | Range-Doppler accumulation buffers |
| Matched Filter (mf_dual) | 2 | 10 | 7 | Coefficient + I/Q data BRAMs |
| CFAR Detector | 1 | 0 | 1 | Magnitude buffer (2048×17 bits) |
| Transmitter (chirp mem) | 1 | 0 | 1 | Chirp waveform storage |
| FFT Engines (2×) | 4 | 0 | 4 | Twiddle factor + butterfly BRAMs |
| Total | 12 | 10 | 17 | 4.66% of 365 tiles |
| Category | Build 21 | Build 24 |
|---|---|---|
| Dynamic Power | — | 0.591 W |
| Device Static | — | 0.163 W |
| Total On-Chip | 0.732 W | 0.754 W |
| Junction Temperature | — | 26.9°C |
| Max Ambient (TJA) | — | 83.1°C |
+22 mW (+3%) from CFAR logic. Well within thermal budget.
+ + +The tightest path (WNS = +0.179 ns) is in the clk_mmcm_out0 (400 MHz) domain: NCO sine LUT index register → LUT6 → sin_abs_reg. This is the same path that was critical in Build 21 and is unrelated to CFAR.
The clk_100m domain (where CFAR operates) has +0.287 ns slack. The Build 23 critical path (cfar_inst/leading_sum → cross-multiply → alpha*noise DSP, WNS = -0.309 ns) has been completely eliminated by the pipeline fix.
| Metric | Post-Synth | Post-Route (final) |
|---|---|---|
| WNS (setup) | +0.123 ns | +0.179 ns |
| WHS (hold) | -0.076 ns (29 violations) | +0.056 ns (0 violations) |
| LUTs | 8,671 | 8,558 |
| FFs | 10,433 | 10,384 |
Post-route phys_opt resolved all 29 hold violations and improved setup slack by 56 ps. LUT/FF count reduced slightly by optimization passes.
+ + +184 checks performed. 0 errors, 0 critical warnings. Advisory/warning breakdown:
+No congestion windows found above level 5. The design is well-placed with no routing pressure. XC7A200T provides ample routing resources at 6.36% LUT utilization.
+ + +| Clock | Period | Lvl 0 | Lvl 1 | Lvl 2 | Lvl 3 | Lvl 4 | Lvl 5 |
|---|---|---|---|---|---|---|---|
| clk_100m | 10.000 ns | 25 | 0 | 0 | 0 | 0 | 0 |
| clk_mmcm_out0 | 2.500 ns | 808 | 108 | 3 | 19 | 8 | 3 |
| ft601_clk_in | 10.000 ns | 0 | 0 | 0 | 2 | 1 | 23 |
The clk_100m domain has only level-0 paths in the top-1000 worst — CFAR pipeline fix reduced logic depth to register-to-register transfers. The 400 MHz DDC domain remains the most timing-critical area.
| Metric | Build 21 (baseline) | Build 23 (CFAR, failed) | Build 24 (CFAR + pipeline) |
|---|---|---|---|
| WNS (ns) | +0.156 | -0.309 | +0.179 |
| WHS (ns) | +0.064 | — | +0.056 |
| LUTs | 6,192 | 8,668 (post-synth) | 8,558 |
| FFs | 9,064 | 10,411 (post-synth) | 10,384 |
| BRAM Tiles | 16 | 17 (post-synth) | 17 |
| DSP48E1 | 139 | — | 142 |
| Power (W) | 0.732 | — | 0.754 |
| Bitstream | Safe | Unsafe (timing fail) | Safe |
| Resource | CFAR Module Only | % of Device | Notes |
|---|---|---|---|
| LUTs | 2,229 | 1.66% | Sliding window sums, GO/SO cross-multiply, state machine, mode mux |
| FFs | 1,281 | 0.48% | Pipeline registers, window counters, sum accumulators, noise_sum_reg |
| RAMB36E1 | 1 | 0.27% | Magnitude buffer: 2048 entries × 17 bits |
| DSP48E1 | 3 | 0.41% | alpha×noise, leading cross-multiply, lagging cross-multiply |
Total CFAR cost: 2.82% of device LUTs, 0.48% of FFs, 0.27% of BRAM, 0.41% of DSPs. Minimal impact on headroom.
+ + +| Test Suite | Tests | Checks | Status |
|---|---|---|---|
| FPGA regression (run_regression.sh) | 22 | — | 22/22 PASS |
| CFAR standalone (tb_cfar_ca.v) | 14 | 23 | 23/23 PASS |
| Digital gain (tb_rx_gain_control.v) | — | 32 | 32/32 PASS |
| Threshold fallback (tb_threshold_detector.v) | — | 22 | 22/22 PASS |
| System E2E (tb_system_e2e.v, Group 14) | 13 | 67 | 67/67 PASS |
| Real-data co-sim: Range FFT | 1 | 1,024 | 1024/1024 exact |
| Real-data co-sim: Doppler | 1 | 2,056 | 2056/2056 exact |
| Real-data co-sim: Full-chain | 1 | 2,057 | 2057/2057 exact |
| MCU regression | 20 | — | 20/20 PASS |
5,281 individual data checks across all RTL test suites. Zero failures. Real-data co-simulation confirms bit-exact match with Python golden reference across the entire signal processing chain.
+ +~/PLFM_RADAR_work/vivado_project/bitstream/radar_system_top_build24.bit (9.7 MB)~/PLFM_RADAR_work/vivado_project/reports_build24/ (21 report files)~/PLFM_RADAR_work/build24.log~/PLFM_RADAR_work/vivado_project/build24_cfar.tclNote: TCL crashed at step 13/15 (extract_files missing parameter) after all reports were generated. Non-critical scripting bug; all implementation, optimization, and bitstream generation completed successfully.
9_Firmware/9_2_FPGA/constraints/xc7a200t_fbg484.xdc9_Firmware/9_2_FPGA/scripts/program_fpga.tcl9_Firmware/9_2_FPGA/scripts/insert_ila_probes.tcl9_Firmware/9_2_FPGA/run_regression.sh9_Firmware/9_2_FPGA/run_regression.sh9_Firmware/9_1_Microcontroller/tests/Makefile9_Firmware/9_1_Microcontroller/9_1_1_C_Cpp_Libraries/diag_log.hdocs/board-day-worksheet.htmlStatus: Current engineering baseline — Build 21 (v0.1.4-build21)
-Build 21 is the current production baseline. Full timing, utilization, power, DRC, methodology, CDC, and route reports are available on the remote Vivado host. Setup slack is +0.156 ns (tighter than Build 20's +0.426 ns due to Gap 2 register map additions, but comfortable and better than the intermediate Gap 2 build at +0.078 ns). Hold slack improved to +0.064 ns. DSP count dropped from 140 to 139 via barrel-shift twiddle optimization.
-Build 20 (v0.1.3-build20) retained as prior reference. Build 19 failed timing (WNS -0.011 ns) due to conflicting XDC generated clock, root-caused and fixed in Build 20.
+Status: Current engineering baseline — Build 24 (CFAR + pipeline fix)
+Build 24 is the current production baseline. Includes CA-CFAR detector integration (CA/GO/SO modes) with pipelined noise computation for timing closure. Full 15-point report above. WNS +0.179 ns (improved from Build 21's +0.156 ns due to phys_opt improvements). DSP count 142 (+3 for CFAR alpha and cross-multiply). BRAM 17 (+1 for CFAR magnitude buffer).
+Build 23 failed timing (WNS -0.309 ns) due to combinational critical path in CFAR noise computation. Root-caused and fixed by pipelining noise_sum_comb into a registered intermediate (noise_sum_reg), splitting the path across two clock cycles.
Build 21 (v0.1.4-build21) retained as pre-CFAR reference. Build 20 (v0.1.3-build20) and earlier retained for historical reference.
~/PLFM_RADAR_work/vivado_project/reports_build21/.host_cfar_enable defaults to disabled.~/PLFM_RADAR_work/vivado_project/reports_build24/.