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%)
This commit is contained in:
@@ -68,12 +68,18 @@ add_files -fileset constrs_1 -norecurse [file join $project_root "constraints" "
|
||||
# conflict.
|
||||
set_property SEVERITY {Warning} [get_drc_checks BIVC-1]
|
||||
|
||||
# NSTD-1 / UCIO-1: 118 unconstrained port bits — FT601 USB 3.0 (chip unwired
|
||||
# on 50T board), dac_clk (DAC clock from AD9523, not FPGA), and all
|
||||
# status/debug outputs (no physical pins on FTG256 package).
|
||||
# NSTD-1 / UCIO-1: Unconstrained port bits — FT601 USB ports (inactive with
|
||||
# USB_MODE=1 generate block), dac_clk (DAC clock from AD9523, not FPGA),
|
||||
# and all status/debug outputs (no physical pins on FTG256 package).
|
||||
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
|
||||
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
|
||||
|
||||
# PLIO-9: FT2232H CLKOUT is routed to C4 (IO_L12N_T1_MRCC_35), the N-type
|
||||
# pin of a Multi-Region Clock-Capable pair. Clock inputs should ideally use
|
||||
# the P-type pin, but IBUFG works correctly on either. The schematic routes
|
||||
# to C4 and cannot be changed. Safe to demote.
|
||||
set_property SEVERITY {Warning} [get_drc_checks PLIO-9]
|
||||
|
||||
# ===== SYNTHESIS =====
|
||||
set synth_start [clock seconds]
|
||||
launch_runs synth_1 -jobs 8
|
||||
@@ -103,6 +109,14 @@ set impl_start [clock seconds]
|
||||
set_property SEVERITY {Warning} [get_drc_checks BIVC-1]
|
||||
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
|
||||
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
|
||||
set_property SEVERITY {Warning} [get_drc_checks PLIO-9]
|
||||
|
||||
# FT2232H CLKOUT on C4 (N-type MRCC) — override dedicated clock route check.
|
||||
# The schematic routes the FT2232H 60 MHz clock to the N-pin of a differential
|
||||
# MRCC pair. Vivado Place 30-876 requires this property to allow placement.
|
||||
# The clock still reaches the clock network via IBUFG — this only suppresses
|
||||
# the DRC that demands the P-type pin.
|
||||
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets {ft_clkout_IBUF}]
|
||||
|
||||
# ---- Run implementation steps ----
|
||||
opt_design -directive Explore
|
||||
|
||||
Reference in New Issue
Block a user