ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FPGA配置实战:XAPP585与SPI Flash引导全解析

FPGA配置实战:XAPP585与SPI Flash引导全解析 简介Xilinx Xapp585资源包面向LVDS与CameraLink高速接口开发的FPGA工程师提供了完整的应用笔记配套资料包含参考设计、配置文件、示例代码与详细文档可帮助理解XAPP585中关于低压差分信号传输和CameraLink接口的实现要点。压缩包共868个文件大小65.54MB以Verilog/VHDL源码、XDC约束、Tcl脚本、DCP网表和PDF文档为主同时包含大量仿真与综合脚本如simulate.bat、compile.bat便于直接运行和二次开发。目前已有387人学习使用。读者可因此在Vivado环境下掌握配置LVDS收发器、搭建CameraLink图像采集链路的关键步骤并可直接参考工程文件结构、时序约束和调试脚本大幅缩短高速数据接口的设计验证周期是数字逻辑与嵌入式工程师的实用参考资料。1. XAPP585 为什么频繁出现在配置相关的讨论里我之前遇到过好几次这样的情况板子画完了FPGA 也焊上去了逻辑代码跑起来都挺好结果等到想给产线做量产镜像的时候才发现连配置 Flash 的路都没走通。翻了一阵子 Xilinx 官网最后找到 XAPP585发现人家早把这里的门道讲清楚了只是自己在画板之前没认真读。XAPP585 是 Xilinx 官方应用笔记里和 FPGA 配置紧密相关的一份参考文档重点盯着 SPI NOR Flash 的引导与编程这个环节。很多人第一次接触 7 系列或者 Spartan-6 的板级设计都是从这份笔记开始的。它不像 UG470 那本配置手册一样又全又厚而是把“如何用一颗 SPI Flash 把 FPGA 拉起来”这件事压缩成几页能直接落地的结论。比如 Flash 选型、引脚连接、模式引脚拨法、JTAG 转 SPI 的烧录顺序这些在实际项目中反复踩的坑笔记里基本都有对应说明。这份笔记适合谁说实在的配置这件事在 FPGA 项目里属于“平时没人提出事最要命”的环节。画原理图的人如果没把模式引脚和 Flash 供电处理好等板子贴出来才发现引导失败那就不是改一行代码能解决的事了。所以无论是刚做完一两版板子的硬件工程师还是在 Linux 下折腾 Xilinx 工具链的嵌入式开发都值得把 XAPP585 的思路过一遍。读完之后你不会变成配置专家但至少知道下一步该点哪个菜单、该量哪个引脚。2. 配置链路拆解bit 文件到 SPI NOR Flash 之间到底发生了什么2.1 为什么 FPGA 一定需要一颗外部 FlashFPGA 的 SRAM 架构决定了它断电即失忆。上电瞬间LUT、FF、BRAM 里面的内容全部是未知态它必须从某个外部源把比特流读进来才能开始工作。这个外部源可以是 JTAG、SPI NOR Flash、BPI Flash、SD 卡甚至可以通过 SelectMAP 由处理器主动灌数据。XAPP585 所关注的核心场景是用一颗 SPI NOR Flash 做配置源这也是大多数产品板上最常见的设计。很多人有个误解觉得 FPGA 像 MCU 一样程序烧进去就完事了。实际上 FPGA 每次上电都要重新“自举”一次。SPI Flash 掉电不丢数据所以它充当的就是这个“启动盘”角色。FPGA 内部的配置逻辑会主动产生时钟把 Flash 里的 bitstream 按固定协议读出来加载进内部配置存储器最后拉高 DONE 引脚进入用户逻辑运行状态。这个过程如果哪一步断了现象通常都是 DONE 不拉高或者 JTAG 能连上但逻辑根本没跑起来。2.2 模式引脚决定配置源很多人栽在这里7 系列的配置源选择靠 M[2:0] 三个引脚。这三个引脚必须在 FPGA 上电时保持稳定XAPP585 里面的器件连接图反复强调这一点因为默认状态很可能不是你想要的。M[2:0]配置模式典型用途001Master SPI板载 SPI Flash上电自举010Master BPI并行 NOR Flash老式设计000Slave SelectMAP处理器主动配置100JTAG调试模式仅通过 JTAG 加载实际项目里如果 M[2:0] 刚好停留在 JTAG 模式FPGA 上电后不会主动去读 SPI Flash你就算把 Flash 烧得再完整板子也跑不起来。而且这个现象特别迷惑人——用 JTAG 连上能识别器件甚至可以直接 download.bit 调试一切看起来都正常但一断电再上电逻辑就是不工作。处理办法不复杂原理图上给这三个引脚加上下拉电阻按目标配置模式固定电平就行。常见做法是 Master SPI 模式也就是 M[2:0]001第二个引脚通过电阻拉高或拉低具体阻值 4.7kΩ 或 10kΩ 都可以关键是不要悬空。2.3 Flash 里放的是 bin不是 bit另一个高频坑是把 .bit 文件直接写进 SPI Flash然后上电发现 FPGA 毫无反应。.bit 文件本身是给 JTAG 下载链用的里面带有设备 ID、包头标志、甚至还有一些 JTAG 专用信息FPGA 的主动配置逻辑并不认这套格式。主 SPI 配置需要的是精简的二进制镜像也就是 .bin。在 Vivado 里生成 .bin 通常用 write_cfgmem 命令ISE 里则用 Generate PROM/ACF File 向导。这个步骤错过了后面所有烧录动作都是白费。xapp585 这类配置笔记都会明确标出这个转换环节但实际项目里还是经常看到有人在问“为什么 bin 烧进去不启动”十有八九是根本没转格式直接把 bit 塞给了 Flash。3. 挂 W25Q 的实际动作原理图、选型与 JTAG 烧录顺序3.1 容量和封装怎么选国内做 FPGA 板子最常拿到的 SPI NOR Flash 就是 Winbond W25Q 系列。选容量不能只看 bitstream 大小要按 4 倍余量起步。需求场景推荐 Flash说明小规模逻辑bit 只有几百 KBW25Q162MB够用但后续扩展余地小通用产品包含配置 少量数据W25Q648MB性价比较高需要双镜像、固件升级或运行日志W25Q12816MB工业板卡默认选择bit 很大且升级频繁W25Q25632MB注意地址宽度与命令集差异封装方面SOIC-8 是最常见的引脚间距大手工焊接也容易。WSON 封装体积更小但底部有散热焊盘手焊难度高一些。对于量产产品我建议直接用 W25Q128 搭配 SOIC-8 封装通用性强价格波动小供应链也稳定。3.2 原理图上不能省的三处连接第一处是 SPI 信号和 FPGA 配置引脚的对应关系。7 系列 FPGA 的专用配置引脚有名字比如 D0、D1、DQS、CSO_B、CCLK不能随便找几个普通 IO 替代。具体哪个封装对应哪个引脚要以 UG470 里的引脚表和封装图纸为准直接猜很容易接错。第二处是 VCCO_0 电源。SPI Flash 的供电电压必须和 FPGA bank 0 的 VCCO 一致否则电平不匹配读回来的数据会随机出错。常见设计是 3.3V 给 FlashFPGA bank 0 也接 3.3V这个对应关系必须在原理图评审时确认。第三处是 WP# 和 HOLD# 引脚。W25Q 的这两个引脚如果悬空在电压波动或者外部噪声干扰时Flash 可能意外进入写保护或者暂停传输状态。最稳妥的做法是分别通过 10kΩ 电阻上拉到 3.3V。3.3 JTAG 烧 Flash 的推荐顺序没有独立烧录器时可以通过 JTAG 把 FPGA 配置起来再借助 FPGA 内部的边界扫描结构把镜像写进 SPI Flash这也是 xapp585 里相当实用的流程。具体顺序是先用 Vivado Hardware Manager 或 ISE iMPACT 连接 JTAG 链下载 .bit 文件确认 FPGA 已经跑起来。然后在 Hardware Manager 里选择 Add Configuration Memory Device找到对应的 W25Q 型号加载 .bin 文件执行烧录。烧完以后把 JTAG 断开重新上电观察 DONE 引脚是否拉高。如果上电后依然不启动优先检查三件事模式引脚电平是否处于 Master SPI、FPGA bank 0 电压是否到达 Flash 供电电压、以及烧录时是否真的写入的是 bin 而不是 bit。按照这个顺序排查大部分问题都能定位。4. 用 Linux 跑 Xilinx 工具的踩坑清单4.1 安装阶段最容易卡住的是 32 位库Linux 环境下用 ISE 14.7 是比较折磨人的一件事。ISE 本身是 32 位程序在现代 Ubuntu 上缺一堆库最常见的错误是 libtinfo.so.5 找不到或者 libusb 版本不匹配。装完虚拟机里跑起来又发现 USB-JTAG 驱动加载不了。基本的依赖可以先装齐sudo apt update sudo apt install lib32z1 lib32ncurses6 lib32stdc6 libtinfo5 libusb-1.0-0-devVivado 2019.2 之后的版本对 Linux 要友好很多大部分依赖都是 64 位的装的时候不再那么令人头疼。但如果你需要维护老项目不得不回头用 ISE 14.7那还是建议装一个 Ubuntu 18.04 的虚拟机或者准备好接受各种兼容性问题。4.2 许可证问题的正确打开方式Xilinx 在 Linux 下的许可证走的是 FlexNet 体系最典型的混乱来自环境变量。安装完工具之后先执行source /opt/Xilinx/14.7/ISE_DS/settings64.sh或者对于 Vivadosource /tools/Xilinx/Vivado/2023.1/settings64.sh然后再检查许可证是否被正确识别。很多人直接把 license 文件放到默认目录就不管了结果发现 ISE 和 Vivado 版本之间互相抢许可证或者环境变量指向了一个失效的路径。我个人的做法是单独建一个目录放 license然后在启动脚本里显式设置 XILINXD_LICENSE_FILE避免系统里多份 license 相互干扰。4.3 命令行是 Linux 下的正确姿势Linux 上跑图形界面的 iMPACT 或 Vivado GUI体验远不如 Windows 流畅而且远程开发时经常没有显示器。更实际的方案是用批处理模式。Vivado 生成 bin 的一个简单 Tcl 脚本片段open_project top.xpr launch_runs impl_1 -to_step write_bitstream wait_on_run impl_1 write_cfgmem -format bin -interface spix4 -size 16 -loadbit 0x0 top.bit -file top.bin然后用vivado -mode batch -source gen_bit.tcl这样生成镜像再交给 Hardware Manager 去烧录整个流程可以脚本化比 GUI 点来点去稳定得多。还需要处理 USB 线缆权限问题。Linux 默认不会给普通用户访问 JTAG 线缆的权限需要加一条 udev 规则。把下面内容写进/etc/udev/rules.d/99-xilinx.rulesSUBSYSTEMusb, ATTR{idVendor}03fd, MODE0666, GROUPplugdev SUBSYSTEMusb, ATTR{idVendor}1443, MODE0666, GROUPplugdev然后重载规则并重新插拔线缆sudo udevadm control --reload-rules这两个 Vendor ID 分别对应 Xilinx 自家线缆和 Digilent 线缆覆盖了市面上大部分下载器。处理完之后普通用户不需要再带 sudo可以直接打开 Hardware Manager 操作。5. 由配置延伸出去选型观与 DP1.4 IP 收费现实5.1 选型不应该只看逻辑资源和 XAPP585 相关的日常工作里经常被问到的还有 FPGA 选型问题。我观察到一个普遍误区很多人一上来就比 LUT 数量、DSP 数量好像这些数字越大越好。实际上选型的时候封装和引脚分配的约束往往比逻辑资源更早浮出水面。FPGA 选型要先把 I/O bank 数量、封装尺寸、GT 收发器数量、硬核资源这些板级因素定下来。特别是当你已经确定要用 SPI NOR Flash 做配置引导的时候至少得保证所选的封装有足够且可用的配置引脚并且 bank 0 的供电设计不会和其他 bank 冲突。不少芯片在理论上资源很充足但具体封装里某些功能引脚和普通 IO 是复用的如果你把普通 IO 用得太满配置引脚可能没法正常工作。从应用角度粗分Artix-7 系列适合逻辑量适中、收发器速率不高的场景Kintex-7 适合需要更多 DSP 和高性能串行收发器的设计如果是跑嵌入式 Linux 加 FPGA 逻辑Zynq-7000 或者 Zynq UltraScale 更合适。配置引导方案上Zynq 有专门的 QSPI 控制器而纯 FPGA 就得老老实实走 SPI Master 模式。5.2 DP1.4 IP 到底要不要钱有人问“Xilinx 的 DP1.4 IP 要钱吗”这个问题不能一句“要”或“不要”简单回答。Vivado IP Catalog 里关于 DisplayPort 的 IP 有好几个版本授权方式不一样。老一点的 DP 1.4 相关 IP 在 7 系列器件上通常会标注是否需要额外 license有些基础功能如果被归类为“Included in Vivado Design Suite”那就表示你装了 Vivado 就能用不需要另外交费。但如果是需要 license key 的版本在 IP 配置界面里会有明确的许可状态提示。实操层面最快的判断方法是在 Vivado 的 IP Catalog 里搜 DisplayPort选中具体 IP 后看 “IP License” 一栏。写着 “Included” 就是免费写着 “Requires a paid license” 就别浪费时间直接评估替代方案。另外要注意DP1.4 通常是跑在 GT 高速收发器上的就算 IP 本身免费收发器的物理层设计、参考时钟、电源噪声这些板级因素仍然决定你的 DP 能不能稳定出图。这也回到了配置与启动设计的统一话题——任何高速接口要想跑得稳物理层的底子必须扎实。6 最后想补充的配置心得项目做得多了之后会发现配置设计往往决定了一个板子的“性格”。同一个 FPGA配置方案设计得好产线烧录顺畅现场升级可靠出了问题还能远程回退配置方案设计得差轻则每次上电提心吊胆重则一块板子直接变砖。我在实际项目里的几个固定习惯分享出来供参考。第一QSPI x4 模式虽然速度快但前提是 FPGA 和 Flash 双方都支持对应的 Read 命令而且 PCB 走线不能太长。SPI 时钟上到 100MHz 以后走线超过十几厘米就容易出现读到一半数据错乱。第二多镜像功能是双刃剑如果回退机制没做好远程升级失败的后果比不升级更严重。第三FPGA 配置引脚附近不要放开关电源配置时钟和数据线的信号完整性直接影响启动成功率。XAPP585 这份应用笔记解决的问题说到底就是让 FPGA 工程师在配置这件事上少走弯路。如果你正准备画一块带 SPI Flash 的 FPGA 板子花一个小时把配置链路理清楚远比后面花三天排查启动失败更划算。本文还有配套的精品资源点击获取
返回列表