FPGA硬件设计是整个项目的基石,一旦板子回来发现升级电路走不通,或者DDR3引脚分配错误,那这块板子基本就废了。为了避免这种“炸板”的惨剧,我们在项目启动阶段就必须把FPGA升级电路和外围IO设计这两个核心环节吃透。这不仅关乎板子能不能跑起来,更决定了后续产品发布后能不能远程“续命”。
现在的FPGA项目,产品发布后还能进行功能升级是标配。但指望客户打开机箱插JTAG线升级显然不现实,设计一条可靠的板级升级通路至关重要。如果你的板子上有配置器件,通常采用SPI FLASH方案,这样上电后FPGA能快速加载配置。
如果板上有CPU,事情就简单了,CPU直接通过SPI总线写FLASH就行。但这里有个致命风险:万一升级文件写错或者传输中断,板子就变“砖头”了。解决办法是利用Xilinx 7系列以后器件支持的双映像功能,在SPI Flash里存两个映像,一个是正常的用户映像,另一个是永远不动的“Golden映像”。即使升级失败,FPGA也能自动回退到Golden映像启动,保证板子不挂。
要是板上没有CPU,那就得靠FPGA内部逻辑或者外挂一颗CPLD来预留写FLASH的通路。这本质上就是设计一个用户接口到SPI接口的桥接器。虽然官方提供了参考设计,但用户还得自己搞定数据通道,比如通过以太网或串口接收升级文件。这时候配合的上位机软件必须考虑丢包、错包重传机制,确保文件100%正确写入FLASH。
对于Altera(Intel)的器件,Quartus能直接写入的一般是自家的EPCS/EPCQ系列配置芯片。如果要写普通的SPI FLASH,通常需要外接CPLD做配置电路,而且这个CPLD最好选同品牌的,否则配置IP的兼容性可能会让你头疼。

有些设计为了省成本或者空间,板上没有配置器件。这时候只能靠CPU通过被动配置方式(Passive Serial)来配置FPGA。CPU需要严格控制Program、Status、DIN这几根线的时序。这种方案的缺点是FPGA必须等CPU完全启动后才能工作,无法做到上电即运行。
还有一种高端玩法是通过PCIE接口进行配置,这在PCIE加速卡中非常常见。FPGA只需要挂一个很小的SPI FLASH保存PCIE硬核的设置,上电后快速载入,让主机的枚举软件能识别到FPGA设备。等CPU完全起机后,再通过PCIE总线把完整的功能映像载入FPGA。
这种设计对电路要求很高,不同器件在PCIE复位以及其他引脚设计上都有特殊要求,必须仔细查阅手册。但它的好处是显而易见的:既保证了PCIE设备的快速识别,又实现了灵活的功能加载。
硬件相关的第二个大坑是外围IO设计,包括VCCIO电源连接、IO位置分配、Serdes连接等。FPGA虽然号称IO支持多种标准电平,但绝不是随心所欲,特别是用到DDR3、PCIE这些高速接口时,引脚分配一旦出错,板子就得飞线甚至报废。
很多新手喜欢硬啃Datasheet,但这效率太低且容易看漏。我推荐一个绝招:建立一个Demo工程,例化所有可能用到的外围IO IP,比如DDR控制器、PCIE核、以太网接口等。把这些Example代码放在一个工程里,确保不被综合优化掉。
如果工程能顺利编译通过,一般说明IO分配在电气规则上就没大问题;如果报错,再针对性地查文档修改。编译通过后,从工程导出IO配置的CSV文件。Xilinx的工具会详细说明每个引脚的连接方式,包括端接要求;Altera在工程目录下也有个.pin文件提供类似说明。
拿着这份经过工具验证的CSV文件去做PCB Layout,基本上可以保证不会犯低级错误。这种“以软件验证硬件”的思路,能帮你在FPGA硬件设计阶段省下大量的试错成本。
做好FPGA升级电路的冗余备份,再利用Demo工程提前锁定外围IO分配,是保证FPGA硬件设计一次成功的两大法宝。把这些实战经验融入到你的设计流程中,你的板子不仅能稳定运行,还能拥有强大的现场升级能力。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。