赞
踩
ZYNQ 工程开发流程
(1). 在 Vivado 上新建工程,增加一个嵌入式的源文件。
(2). 在 Vivado 里添加和配置 PS 和 PL 部分基本的外设,或需要添加自定义的外设。
(3). 在 Vivado 里生成顶层 HDL 文件,并添加约束文件。再编译生成比特流文件 system.bit。
(4). 导出到 SDK 软件开发环境,在 SDK 环境里可以编写一些调试软件验证硬件和软件,结合比特流文件单独调试 ZYNQ 系统。
(5). 在 SDK 里生成 FSBL 文件。
(6). 在 VMware 虚拟机里生成 u-boot.elfbootloader 镜像。
(7). 在 SDK 里通过 FSBL 文件, 比特流文件 system.bit 和 U-boot.elf 文件生成一个 boot.bin 文件。
(8). 在 VMware 里生成 Ubuntu 的内核镜像文件 Zimage 和 Ubuntu 的文件系统 ramdisk。另外还需要要对 FPGA 自定义的 IP 编写驱动。
(9). 把 boot.bin,zimage 和 ramdisk 三个文件放入到 SD 卡的 FAT 分区中,启动开发板电源,Ubuntu 操作系统会从 SD 卡里启动。
创建 Vivado 工程
Quick Start - Create New Project - RTL Project -- 选择 ZYNQ 型号 XC7Z020CLG400-2
创建 PL 代码
Alt+A / Add Sources -- 编写 PL 层代码
添加 PL 管脚约束 .xdc
Open Elaborated Design - Windows - I/O Ports -- 自动生成 .xdc
PS 部分的管脚无需约束,PL 部分的 GPIO 管脚需要添加约束
添加时序约束
Run Synthesis - Cancel - Constrains Wizard -- sys_clk=50MHz -- .xdc 文件内点击 Reload
生成 BIT 文件
RunSynthesis -- 编译并生成网表文件
RunImplementation -- 来开始布局布线
Generate Bitstream - Open Hardware Manager
下载调试(无 PS 代码情形)
Open Hardware Manager - Auto Connect - 右键 Program Device 进行下载
添加第三方 IP 核
IP Catalog - 右键 Add Repository 或点工具栏加号 - 添加某 IP 核
常用时钟 IP 核
Clocking Wizard - clk_in1=50MHz
clk_out1=74.25MHz (1280*720@60分辨率视频的像素时钟)
clk_out2=371.25MHz (编码器串行化,为像素时钟的五倍)
ZYNQ IP 核
Create Block Design - Add IP - ZYNQ7 Processing System
PS-PL Configuration - M AXI GP0 interface (用来扩展 PL 端的 AXI 接口外设)
Peripheral I/O Pins - Bank0 3V3 、 Bank1 1V8 、 使能 UART1 MIO48/49
Clock Configuration - Input Frequency=33.333MHz
DDR Configuration - MT41J256M16 RE-125 32Bit
注:Page Navigator 界面下有 8 个子项,分别为 Zynq Block Design,PS-PL Configuration,Peripheral I/O Pins,MIO Configration,Clock Configuration,DDR Configuration,SMC Timing Calculation,Interrupts
这些页面选项是针对 ZYNQ 的不同硬件模块的配置,其中:
PS_PL Configuration 页面提供了 PS 到 PL 的相关接口配置信息以及 PS 部分一些配置信息;
Peripheral I/O Pins 页面主要是对一些通用外设接口的配置;
MIO Configruation 页面主要是对 MIO 以及 EMIO 的分配控制;
Clock Configruation 页面主要是对 PS 端时钟资源的配置和管理;
DDR Configration 页面主要是对 DDR 控制器一些参数的配置;
Interrupts 页面主要是对中断进行配置管理。
使用 PL 外设时,需勾选 PS_PL Configuration 页面中的 FCLK_RESET0_N 和 MAXIGP0_interface 选项
Clock Configuration 页面中,输入时钟是 33.33333Mhz,这个时钟跟我们开发板上的 PS 的系统时钟是一样的。[注:PS 的输入频率范围限制在 30~60MHz 之间,通常都会选择 33.33MHz ,便于产生内部所需的时钟频率。] 另外设定 CPU 的工作时钟是 666.666666Mhz,DDR 的工作时钟是 533.333333Mhz
使用 PL 部分外设,所以可以在 Clock Configuration 页面把 PL 的 FCLK_CLK0 前面的选项去掉,不产生 FCLK_CLK0
Run Block Automation -- 配置 ZYNQ,这里主要是是否勾选 Cross Trigger In 和 Cross Trigger Out (即是否添加 Cross-Trigger 功能)
添加 AXI GPIO IP 核
Add IP - AXI GPIO - 双击 -> 进入并配置
Run Connection Automation -- 进行一部分配置,自动完成绝大部分线路连接,有时需要自己先行连接一部分线路
Address Editor tab -- 此界面显示的是 IP 的内存映射(地址、大小等),可以对其修改
Regenerate Layout button -- 修改后,重新生成块设计的最佳布局
Debug 功能
如要使用 Debug 功能,直接选择要测试的所有线路,右键 Debug 即可,该线路即出现 Debug 图标
Run Connection Automation -- 自动生成 Debug 功能所需模块,即 hw_ila_1
Regenerate Layout - Validate Design -- 检查是否有逻辑错误
生成 HDL 文件
Run Connection Automation -- 完成 IP 核间的连线工作
Run Block Automation -- 自动完成端口导出工作 - Optimize Routing -- 优化布局
Generate Output Products - Global --Generate -- 这将为块设计生成 HDL 源文件和相关端口的约束文件。也可以点左侧的 Generate Block Design
在底部的 Design Runs 可以查看 Vivado 生成的各实例化块
Create HDL Wrapper -- 创建一个顶级 HDL 文件,该文件实例化块设计
生成 BIT 文件
RunSynthesis -- 编译并生成网表文件
RunImplementation -- 来开始布局布线
Generate Bitstream - Open Hardware Manager -- 生成 .bit 文件
ProjectSummary 页面的 Table 来查看板子上实际资源的使用情况
导出到 SDK
File - Export - Export Hardware -- 如有 PL 端应选此处的 Include bitstream,生成 Hardware 信息,此时会生成 SDK 目录
File - Launch SDK
注: 切记每次修改设计后,每次 Launch SDK 前要重新执行 Export Hardware [当然也得重新走 Run Block Automation 和 Create HDL Wrapper 的步骤]
SDK 操作
design_1_wrapper_hw_platform_0 -- 导入 SDK 所生成的硬件包,其中的 system.hdf 列举了 Vivado 硬件设计的信息,可以在软件开发中使用,也可以看到 PS 端外设的寄存器列表
New - Application Project (Alt+Shift+N) - 这里记为 prj - 选择 OS Platform 为 standalone,在 Target Hardware 部分根据自己情况选择 Hardware Platform,第一次打开 SDK 时,为 design_1_wrapper_hw_platfprm_0,之后打开 SDK 时,依次生成新的硬件包。Processor 一般选 ps_cortexa9_0 即可 - Next - 选择模板 - Finish - 生成 prj 项目和对应 prj_bsp 支持包
prj 项目是将下载到板子上的工程,另外 src 文件夹的 lscript.ld 文件中定义了可用 memory 空间、栈空间大小,可根据需要修改
prj_bsp 支持包中有很多有用的信息 - BSP Documentation -- PS 外设的 API 说明
prj_bsp 支持包 - system.mss -- 列举了支持的外设,有些外设提供了一些说明,即上一行提到的 BSP Documentation。有些 PS 外设还提供了例程,这是用来了解学习这些外设的第一手资料。关于程序中用到的 API 函数的使用和说明, 这里不再详细说明,不清楚的用户可以点击 system.mss,并点击 Documentation 来查看
ps7_cortexa9_0 文件夹下的 include 文件夹包含了生成此应用时所选的 Processor 附带的定义宏和函数等的文件,如 xparameters.h 是 ZYNQ 系统的硬件的宏定义文件,xgpiops.h 中定义了 GPIO 控制的各种宏定义和函数声明。libsrc 文件夹中包含外设函数的定义和使用说明,如 xgpiops.c
SDK 下载调试
PuTTY - Serial / COM5 / 115200
prj 项目 - 右键 Run As - Launch on Hardware(sysntemDebugger) - Run Configuration - 一般需要勾选 Reset entire system / Program FPGA
Xilinx - Program FPGA - Program
Debug As - Debug Configurations - 右键 Xilinx C/C++ application (System Debugger) - New
这里注意,选定 Enable Cross triggering,并点击 Enable Cross triggering 的 Broswer 按钮 - Generate - 进行配置的选定
选定 OK - Cross Trigger Breakpoints dialog box - Generate - 进行配置的选定 - OK - OK
配置完成后点击 Debug,弹出 Confirm Perspective Switch 窗口 - Yes
选定 SDK Terminal ,点击 "加号" 按钮,进行与板子的连接
使用 Vivado 逻辑分析器 (Debug 功能)
Open Hardware Manager - Open target - Open New Target
若想使用 Debug 功能,即选择 hw_ila_1 后,点击 Run Trigger Immediate
FSBL:
fsbl_debug.h 第62行添加下行宏定义
#define FSBL_DEBUG_INFO /* 添加调试宏定义 FSBL_DEBUG_INFO,可以在启动输出 FSBL 的一些状态信息,有利于调试,但是会导致启动时间变长 */
右键 FSBL 工程,Creat Boot Image
Output:
..\prj\prj.sdk\fsbl\bootimage\fsbl.bif
..\prj\prj.sdk\fsbl\bootimage\BOOT.bin
Partitions:
..\prj\prj.sdk\fsbl\Debug\fsbl.elf
..\prj\prj.sdk\prj\Debug\prj.elf
..\prj\prj.sdk\design_1_wrapper_hw_platform_0\design_1_wrapper.bit
烧写 QSPI
Xilinx - Program Flash
Hardware Platform选择后,Image File选择上面生成的BOOT.bin,FSBL File选择Alinx提供的zynq_fsbl_flash.elf
注意:烧写时开发板应为JTAG模式
烧写 QSPI 对应 bat 文件
- set XIL_CSE_ZYNQ_DISPLAY_UBOOT_MESSAGES=1 %这里设置显示烧写过程中的uboot打印信息%
- call C:\Xilinx\SDK\2017.4\bin\program_flash -f BOOT.bin -fsbl zynq_fsbl_flash.elf -offset 0 -flash_type qspi_single -blank_check -verify
- ::这里C:\Xilinx\SDK\2017.4\bin\program_flash为我们工具路径,按照安装路径适当修改,-f 为要烧写的文件,-fsbl 为要烧写使用的 fsbl 文件(芯驿电子特定文件),-blank_check -verify 为校验选项。
- pause
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。