1、vivado上建立工程(FPGA学习3)
2、点击“Create Block Design”,创建一个 Block 设计,即图形化设计,弹出对话框名字Design name尽量简短,否则在 Windows 下编译会有问题。
3、点击“+”(Add IP),搜索IP核,我的开发板是zynq,找到IP核后双击这个IP核,在左侧的窗口进入编辑,参考xilinx的ug1085。
下面的配置是根据硬件原理图来设置。
4、在 I/O Configuration 窗口,配置BANK电压,如配置 BANK0~BANK2 电压为 LVCMOS18,BANK3 电压为 LVCMOS33。根据模块上的硬件配置来配置 Low Speed 管脚,如开发板上用QSPI,勾选 QSPI,并设置为”Single”模式,Data Mode 为”x4“,勾选 Feedback Clk。
5、勾选 SD 1,配置 SD 卡。选择 MIO 46..51(MIO为多功能IO口,根据硬件原理图上连接),Slot Type 选择 SD 2.0,Data Transfer Mode 选择 4Bit,勾选 CD,用于检测 SD 卡插入,选择 MIO45;勾选 I2C 1,用于 EEPROM 等的 I2C,选择 MIO 32..33;勾选串口 UART 1,选择 MIO 24..25;勾选 TTC 0~TTC 3(独立通道的计数器)。
6、High Speed 部分首先配置 PS 端以太网,勾选 GEM 3,选择 MIO 64..75,勾选 MDIO 3,选择 MIO 76..77;勾选 USB 0,选择 MIO 52..63,勾选 USB 3.0,选择 GT Lane1(原理图上MGTR1,MGT0给PCIE);USB reset 选share mio,avtive low usb0里选 MIO 44
7、勾选PCIE,endpoint mode reset选MIO37,勾选 Switch To Advanced Mode,在PCIe Configuration进行配置
8、时钟配置
在 Clock Configuration 界面,Input Clocks 窗口配置参考时钟,其中 PSS_REF_CLOCK 为 ARM
的参考时钟默认为 33.333MHz;PCIe 选择 Ref Clk0,100MHz;Display Port 选择 Ref Clk2,
27MHz;USB0 选择 Ref Clk1,26MHz。
在 Output Clocks 窗口,如果不是 IOPLL,改成 IOPLL,保持一致,用同样的 PLL;; PL 的时钟保持默认,这是给 PL 端逻辑提供的时钟。Full Power 部分,其他保持默认,将 DP_VIDEO 改为 VPLL,DP_AUDIO 和 DP_STC 改为 RPLL(不同锁相环)。interconnect and switch clcks
如下:
9、DDR配置
总配置完成,选择OK
在图形上连接CLK,不然后面会报“BD41-758 not connected to a valid source”错误
10 、选择 Block 设计,resource窗口右键Create HDL Wrapper,创建一个 Verilog 或 VHDL 文件,为 block design 生成 HDL 顶层文件,点击OK,ARM成了一个IP核
11、source框,在.bd文件右键“Generate Output Products”,此步骤会生成 block 的输出文件,包
括 IP,例化模板,RTL 源文件,XDC 约束,第三方综合源文件等等。供后续操作使用。默认选择点击generate
12、在菜单栏“File -> Export -> Export Hardware...”导出硬件信息,这里就包含了 PS 端的配置
默认fixed,点击next,对话框里如果用到PL端资源要选择Include bitstream,点击 Next,如果不更改文件位置,就默认,点finished,生成XSA文件。
在工程目录下 xsa 文件为 硬件信息,FPGA工作结束,后面进入软件阶段。
13、直接打开vitis软件,设置好workspace,create project->Create a new platform from hardware(XSA),选择之前XSA文件,设置好名称,模板,点击finished
14、 完成之后可以看到生成了两个工程,一个是硬件平台工程,即之前所说的 Platfrom 工程,
一个是 APP 工程
15、展开 Platform 工程后可以看到里面包含有 BSP 工程,以及 zynq_fsbl 工程(此工程即选择
Generate boot components 之后的结果),双击 platform.spr 即可看到 Platform 对应生成的
BSP 工程,可以在这里对 BSP 进行配置。zynqmp_fsbl 即是 fsbl 的 BSP,domain_psu_cortexa53_0 即是 APP 工程的 BSP。
16、点开 BSP,Documentation 是 xilinx 提供的驱动的说明 文档,Import Examples 是 xilinx 提供的 example 工程。
17、选中 APP 工程,右键 Build Project,或者点击菜单栏的“锤子”按键,进行工程编译,编译结束,生成 elf 文件。(选择system编译时间较长)
18、调试,右键Run As -> Run Configuration, Reset entire system 是默认选中的,如果系统中还有 PL 设计,还必须选择“Program FPGA。
19固化程序
UG1085 中介绍,三步:1)Pre-configuration satge : 预加载阶段由 PMU 控制,执行 PMU ROM 中的代码设置系统;2)Configuration stage : BootRom(CSU ROM 代码的一部分)搬运
FSBL 到 OCM 后,处理器开始执行 FSBL 代码,包括初始化 PS 端配置,MIO,PLL,DDR,QSPI,SD 等,如果有 PL 端程序,加载 PL 端 bitstream,搬运用户程序到 DDR,并跳转执行;3)Post-configuration stage : FSBL 开始执行后,CSU ROM 代码进入 post-configuration 阶段,负责起系统干预响应,CSU 为验证文件正确性、通过 PCAP 加载 PL、存储管理安全密钥、解密等。
1、生成 FSBL
FSBL 是一个二级引导程序,完成 MIO 的分配、时钟、PLL、DDR 控制器初始化、SD、QSPI
控制器初始化,通过启动模式查找 bitstream 配置 FPGA,然后搜索用户程序加载到 DDR,最后
交接给应用程序执行
新建时选择了 Generate boot components 选项,所以 Platform 已经导入了 fsbl 的工程,并生成了相应的 elf 文件
(1)点击工程system,右键选择 Build project,生成uboot.bin,在debug文件夹下,BOOT.bin 文件是我们需要的启动文件,可以放到 SD 卡启动,也可以烧写到 QSPI Flash。
(2)点击 工程的 system 右键选择 Creat Boot Image,弹出的窗口中可 以看到生成的 BIF 文件路径,BIF 文件是生成 BOOT 文件的配置文件,还有生成的 BOOT.bin 文件路径。在 Boot image partitions 列表中有要合成的文件,第一个文件一定是 bootloader 文件,就是上面生成的 fsbl.elf 文件,第二个文件是 FPGA 配置文件 bitstream,第三个是应用程序,点击 Create Image 生成。将格式化的SD卡放入 BOOT.bin 文件,放入板子,设置SD卡启动的方式,即可启动。
20、QSPI启动设置
1)vitis中Xilinx选择program flash,设置好文件位置,点击program,点击 Program 等待烧写完成,硬件上设置QSPI启动方式,上电启动
2)vivado中在 HARDWARE MANGER 下选择器件,右键 Add Configuration Memory Device,学则合适器件。选择要烧写的文件和 fsbl 文件,就可以烧写了,需要 JTAG 启动模式
注意:ZYNQ芯片不能单独固化只有 PL 端的逻辑,必须要有 PS 端的配合才能固化程序。
最简单的方法设置顶层Verilog源文件top.v,添加 ZYNQ 核并配置,添加Verilog文件,在top.v内例化,zynq和Verilog,添加引脚约束文件,生成bitstream,导出硬件时勾选选择 include bitstream,在vitis里点击Create Boot Image ,生成uboot.bin,后面固化步骤一样。
PS端硬件应用基本在vitis上进行软件相关设置,需了解相关资料,如ug1085。同时看例子,点击import,将在工程中导入例程,在例程中编辑修改,再生成固化。