1. 从零开始:为什么需要“融合”与“固化”?
很多刚开始玩FPGA和MicroBlaze的朋友,可能都经历过这样的场景:你在Vivado里辛辛苦苦调试好了MicroBlaze的程序,生成了一个.elf文件,也把FPGA的逻辑配置(.bit文件)搞定了。板子通过JTAG连接电脑,一点“Program Device”,系统跑起来了,一切正常,感觉大功告成。然后你兴冲冲地拔掉JTAG线,给板子重新上电,傻眼了——系统没起来,或者MicroBlaze的程序没了,又回到了初始状态。
这就是我们今天要解决的核心问题:如何让你的设计,包括FPGA的硬件配置和MicroBlaze的软件程序,在脱离电脑、独立上电时,能够“自己”启动起来。这个“自己启动”的过程,在嵌入式系统里叫做“自举”(Boot)。而实现自举的关键一步,就是把.bit和.elf这两个文件“融合”成一个完整的、可以被板载Flash存储器识别的“固件”镜像,然后把这个镜像“固化”到Flash里。这样,FPGA上电后,会先从Flash里读取配置信息来恢复自己的硬件电路,紧接着,被配置好的MicroBlaze处理器会从Flash的指定位置找到并执行你的程序。整个过程一气呵成,无需电脑干预。
听起来是不是有点像给一台“空白”的电脑主板,先刷入BIOS(类比FPGA配置),再安装一个操作系统(类比MicroBlaze程序)?只不过我们这里的“BIOS”和“系统”是打包在一起,一次性写入“硬盘”(Flash)的。这个打包和写入的过程,就是“融合固化”。我刚开始做项目时,也在这里卡了很久,总觉得Vivado的流程有点“黑盒”,参数配置不对,要么是文件生成失败,要么是烧进去不启动。踩过几次坑之后,我才慢慢摸清了从Bitstream到Flash的完整路径。这篇文章,我就把我实战中总结的步骤、关键配置和容易掉进去的“坑”,毫无保留地分享给你。
2. 工程配置:为融合打好基础
在动手生成最终文件之前,我们得先在Vivado工程里做好一系列准备工作。这些设置就像是烹饪前的备菜,菜备好了,后面炒起来才顺手。这一步如果漏了或者错了,后面很可能白忙活。
2.1 生成Bitstream的“副产品”:.bin文件
Vivado默认生成的比特流文件是.bit格式。这个文件格式包含了FPGA配置数据,但通常也包含了一些JTAG调试用的头部信息。对于烧写到Flash来说,我们更需要一个“纯净”的二进制镜像,也就是.bin文件。这个文件只包含最核心的配置数据,体积更小,格式也更适合Flash存储。
设置方法非常简单。打开你的Vivado工程,在左侧的“Flow Navigator”中找到“Settings”,或者从菜单栏的“Tools” -> “Settings”进入。在弹出的设置窗口中,找到“Bitstream”这一项。在这里,你会看到一个复选框,叫做“-bin_file”(不同Vivado版本可能描述略有差异,比如“Enable bin file generation”)。务必勾选它。
勾选之后,每次你执行“Generate Bitstream”时,Vivado除了生成常规的.bit文件,还会在同样的输出目录下(通常是*_runs/impl_1文件夹里)生成一个同名的.bin文件。这个.bin文件就是我们后续操作的起点。我建议你养成习惯,无论当前项目是否需要烧写Flash,都把这个选项打开,有备无患。
2.2 约束文件里的“乾坤”:配置模式与参数
这是整个流程中非常关键,也最容易出错的一环。FPGA通过哪些引脚、以什么方式、多快的速度从Flash读取配置,全靠约束文件(通常是.xdc文件)里的这几行命令来定义。这里我们主要讨论两种常见的配置模式:SPI Flash和BPI Flash。
SPI Flash模式:这是目前最常用的方式,因为SPI Flash引脚少、成本低、容量大。你的板卡上很可能用的就是一颗四线(SPIx4)的SPI Flash芯片。
# 启用比特流压缩,可以减少文件大小,缩短加载时间
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
# 设置配置时钟速率,单位是MHz。33是一个常用值,具体需参考你的Flash芯片手册和FPGA速度等级
set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design]
# 设置配置模式为四线SPI
set_property CONFIG_MODE SPIx4 [cu


1万+

被折叠的 条评论
为什么被折叠?



