这篇文章记录ZYNQ7020的PS端的基本开发流程,关于PL端的开发流程,参考之前文章,这里放个超链接。
学员笔记连载 | Day5 Xilinx ZYNQ7000系列 PS、PL、PS-PL基本开发流程之PL端篇
本篇文章,以配置一个PS端的UART外设,并打印一句话《hello ZYNQ7020,Author:liushuhe 2020.11.26》来演示
ZYNQ7020的基本开发流程,本篇文章需要一点点的C语言知识,不会也不影响实验的,跟着步骤做就行了。
一、任务分工
ZYNQ 芯片分为 PL 和 PS, PS 端的 IO 分配相对是固定的,不能任意分配,虽然 PS 端的 ARM 是硬核,但是在 ZYNQ 当中也要将 ARM 硬核添加到工程当中才能使用,FPGA 工程师负责把 Vivado 工程搭建好,提供好硬件给软件开发人员,软件开发人员便能在这个基础上开发应用程序 ,软件开发人员,不用关心FPGA的部分。
二、FPGA工程师搭建硬件平台
我们这里演示搭建一个带UART和arm A9处理器的硬件平台
1.1、建立vivado工程
创建一个“ps_uart”的工程,具体过程,参考我文章开头超链接文章;
1.2、点击“Create Block Design”,创建一个 Block 设计,也就是图形化设计
1.3、“Design name”可以不修改,我改成ps_uart便于识别
1.4、点击“Add IP”快捷图标
1.5、搜索“zynq”,在搜索结果列表中双击“ZYNQ7 Processing System
1.6、双击 Block 图中的“processing_system7_0”(直接双击蓝色区域),配置相关参数
1.7、首先出现的界面是 ZYNQ 硬核的架构图,可以很清楚看到它的结构,可以参考 官方文档,在官网搜索ug585 即可
1.8、图中绿色部分是可配置模块,可以点击进入相应的编辑界面
1.9、也可以在左侧的窗口进入编辑 ,下面分别介绍左侧选项代表的功能;
2.0、Zynq 块设计参数配置,单击绿色块右下角,可以进行参数配置
2.1、PS-PL Configuration 配置界面,主要是进行 PS 与 PL 之间接口的配置,主要是AXI 接口,这些接口可以扩展 PL 端的 AXI 接口外设
核。
2.2、我们这篇文章是PS开发流程,关于PS-PL Configuration 配置在这里保持默认,在后面的实验中我再补充
2.3、外设配置,ZYNQ 的 PS 端外设很多是复用的 ,同一引脚可以配置为不同的功能
zynq内部只有2个串口,UART0、UART1、我们看UART0可以接在(10、11)/(14、15)/(18、19)/(22、23)/(26、27)
2.4、配置串口,我们的ps_uart需要一个串口来打印消息,查看ZYNQ7020开发板的原理图
从原理图看出,ZYNQ的PS端的串口,连接的是MIO12、MIO13端口,并且电源是3.3v
2.5、从I/O分配看,MIO12、MIO13是串口1,在MIO12、MIO13引脚对应串口上单击,会看见该模块变为绿色,即代表分配成功
关于BANK0、BANK1的电压,由于创龙没有给核心板的原理图,但是给了一个WORD的描述文档,大家也要熟悉这个方式
国内很多厂家都是这样,属于技术保密
按照上述表格分配UART1电压和引脚
2.6、配置 QSPI, QSPI 可以作为 ZYNQ 的启动存储设备, ZYNQ 可以通过读取 QSPI 中存储的启动文件加载 ARM 和 FPGA
从核心板word表格和创龙给的例程,得知我们选择 Quad SPI Flash 为 Single SS 4bit IO
2.7、配置以太网,在 PS 端设计有以太网接口
1、根据原理图选择 Ethernet 0 到 MIO16-MIO27
电压是1.8v
2、配置PHY 寄存器配置接口,选择 MDIO 并配置到 MIO52-MIO53
2.8、配置 USB0 到 MIO28-MIO39
2.9、ZYNQ还可以SD卡启动
查看底板原理图,选择 SD 0,配置到 MIO40-MIO45,选择Card Detection MIO0,用于检测 SD 卡的插入。
1、配置SD0
2、选择Card Detection MIO0,用于检测 SD 卡的插入
3.0、控制剩余未分配的 MIO,用作 GPIO ,打开GPIO MIO, PS 便可以配置
1、双击GPIO MIO当出现打钩的提示时,软件会自动把我们未使用到的IO分配为GPIO
2、到这里引脚分配全部完成,如果以后做实验需要配置其他外设,可以参考这个文章,作相应的修改即可
3.1、MIO 配置
修改 Enet0 的电平标准为 HSTL 1.8V, Speed 为 fast,这些参数非常重要,如果不修改,网络可能不通。其他部分保持默认。
3.2、时钟配置
在“Clock Configuration”选项卡中我们可以配置 PS 时钟输入时钟频率,这里默认是 33.333333,和板子上一致,不用修改,
CPU 频率改为 767Mhz,同时 PS 还可以给 PL 端提供 4 路时钟,频率可以配置,这里不需要,所以保持默认即可。
还有 PS 端外设的时钟等也可以进行配置,这里保持默认。
3.3、DDR3 配置
在“DDR Configuration”选项卡中可以配置 PS 端 ddr 的参数
根据创龙的例程,内存芯片我们选择《MT41K256M16 RE-125》,Effective DRAM Bus Width 选择《32bit》
其他部分保持默认,点击 OK
3.4、到这里ZYNQ核的配置完成,我们配置参数及导出硬件信息
1、点击“Run Block Automation”, vivado 软件会自动完成一些导出端口的工作
2、按照默认点击“OK”
3、连接 FCLK_CLK0 到 M_AXI_GP0_ACLK,按 Ctrl+S 保存设计
4、选择 Block 设计,右键“Create HDL Wrapper...”,创建一个 Verilog 或 VHDL 文件,为ps_uart生成 HDL 顶层文件
5、在弹出对话框,选择让vivado软件自动更新 顶层文件
6、展开设计可以看到 PS 被当成一个普通 IP 来使用 ,之前生成那个顶层文件,其实就是为了把我们的硬件配置
生成一个IP核,供我们调用
7、选择 block 设计,右键“Generate Output Products”,此步骤会生成 block 的输出文件,包括IP,例化模板, RTL 源文件, XDC 约束,第三方综合源文件等等。供后续操作使用。
8、点击“Generate”
9、PS 端的引脚不需要绑定 ,因为在生成的IP文件包含了 PS 端引脚分配的 XDC 文件
在 IP Sources, Block Designs->ps_uart->Synthesis 中,可以看到处理器的 XDC 文件,绑定了 PS 端的 IO,因此不需要再新建 XDC 绑定这些引脚
10、在菜单栏“File -> Export -> Export Hardware...”导出硬件信息,这里就包含了 PS 端的配置信息。
11、在弹出的对话框中点击“OK”
12、因为我们这个实验仅仅是使用了 PS 的串口,不需要 PL 参与,这里就没有使能“Include bitstream” ,关于PS-PL的联合实验,我会另写一篇
13、此时会多出 xx.sdk 文件夹,并且有个 hdf 文件,这个文件就是这个文件就包含了 Vivado 硬件设计的信息,供软件开发人员使用。
14、到此为止, FPGA 工程师工作告一段落,剩下的工作交给ARM软件开发人员。
二、ARM软件编写C语言程序,在串口打印一句话《hello ZYNQ7020,Author:liushuhe 2020.11.26》
1、点击 Vivado 菜单“File -> Launch SDK”,启动 SDK
2、在弹出的对话框选择OK
3、启动 SDK 后我们会看到一个文件夹,有一个名为"system.hdf”文件,这个文件就包含了
Vivado硬件设计的信息,可以给软件开发使用,也可以看到 PS 端外设的寄存器列表。
4、在 SDK 的菜单“New -> Application Project”,建立一个 APP 工程
4、在弹出的对话框中,“Project name”填写“ps_uart_hello”,硬件平台选择我们自己定义的ps_uart_wrapper_hw_platform
语言C、其他默认,点击“Next”
5、模板选择《hello world》,点击Finish
6、可以看到 SDK 创建了一个“ps_uart_hello”目录,还有一个“ps_usrt_hello_bsp”的目录,在“ps_usrt_hello_bsp”目录中可以找到很多有用的信息,软件开发人员比较清楚,BSP也就是 Board Support Package板级支持包的意思,里面包含了开发所需要的驱动文件,用于应用程序开发。
7、双击“system.mss”,还可以看到有些 PS 外设还提供了例程,这是用来了解学习这些外设的第一手资料。驱动文档说明可以在 Documentation 中找到。通过 Import Examples 引入官方例子,加快学习。
8、连接 JTAG 线到开发板、 UART 的 USB 线到 PC
9、打开串口终端调试工具, 串口根据电脑的COM口设置,波特率设置为115200
10、将开发板的启动模式设置到 JTAG 模式
开发板设置拨码为【 010101(1~6 JTAG 模式)】、【 100101(1~6 QSPI 模式)】、【101001(1~6 SD卡模式】
11、给开发板上电,准备运行程序
1、修改helloword.c,将printf打印修改为printf("hello ZYNQ7020,Author:liushuhe 2020.11.26 ");
2、编译代码,右键单击ps_uart_hello,在弹出的列表选择Build Project,编译完成可以看看没有报错
12、选择“ps_uart_hello”,右键“Run as”,选择第一个“Launch on Hardware(SystemDebuger)”,使用系统调试,直接运行程序。
13、可以看到串口没有任何输出
14、为了保证系统的可靠调试,需要添加一个配置,右键“Run As -> Run Configuration...”
15、选择“Reset entire system”复位整个系统,如果系统中还有 PL 设计,还必须选择“Program FPGA”,再次点击“Run”
16、点击“OK”,确认重新运行
17、这次就可以看到熟悉《hello ZYNQ7020,Author:liushuhe 2020.11.26》显示出来了
三、Debug调试
1、除了“Run As”,还可以“Debug As”,这样可以设置断点,单步运行
2、进入 Debug 模式 ,程序会自动运行到main函数处
3、和其他开发工具一样,我们也可以逐步运行、设置断点
4、窗口右上角,有2个按钮可以方便我们在debug和编辑模式之间进行切换
四、到此,关于ZYNQ7020 的PS端基本开发流程,全部跑通,关于PS-PL的联合实验,待我另写一篇。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !