PLFM_RADAR 的 USB_MODE 如何在 FT2232H 与 FT601 之间选择?
发布时间:2026/9/13 11:24:38 作者:尧图编辑部 阅读量:1,286

PLFM_RADAR 的 USB_MODE 如何在 FT2232H 与 FT601 之间选择【免费下载链接】PLFM_RADAROpen-source, low-cost 10.5 GHz PLFM phased array RADAR system项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADARPLFM_RADARAERIS-1010.5 GHz PLFM 相控阵雷达的 FPGA 设计有两条 USB 数据通路FT2232HUSB 2.08 位和 FT601USB 3.032 位。把设计集成到具体电路板时必须用radar_system_top.v里的USB_MODE参数二选一0选 FT6011选 FT2232H。这个选择是编译期的——radar_system_top.v中有一个generate块根据USB_MODE只例化其中一个接口模块未选用的那一路 I/O 全部被固定到无活动状态低有效信号拉高、高有效信号拉低、双向总线高阻。运行中无法切换所以集成前必须先确定目标板。选择依据看板上焊的是哪颗 USB 芯片哪条路径可用由硬件决定每块板上只物理连接了一颗 USB 芯片目标板FPGA 器件USB 芯片数据总线时钟对应 USB_MODE50T 生产板XC7A50T-2FTG256IFT2232HBank 35245 同步 FIFO 模式仅用 Channel A8 位60 MHzFT2232H CLKOUT1200T 开发板XC7A200T-2FBG484IFT601Bank 1632 位 字节使能100 MHz0Trenz TE0712/TE0701、TE0713/TE0701XC7A200T-2FBG484I/CFT60132 位100 MHz0构建脚本覆盖默认值两条路径共用同一组内部雷达数据总线和主机命令接口距离像、多普勒、CFAR 检测结果、AGC 状态回读等所以主机侧协议不变USB_MODE只决定物理 USB 通道。50T 生产板用 wrapper 顶层自动锁定 USB_MODE150T 板只有 69 个可用 IO因此不能直接用radar_system_top作顶层而是用专门的 wrapper radar_system_top_50t.v。它在例化核心时强制写死参数radar_system_top #( .USB_MODE(1) // FT2232H (8-bit USB 2.0) for 50T production ) u_core ( .ft601_clk_in (ft_clkout), // FT2232H 60 MHz CLKOUT → 共享 USB 时钟端口 ... );注意 FT2232H 的 60 MHz CLKOUT 接到的是共享时钟端口ft601_clk_in而不是 FT601 专用引脚FT601 侧的输入在 wrapper 里被固定为 032 位数据总线固定高阻。构建命令在 FPGA 源码目录9_Firmware/9_2_FPGA下执行vivado -mode batch -source scripts/50t/build_50t.tcl 21 | tee build_50t/vivado.logbuild_50t.tcl 已经替你完成了选择器件设为xc7a50tftg256-2顶层设为radar_system_top_50t约束加载xc7a50t_ftg256.xdc和adc_clk_mmcm.xdc。脚本会自动跳过*_te0712_*、*_te0713_*文件。200T 开发板用 generic 覆盖为 USB_MODE0200T 板直接用radar_system_top作顶层但 RTL 中parameter USB_MODE 1是默认值FT2232H生产默认所以 FT601 构建必须显式覆盖。build_200t.tcl 通过 Vivado generic 完成set top_module radar_system_top set fpga_part xc7a200tfbg484-2 ... # Override USB_MODE to 0 (FT601) for 200T premium board. # The RTL default is USB_MODE1 (FT2232H, production 50T). set_property generic {USB_MODE0} [current_fileset]构建命令vivado -mode batch -source scripts/200t/build_200t.tcl \ -log build/build.log -journal build/build.jouTrenz TE0712/TE0713 开发目标同理各自有独立顶层radar_system_top_te0712_dev/radar_system_top_te0713_dev和最小约束文件用 build_te0712_dev.tcl、build_te0713_dev.tcl 分别构建。README 的结论是你不需要手工设置USB_MODE顶层模块和构建脚本的选择就处理了这件事——构建脚本顶层模块约束文件USB_MODEscripts/50t/build_50t.tclradar_system_top_50txc7a50t_ftg256.xdc1FT2232Hscripts/200t/build_200t.tclradar_system_topxc7a200t_fbg484.xdc0FT601generic 覆盖如果自己在 Vivado 工程里搭项目而不是跑脚本要点是在 fileset 上设置generic {USB_MODE0}或改用 wrapper 模块并且同一时间只启用一个目标的 XDC——在 Sources 面板对不需要的 XDC 右键Set File Properties Enabled false或分两个约束集切换。验证选择是否生效顶层与参数构建日志开头会打印Top: radar_system_top_50t50T或Top: radar_system_top200T。自己搭的项目可在综合后确认 fileset 的 generic 值。位流产出50T 构建输出build_50t/bitstream/radar_system_top_50t.bit脚本会打印Bitstream: ... ([size] KB)缺失时打印WARNING: Bitstream not generated!200T 构建把aeris10_radar.runs/impl_1/radar_system_top.bit复制为build/bitstream/radar_system_top_build21.bit并在摘要中写入00_build21_summary.txt的 Signoff 段PASS/FAIL。DRC 侧的信号50T 构建脚本会把NSTD-1/UCIO-1降级为 WarningREADME 和脚本注释都说明这是因为 FT601 端口在USB_MODE1的 generate 块下未约束、处于非活动状态——这些警告在 50T 构建中出现是预期现象不是接线错误。反过来如果 50T 构建里 FT2232HBank 35引脚出现未约束告警才是选错了模式。限制与文档中一处冲突只能在编译期选择运行中无法切换选错模式时板子上没有物理连线的接口会被驱动但雷达数据链路不会通。50T 必须使用radar_system_top_50t作顶层。README 在 Notes 一节写的是直接用radar_system_top会默认到 FT601USB_MODE0该模式在 50T 板上没有物理连接。但同文档的 How USB_MODE Is Passed Per Board Target 一节、radar_system_top.v 第 145 行的parameter USB_MODE 1以及build_200t.tcl的注释都表明 RTL 默认值是1FT2232H200T 是靠 generic 覆盖到 0。两处说法冲突本文如实保留好在两条官方构建脚本都显式指定了顶层和 generic只要走脚本流程就不受这个矛盾影响。时钟差异要记住FT2232H 模式下 USB 接口时钟是 60 MHzCLKOUT 接 MRCC 引脚 C4脚本为此把PLIO-9降级并设置CLOCK_DEDICATED_ROUTE FALSEFT601 模式下是 100 MHz。50T 的 Bank 35 已占用 15 个 FT2232H 信号余量可用于扩展200T 的 Bank 16FT601已 50/50 用满无扩展空间。完成构建并确认位流生成后下一步就是按目标板把位流加载到 FPGA再用主机侧 USB 设备确认数据通路FT2232H 为 USB 2.0 设备、FT601 为 USB 3.0 设备——这一步属于上板调试范畴本文不再展开。【免费下载链接】PLFM_RADAROpen-source, low-cost 10.5 GHz PLFM phased array RADAR system项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考