Zynq 入门一点通(图片略,有疑问留言~)

嵌入式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


 

一Vivado 安装

安装选项如图,建议安装到C盘以加快开发速度。我选择版本是Vivado 2016.2(比ISE更适合嵌入式开发,且ISE已停止更新),建议采用一致版本。软件安装包,硬件参考工程和软件参考工程均在交接资料里。

如图只选择ZYNQ 和SDK (节约C硬盘空间),如需其他芯片支持,可自定义选择。


 

二Vivado 工程创建

1 .Create Project

         双击Vivado2016.2 快捷方式进入Vivado 。

Quick Start à Create New Project à Next à Prj_Name: NavZynq7030Demo,目录默认 à Next à选择芯片xc7z030ffg676-2à Next à Finish 。

如下图所示。

2.Create Block Design

创建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.如下图。

3 IP Configuration & HDL File Create

3.1 ZYNQ配置

双击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 的框图如下。

3.2 GPIO 0 &GPIO 1配置

如下图GPIO0 &GPIO1配置

GPIO0 配置为13bit 其中 10bit SPI 片选,和3Bit LED,Pin对应关系见Pin_Map.txt;

GPIO1 配置为 8bit  用于产生中断,进行中断嵌套验证。 

3.3 CONCAT配置

双击IP concat 按照下图进行配置以满足Zynq IRQ 的输入需求。(参考官方论坛)

3.4 AXI_BRAM_Controller配置

同理,双击进入配置,只留下一个PORTA参考下图。

3.5最终模块图

BRAM 模块不需要配置,最终框图如下。

3.6 模块互连

第一步:单击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)所以可以忽略这个警告。

4 Synthesis

综合生成网表如下图,点击最左侧的SynthesisàRun Synthesis,等待几分钟。

综合完成点击 OpenSynthesized Design 点击I/O Planning,给GPIO0进行管脚映射。按照Pin_Map.txt进行管脚映射。电压改为LVCOMS18。Ctrl+S保存如下图。

其中前10个pin 用于片选SPIDevice,后三个为PL 侧LED。

5 Implementation

点击Run Implementation 进行布局布线,会提示Synthesisout of date 点击yes 即可,会重新综合,这次比较快。等待布局布线完成后点击上边的Reload。

6 Create Bitstream

点击 Program and Debug 下的 GenerateBitstream 生成FPGA的bit 文件。

到此生成完bit 文件,硬件环境生成完毕。


 

三SDK验证BSP

首先在Vivado 下 File->Export->ExportHardware… 勾选Include bitstream

File->LaunchSDK,采用默认值。

1 Hello World Project Test

         在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

发布了21 篇原创文章 · 获赞 3 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/fafactx/article/details/52931752