嵌入式Zynq_BSP生成流程
目录
一Vivado 安装... 2
二Vivado 工程创建... 3
1 .Create Project. 3
2.Create Block Design. 3
3 IP Configuration & HDL File Create. 4
3.1 ZYNQ配置... 4
3.2 GPIO 0 &GPIO 1配置... 8
3.3 CONCAT配置... 9
3.4 AXI_BRAM_Controller配置... 9
3.5最终模块图...10
3.6 模块互连... 11
4 Synthesis. 14
5 Implementation. 15
6 Create Bitstream.. 15
三SDK验证BSP.16
1 Hello World Project Test. 16
四 参考资料... 19
安装选项如图,建议安装到C盘以加快开发速度。我选择版本是Vivado 2016.2(比ISE更适合嵌入式开发,且ISE已停止更新),建议采用一致版本。软件安装包,硬件参考工程和软件参考工程均在交接资料里。
如图只选择ZYNQ 和SDK (节约C硬盘空间),如需其他芯片支持,可自定义选择。
双击Vivado2016.2 快捷方式进入Vivado 。
Quick Start à Create New Project à Next à Prj_Name: NavZynq7030Demo,目录默认 à Next à选择芯片xc7z030ffg676-2à Next à Finish 。
如下图所示。
创建Block Design之前可以通过ProjectSetting 设置语言VHDL or Verilog。
单击Create Block Design,如下图,名字e.g.: Zynq_Top 其余默认,OK。
在弹出的Diagram 中右键选择 Add IP,输入用到的IP。
依次根据如下关键字出入IP,zynq, axi_gpio, axi_bram, block memory, concat.如下图。
双击ZYNQ 如下图,根据硬件原理图和实际Board信息进行配置。
单击 PS-PL Configuration 默认选项即可,即一个MAXI GP0 interface .(根据项目需求定制)如下图。
跳过 Peripheral I/O Pins 单击 MIO Configuration 这里需要对照实际原理图进行Match.
先把Bank 0 & Bank1 电压设为LVCMOS 1.8V 参考Zynq702 Board。(更新Bank0电压改为LVCOMS3.3V,且SPI改给fast模式,disable上拉)
先配置Memory Interfaces 的QSPI Flash 和APU 中的Timer 0 如下图。
在配置I/O Peripherals 接口如下图。
继续配置Clock Configuration 只需把 Input Frequency改为50.0MHz,DDR时钟改为400MHz(根据DDR2手册配置)如下图。
继续DDR Configuration 如下图。
直接跳过SMC Timing Calculation,进入Interrupts 配置。如下图。
OK后ZYNQ 的框图如下。
如下图GPIO0 &GPIO1配置
GPIO0 配置为13bit 其中 10bit SPI 片选,和3Bit LED,Pin对应关系见Pin_Map.txt;
GPIO1 配置为 8bit 用于产生中断,进行中断嵌套验证。
双击IP concat 按照下图进行配置以满足Zynq IRQ 的输入需求。(参考官方论坛)
同理,双击进入配置,只留下一个PORTA参考下图。
BRAM 模块不需要配置,最终框图如下。
第一步:单击zynq ,点击左上角的 RunBlock Automation 如下图,OK。
第二步:把GPIO1 的8个pin 通过Concat 模块连接到IRQ_F2P 接口。并微调给模块的位置如下图。
第三步:点击左上角的Run Connection Automation
如图 Select All 后OK,Vivado 会根据接口自动连线并自动生成了2个IP,一个用于时钟和复位信号扩展,一个是AXI桥。工具布线会很慢,并且不智能,且Port需要在边缘,所以为追求美观需要对个别模块布局进行微调。
右键SAVE as PDF File,默认路径即可,如我的工程如下图,pdf 为整个ZYNQ的最Top图。
微调后的的最终模块框图如下。
保存工程 Ctrl+S ,右键 ValidateDesign 或者F6,使能各模块。验证成功并没有错误或者关键警告。注意:IRQ_F2P 已经自动更新。
左侧Block Designs 下点击Sources 点击IP Source,右键Zynq_Top如下图,选择Create HDLWrapper,生成硬件描述语言。WARNING: [BD 41-235] Width mismatch when connecting pin:'/blk_mem_gen_0/addra'(32) to net 'axi_bram_ctrl_0_BRAM_PORTA_ADDR'(13) - Onlylower order bits will be connected。(8K ram决定只有13bitaddr)所以可以忽略这个警告。
综合生成网表如下图,点击最左侧的SynthesisàRun Synthesis,等待几分钟。
综合完成点击 OpenSynthesized Design 点击I/O Planning,给GPIO0进行管脚映射。按照Pin_Map.txt进行管脚映射。电压改为LVCOMS18。Ctrl+S保存如下图。
其中前10个pin 用于片选SPIDevice,后三个为PL 侧LED。
点击Run Implementation 进行布局布线,会提示Synthesisout of date 点击yes 即可,会重新综合,这次比较快。等待布局布线完成后点击上边的Reload。
点击 Program and Debug 下的 GenerateBitstream 生成FPGA的bit 文件。
到此生成完bit 文件,硬件环境生成完毕。
首先在Vivado 下 File->Export->ExportHardware… 勾选Include bitstream
File->LaunchSDK,采用默认值。
在SDK下,FileàNewàApplication Project,如下图,输入工程名Hello_World_Zynq 后Next,选择Hello World后,Finish。
工程生成完毕,打开helloworld.c增加部分测试代码。
print("Hello World Zynq7030\n\r");
double A = 12.222;
double B = 13.358;
double C = 0.0;
C= A*B;
xil_printf("sizeof char = %d\n\r",sizeof(char));
xil_printf("sizeof short = %d\n\r",sizeof(short));
xil_printf("sizeof int = %d\n\r",sizeof(int));
xil_printf("sizeof float = %d\n\r",sizeof(float));
xil_printf("sizeof double = %d\n\r",sizeof(double));
xil_printf("sizeof long = %d\n\r",sizeof(long));
xil_printf("sizeof long long = %d\n\r",sizeof(longlong));
xil_printf("sizeof long double = %d\n\r",sizeof(longdouble));
printf("C = %f\n",C);
代码说明:BSP默认支持三种打印,Xilinx自带的print & xil_printf,和C标准库函数printf。
前两个区别为一个只支持打印字符串,另一个支持打印参数(除浮点数)。
后两个区别为printf 支持浮点数打印。(占用资源较多)
总结:普通打印使用print,带非浮点的参数打印用xil_printf,带浮点数打印用printf。
如果频繁使用printf会使生成elf文件大小成倍增加。
编译右键工程 Build Project 生成elf文件,Run à Debug Configuration à双击最后一个System Debug ,配置如下图。
Application 子选项配置如下图,勾选Stop at program entry, and Stop at main。
点击右下角Debug 进入Debug 模式。F5单步运行,F8全速运行。程序在串口输出结果如下图。
1 《ug585-Zynq-7000-TRM.pdf》
2 《ug888-vivado-design-flows-overview-tutorial.pdf》
3 《ug898-vivado-embedded-design.pdf》
4 《ug939-vivado-designing-with-ip-tutorial.pdf》
5 《ug940-vivado-tutorial-embedded-design.pdf》
6 《ug995-vivado-ip-subsystems-tutorial.pdf》
7 《ug1119-vivado-creating-packaging-ip-tutorial.pdf》
8 《ug1145-sdk-system-performance.pdf》
9 《ug1165-zynq-embedded-design-tutorial.pdf》
10《http://www.xilinx.com/support/answers/58942.html》