Jason
408f4d126f
feat(usb): add FT2232H USB 2.0 interface for 50T production board
Replace FT601 (USB 3.0, 32-bit) with FT2232H (USB 2.0, 8-bit) on the
50T production board per updated Eagle schematic (commit 0db0e7b).
USB 3.0 via FT601 remains available on the 200T premium board.
RTL changes:
- Add usb_data_interface_ft2232h.v: 245 Sync FIFO interface with toggle
CDC (3-stage) for reliable 100MHz->60MHz clock domain crossing,
mux-based byte serialization for 11-byte data packets, 26-byte status
packets, and 4-byte sequential command read FSM
- Add USB_MODE parameter to radar_system_top.v with generate block:
USB_MODE=0 selects FT601 (200T), USB_MODE=1 selects FT2232H (50T)
- Wire FT2232H ports in radar_system_top_50t.v with USB_MODE=1 override,
connect ft_clkout to shared clock input port
- Add post-DSP retiming register in ddc_400m.v to fix marginal 400MHz
timing path (WNS improved from +0.070ns to +0.088ns)
Constraints:
- Add FT2232H pin assignments for all 15 signals on Bank 35 (LVCMOS33)
- Add 60MHz ft_clkout clock constraint (16.667ns) on MRCC N-type pin C4
- Add CLOCK_DEDICATED_ROUTE FALSE for N-type MRCC workaround
- Add CDC false paths between ft_clkout and clk_100m/clk_120m_dac
Build scripts:
- Add PLIO-9 DRC demotion and CLOCK_DEDICATED_ROUTE property in build_50t.tcl
- Add usb_data_interface_ft2232h.v to build_200t.tcl explicit file list
Python host:
- Add FT2232HConnection class using pyftdi SyncFIFO (VID 0x0403:0x6010)
- Add compact 11-byte packet parser for FT2232H data packets
- Update RadarAcquisition to support both FT601 and FT2232H connections
Test results:
- iverilog regression: 23/23 PASS
- Vivado Build 15 (XC7A50T): WNS=+0.088ns, WHS=+0.059ns, 0 violations
- DSP48E1: 112/120 (93.3%), LUTs: 10,060/32,600 (30.9%)
2026-04-07 19:22:16 +03:00
..
2026-04-07 02:51:48 +03:00
2026-04-07 02:51:48 +03:00
2026-03-16 18:51:08 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 16:01:40 +02:00
2026-03-16 16:01:40 +02:00
2026-03-16 16:01:40 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 13:37:10 +02:00
2026-03-15 06:14:11 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 01:02:07 +02:00
2026-03-16 01:02:07 +02:00
2026-04-07 19:22:16 +03:00
2026-03-16 22:24:34 +02:00
2026-03-17 19:38:09 +02:00
2026-03-20 04:57:34 +02:00
2026-03-15 06:14:11 +02:00
2026-03-20 01:45:00 +02:00
2026-03-15 06:14:11 +02:00
2026-03-20 04:38:35 +02:00
2026-03-20 04:38:35 +02:00
2026-03-16 18:14:06 +02:00
2026-04-07 02:51:48 +03:00
2026-04-07 02:51:48 +03:00
2026-03-15 06:14:11 +02:00
2026-04-07 02:51:48 +03:00
2026-03-19 20:39:01 +02:00
2026-03-20 19:02:06 +02:00
2026-03-15 06:14:11 +02:00
2026-04-07 02:51:48 +03:00
2026-04-07 02:51:48 +03:00
2026-03-18 01:28:42 +02:00
2026-03-19 12:20:37 +02:00
2026-03-16 10:25:07 +02:00
2026-03-16 16:23:01 +02:00
2026-03-20 16:39:17 +02:00
2026-03-16 19:15:23 +02:00
2026-03-16 15:02:35 +02:00
2026-03-16 23:23:06 +02:00
2026-03-19 23:54:48 +02:00
2026-03-20 04:57:34 +02:00
2026-03-20 04:38:35 +02:00
2026-03-20 03:19:22 +02:00
2026-03-20 04:38:35 +02:00
2026-04-07 02:51:48 +03:00
2026-03-20 04:38:35 +02:00
2026-03-20 20:03:11 +02:00