ZYNQ SDK开发(一 FPGA工程师导出PS platform)

注:

从Vivado 2019.2开始,对应的软件开发环境从SDK变成了Vitis.

2019.1及之前版本,SDK是Vivado的一个附属组件,可以从Vivado启动SDK。

从2019.2开始,vitis不能从vivado启动,必须单独启动。地位和vivado齐平了,不在是一个附件。

vitis和SDK概念的对应关系如下:

​ vitis[sdk]:xsa-[bit+hdf],domain-[bsp],platform-[platform],platform.spr[system.mss].

vitis可以自动生成fsbl工程。

​ hdf: Hardware Description File,Vivado 2019.1及更早版本导出的硬件描述文件,给xilinx sdk使用。

​ xsa: Xilinx Shell Archive,Vivado 2019.2及后续版本导出的硬件文件,.xsa=.bit+hdf.

链接:https://www.jianshu.com/p/13bb07f777ee

本项目中按照黑金官方教程,使用的是Vivado 2017.4。

VivadoQuartus类似在RTL级的开发,有Verilog/VHDL硬件描述语言开发的代码形式的工程,和使用Moudle模块图形化设计开发两种。

​ 如果只是在PL 端进行开发,可以看到和普通 FPGA 开发流程没有任何区别, ZYNQ 的主要优势就是 FPGA 和 ARM 的合理结合,这对开发人员提出了更高的要求。从本章开始,我们开始使用 ARM ,也就是我们说的 PS ,本章我们使用一个简单的串口打印来体验一下 Vivado SDK 和PS 端的特性。
​ 前面的实验都是FPGA 工程师应该做的事情,从本章节开始就有了分工, FPGA 工程师负责把 V ivado 工程搭建好,提供好硬件给 软件开发人员,软件开发人员便能在这个基础上开发应用程序。做好分工,也有利于项目的推进。如果是软件开发人员想把所有的事情都做了,可能需要花费很多时间和精力去学习 FPGA 的知识,由软件思维转成硬件思维是个比较痛苦的过程,如果纯粹的学习,又有时间,就另当别论了。专业的人做专业的事,是个很好的选择。

一、ZYNQ 的图形化方式建立工程

PS开发简介

​ 我们从原理图中可以看到ZYNQ 芯片分为 PL 和 PS, PS 端的 IO 分配相对是固定的,不能任意分配,而且不需要在 Vivado 软件里分配管脚,虽然本实验仅仅使用了 PS ,但是还要建立一个Vivado 工程,用来配置 PS 管脚。

其实并不是说 PS 端的引脚不需要绑定,而是在 IP 生成的输出文件里已经包含了 PS 端引脚分配的 XDC 文件,在 IP Sources ,Block Designs -> design_1 ->Synthesis 中,可以看到处理器的 XDC 文件,绑定了 PS 端的 IO ,因此不需要再新建 XDC 绑定这些引脚。

Programmable Logic (PL) :代表FPGA部分。

Processing System (PS):代表ARM部分。

  1. 点击“Create Block Design ”,创建一个 Block 设计(一般名称保持默认,也可修改为较为简短的名称),也就是图形化设计;
  2. 点击“ADD IP”,搜索zynq,选择ZYNQ7 Processing System;

​ 虽然 PS 端的 ARM 是硬核,但是在 ZYNQ 当中也要将 ARM 硬核添加到工程当中才能使用。前面章节介绍的是代码形式的工程,本章开始介绍 ZYNQ 的图形化方式建立工程。

​ “ZYNQ7 Processing System”是ZYNQ7处理系统IP,即PS端的IP核,代表ARM处理器。

image-20220510212718586

image-20220510212834371

  1. 双击ZYNQ Processing System Block图,出现的是ZYNQ ARM硬核的架构图。

image-20220510220656797

ZYNQ IP核的配置

  • PS-PL Configuration

    PS-PL Con figuration 界面,这个界面主要是进行 PS 与 PL 之间接口的配置,主要是AXI 接口,这些接口可以扩展 PL 端的 AXI 接口外设,所以 PL 如果要和 PS 进行数据交互,都要按照 AXI 总线协议进行, xilinx 为我们提供了大量的 AXI 接口的 IP 核。在这里保持默认,在后面的章节中会对其配置,本章节不与 PL 端进行交互,保持默认。

  • Peripheral I/O Pins

    这个部分用于PS 端外设的配置,ZYNQ 的 PS 端外设很多是复用的,相同的引脚标号可以配置成不一样的功能,比如下图中的 (16 -27) 可以配置成 Enet 0 ,也可以配置成 SD0 、 SD1 ,但只能配置成一种外设,比如如果配置 Enet 0 ,也就不能再选择 SD0 、 SD1 了。至于该怎么去选择,是由原理图和 PCB 决定的,可以通过查看原理图或用户手册选择

    image-20220510221250918

Zynq7020/7010 PS端外设原理图

image-20220510221606725

image-20220510221655199

PS端外设配置

PS端所有的外设配置,都需要按照上述的原理图来进行,如下。

修改Bank电平

​ 从上述原理图中可以找到串口连接在PS端的MIO48-MIO49端口上,因此在上,所以在“ Periph eral I/O Pins选项中使能 UART1 (MIO48 MIO49) ,**PS MIO 分为两个 BankBank 0** ,也就是原理图中的 BANK500 ,电压选择 LVCMOS 3.3VBank 1 ,也就是原理图中的 BANK501 ,电压选择LVCOMS 1.8 V ”。 Bank对应电压需要按照原理图中进行配置,如如果不配置 Bank1 电平标准,可能导致串口无法接收 。

配置QSPI

​ **QSPI 可以作为ZYNQ的启动存储设备, ZYNQ 可以通过读取 QSPI 中存储的启动文件加载ARM 和 FPGA**,从原理图得知,我们选择 Quad SPI Flash Single SS 4bit IO

image-20220510223104725

配置以太网

​ 配置以太网,在 PS 端设计有以太网接口,根据原理图选择 Ethernet 0 到 MIO16-MIO27

image-20220510223302985

MDIO为以太网 PHY 寄存器配置接口,选择 MDIO 并配置到 MIO52 MIO53;

image-20220510223523465

配置USB

按照原理图,配置 USB0MIO28 MIO39

image-20220510223831518

配置SD卡

​ 除了 QSPI 启动 ZYNQ ,还有 SD 卡模式启动 ZYNQ ,选择 SD 0 ,配置到 MIO40-MIO45 ,选择Card Detection MIO47 ,用于检测 SD 卡的插入。

image-20220510224410870

PS配置剩余的未分配MIO作为GPIO

打开 GPIO MIO PS 便可以控制剩余未分配的 MIO ,用作 GPIO。在GPIO MIO 中选择 MIO46 作为 USB PHY 的复位.

image-20220510225000334

至此,PS端的外设配置结束。

  • MIO Configuration

    ​ 由于Enet0的电平标准为HSTL 1.8V,Speed为FAST,故还需要在MIO配置中,进行修改,这些参数非常重要,如果不修改,可能导致网络不通,其他部分默认。

    image-20220510225730143

配置PS时钟输入频率

  • Clock Configuration

    ​ 在“ Clock Configuration ”选项卡中我们可以配置 PS 时钟输入时钟频率,这里默认是 33.333333MHZ和板子上一致,不用修改, CPU 频率默认 666.666666Mhz ,这里也不修改。同时 PS 还可以给 PL 端提供 4 路时钟,频率可以配置,这里 不需要,所以保持默认即可。还有 PS 端外设的时钟等也可以进行配置,这里保持默认。

image-20220510230059772

DDR3 SDRAM配置

  • DDR Configuration

    ​ 在“ DDR Configuration ”选项卡中可以配置PSddr的参数,AX7010配置 DDR3 型号为MT41J128M16 HA-125 AX7020 配置 DDR3 型号为MT41J256M16 RE-125 这里 ddr3型号并不是板子上的 ddr3 型号,而是参数最接近的型号 。 Effective DRAM Bus Width ”,选择32 Bit.

image-20220510230811119

至此 ZYNQ 核的配置结束

  • 点击“ Run Block Automation vivado “软件会自动完成一些导出端口的工作

image-20220510231130975

​ 点击“ OK ”以后我们可以看到 PS 端导出一些管脚,包括 DDR 还有 FIXED_IO DDR DDR3的接口信号,FIXED_IO为 PS 端固定的一些接口,比如输入时钟, PS 端复位信号, MIO 等。

image-20220510231531635

  • 连接 FCLK_CLK0 M_AXI_GP0_ACLK ,按 Ctrl+S 保存设计

知识点:DDR 和 FIXED_IO 是 PS 端引脚, PS_PORB 为 PS 端 上电 复位信号,不能用于 PL 端复位,不要将 PL 端的复位绑定到这个引脚号上,切记!!!

将Block Design生成HDL顶层文件

选择 Block 设计,右键“ Create HDL Wrapper… ”创建一个 Verilog 或 VHDL 文件,为 block design 生成 HDL 顶层文件。

image-20220510233302426

此时展开设计和.v文件可以看到PS被当成一个普通IP来使用,在顶层文件.v中,设计模块design_1作为module被使用。

image-20220510233714926

  • 选择 block 设计,右键“ Generate Output Products ”,此步骤会生成 block 的输出文件, 包括IP ,例化模板 RTL 源文件, XDC 约束,第三方综合源文件等等。供后续操作使用。

    image-20220510233927251

  • 其实并不是说 PS 端的引脚不需要绑定,而是在 IP 生成的输出文件里已经包含了 PS 端引脚分配的 XDC 文件,在 IP Sources, Block Designs ->design_1 -> Synthesis 中,可以看到处理器的 XDC 文件,绑定了 PS 端的 IO ,因此不需要再新建 XDC 绑定这些引脚。

image-20220510234815205

导出硬件信息(供软件开发用)

  • 在菜单栏“ File –> Export –> Export Hardware…”导出硬件信息,这里就包含了 PS 端的配置信息。

在弹出的对话框中点击“ OK ”,因为实验仅仅是使用了 PS 的串口,不需要 PL 参与,这里就没有使能“ Include bitstream”。

image-20220510235630462

此时会多出xx.sdk 文件夹,并且有个 hdf 文件,这个文件就是这个文件就包含了 Vivado 硬件设计的信息,供软件开发人员使用。

在Vivado 2019以后的版本中,导出生成的是xsa文件: Xilinx Shell Archive,Vivado 2019.2及后续版本导出的硬件文件,.xsa=.bit+hdf. 且叫做platform,需要在Vitis中新建platform project导入这个xsa文件,新建platform,然后才进行下一步的软件开发。

在2019以前的Vivado版本中,可在file-》Launch SDK中,启动SDK。这里的SDK就是之后版本中的Vitis。

到此为止
FPGA 工程师工作告一段落。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信