FPGA 从零开始学习
第一章 工欲善其事必先利其器–各类工具安装
- FPGA开发工具安装
- 软件配置和可能遇到的问题
第二章 系统搭建和硬件编程语言的学习
- FPGA硬件系统搭建
- 设计思想与方法
- VIVADO创建一个完整的工程流程
- 硬件编程语言的学习
FPGA硬件系统的搭建--VIVADO创建一个完整的工程流程
前言
初学的人最迷茫的就是怎么开始一个工程?(比如我···)这里我会用一个简单的例子从代码开始,完成整个工程流程的创建,直到上板调试程序固化完成。整个走一遍,就会掌握一个工程从代码到烧录到芯片的全部过程,希望给初次学习的人能提供一些帮助。
VIVADO创建工程全过程
1. 详细创建过程
首先第一步,我们编写一个非常简单的代码。
// LED
module led(
input key,
output led
);
assign led = key;
endmodule
Verilog学习我后续再写,目前值学了一丢丢。这里就是举个例子,很简单一个按键输入,一个LED输出,按键的高低电平直接输出点亮LED,没有用任何逻辑单元。(点灯注意一下,这里按下去是低电平,所以实际板子上肯定是灌电流点亮)
编完代码,我们就要进行编译和仿真了,这里打开Modelsim,创建新的Project(软件的安装配置见FPGA从零开始学系列其他文章)。
我起名叫led,“Project Location”是工程路径,也就是你的存放位置,然后点击OK。
出现上图,我们已经有了.v的代码,所以选择“Add Existing File”(添加已有文件),指定文件位置。
这里就可以看到文件已经加入,看到那个蓝色的显眼包“?”了吗?因为代码没有编译,所以就是这个状态。
右键编译,可以选择 Compile Selected(编译所选)和Compile All(编译全部),如果这里有好几个.v的代码,那第一个就是编译你选中的其中一个,后面就是全部编译。
编译完成没有报错就是上图状态,蓝色的问号变成了绿色的对号。下面进行仿真,右键出现下图。
这个代码是没办法仿真的,因为只定义了输入输出接口,没有激励信号。要仿真需要再添加一个仿真文件(TestBench),就是一个定义了激励信号的.v文件,过程和前面一样,也添加到这里,不重复描述了,我就用led.v来举例子。
在 Design 标签(Modelsim 中当前包含的全部库)页面中选择 work 库中的 led 模块,在 Optimization 一栏中勾选“Enable optimization”,对优化选项进行设置,OK。
进入如图界面,注意左下角的三个标签,分别对应库文件界面,工程界面和仿真界面,现在我们就在仿真界面。
右键添加波形
就可以看到波形了,这里介绍上面两个常用按键,左边红圈Restart,如果仿真出错,我们去修改代码,然后在上面说过的工程界面重新编译,编译完成重新仿真就点Restart,会清空所有波形。右边红圈Run,就是开始仿真。
这里就可以看到仿真波形了(我添加了仿真文件)。这里我们的前期准备工作就都完成了,开始VIVADO创建工程。
Create Project,起名led,下面的创建子目录根据需要勾选,勾上会自动创建工程子目录,也可以自己创建。
创建RTL工程
添加.v源文件
添加约束文件,如果有约束文件可以直接添加,没有可以空着,后面在管脚分配的地方生成约束文件。
选择FPGA型号,这个与自己手里的实际板卡对应就可以。我是用之前做的一个A7的板子做调试板用,所以选自了A7的型号。
创建完成,警告是提示没有管脚约束文件。
注意左边的三个视图,分析设计、综合设计、布线设计分别对应我们设计的不同阶段,目前就在分析设计阶段。
打开左边分析设计,点Schematic(原理图),就可以看到我们代码对应的功能模块,下面红圈就是管脚分配和电平标准设置,分配完成是黄色显示,未分配是灰色,完成后保存。
生成管脚约束文件XDC
点击XDC文件可以直接查看,里面就是我们刚才设置的管脚分配和电平标准。
接下来进行综合,红圈内可以看到当前状态,正在综合。
综合完成弹出界面,可以直接进行最后一步布线,也可以关掉从右边的布线界面打开,这里直接运行布线。
完成后可以看到状态,两个绿色的对勾,都是Complete。
这里可以打开综合界面的原理图查看,和分析界面相对比,多了输入和输出缓冲,这是自动生成的,也就是说这个功能实际上只用了FPGA里的一个输入和输出缓冲器。
打开Device就能看到FPGA内部实际使用的部分。
布线完成我们就可以生成bit流文件了,右边点击Generate Bitstream,这个就是在线烧录要使用的文件。
生成bit流文件成功
打开硬件管理器,用编程工具连接板卡的JTAG口,点击上图小红圈里的快速连接菜单。
连接成功出现上图,VIVADO正确识别FPGA,右键选择Program Device,在线编程。
选择我们刚才生成的bit流文件开始烧录,在线编程实际上是把程序写入了FPGA的SRAM里,这样你就可以在板子上测试你的代码要实现的功能了,SRAM内容掉电会失去,所以我们需要固化程序,烧录进FPGA的FLASH中,这样断电重启代码依然可以运行。
在Tools下面有生成FLASH配置文件的菜单
按照图中选择配置,格式MCS,Size选择板子上FLASH实际的大小,注意这里单位是Byte。接口也是按照实际选择,我板子上用的QSPI,选择bit流文件位置,下面校验项等也勾上。
吧唧!我这里报错了,看了一下是因为检测到的接口配置模式是1位的,我刚才选择的是4位,对应QSPI,需要改一下软件的配置模式。
打开布线设计界面,Tools下有菜单,如图红圈所示,编辑器件属性。
配置模式,选择和你的FLASH对应的就可以了,这里选中是高亮黄色,OK。
修改了配置模式需要重新生成一下bit流文件,然后用新的bit流文件再生成FLASH配置文件,成功如上图提示。
右键挂载FLASH芯片,选择板子上实际使用的型号。我用的windbond(华邦)的,这里会遇到问题,这个后面汇总再说。
挂载成功后烧录FLASH
添加生成的FLASH配置文件,擦除、编程、校验都勾上。
烧写成功提示
最后一步,右键设置从FLASH启动,大功告成。
至此,就完成了一个完成的工程流程。
2. 问题点汇总
A. FLASH接口选择问题;
一定要与实际芯片能支持的功能相一致,比如串行/并行,1bit/2bit/4bit。我遇到的就是软件配置是1bit,我根据实际芯片QSPI模式选择了4bit,所以报错了,修改配置并重新生成bit流文件。
B. 挂载FLASH芯片不识别;
这个就和VIVADO有关系了,在VIVADO的安装目录下:C:\Xilinx\Vivado\2023.2\data\xicom,这个文件夹里有个xicom_cfgmem_part_table.csv的文件,里面列举了所有能支持的FLASH型号。
我板子上用的华邦国产的,不在列表,所以是不支持的,如果用的镁光,可能就没问题了。这里解决办法是把国产芯片型号添加进列表,让VIVADO能识别出来。
在网上找了很多办法(解决办法网上很多),就是用文本编辑器打开上面的.csv文件,复制一段代码进去,作用就是把自己的型号添到列表中,还特别强调不能用EXCEL打开。所以我试了好多遍,好几种代码都没成功,最后只能用最笨的办法,直接EXCEL打开,在里面按照前面的格式添加进去,成了!所以这里其他同学如果遇到同样的问题,可以都试试,说不定哪种就能解决呢?也不是别人说不行就一定不行嘛!
总结
这篇主要是讲了如何从代码到上板卡调试最后固化程序完成完整FPGA工程开发流程。图有点多,篇幅太长,主要也是想详细记录下来每一步,让初学的人能简单直观的看到全部过程,自己也能从中得到收获,更熟悉一遍。