Files
overwatch/9_Firmware/9_2_FPGA/tb/cic_dc_output.csv
Jason c983a3c705 Achieve timing closure: DSP48E1 pipelines, 4-stage NCO, 28-bit CIC, ASYNC_REG
Phase 0+ timing optimization (attempts #13-22 + implementation):

NCO (nco_400m_enhanced.v):
- 4-stage pipeline: DSP48E1 accumulate -> LUT read -> negate -> quadrant MUX
- DSP48E1 phase accumulator in P=P+C mode (eliminates 8-stage CARRY4 chain)
- Registered phase_inc_dithered to break cascaded 32-bit add path

DDC (ddc_400m.v):
- Direct DSP48E1 instantiation for I/Q mixers (AREG=1, BREG=1, MREG=1, PREG=1)
- CEP=1, RSTP=!reset_n for proper pipeline control
- 3-stage dsp_valid_pipe for PREG=1 latency
- Behavioral sim model under ifdef SIMULATION for Icarus compatibility

CIC (cic_decimator_4x_enhanced.v):
- 28-bit accumulators (was 36) per CIC width formula: 18 + 5*log2(4) = 28
- Removed integrator/comb saturation (CIC uses wrapping arithmetic by design)
- Pipelined output saturation comparison

CDC/ASYNC_REG:
- ASYNC_REG attribute on all CDC synchronizer registers (cdc_modules.v,
  radar_system_top.v, usb_data_interface.v)
- Sync reset in generate blocks (cdc_modules.v)

Results: Vivado post-implementation WNS=+1.196ns, 0 failing endpoints,
850 LUTs (1.34%), 466 FFs (0.37%), 2 DSP48E1 (0.83%) on xc7a100t.
All testbenches pass: 241/244 (3 known stub failures).
2026-03-16 01:02:07 +02:00

678 B

1input_sampleoutput_sampledata_outdata_out_valid
26001
310101
414201
518301
622401
726501
830601
93471181
103886511
114299791
12461010001
13501110001
14541210001
15581310001
16621410001
17661510001
18701610001
19741710001
20781810001
21821910001
22862010001
23902110001
24942210001
25982310001
261022410001
271062510001
281102610001
291142710001
301182810001
311222910001
321263010001
331303110001
341343210001
351383310001
361423410001
371463510001
381503610001
391543710001
401583810001
411623910001
421664010001
431704110001
441744210001
451784310001
461824410001
471864510001
481904610001
491944710001
501984810001