使用Xilinx Vivado 创建自己板卡文件-以 EBAZ4205(旷板ZYNQ7010) 为例

我们在使用Vivado创建工程时,每次都需要选择相关的板卡器件,比较麻烦,这篇文章就教你怎么创建属于自己的板卡文件,在创建工程时就可以像官方板卡一样在板卡列表里选择。

板子

这次的板卡很多人应该不陌生,EBAZ4205-传说中的旷板,之前20元就能买到,使用非常广泛。

参考

UG895 文档描述了电路板文件的结构和内容。

板文件的结构

Xilinx Vivado 板文件存放在 Vivado 安装目录中:

/<version>/data/boards/board_files/

在这个目录中,我们可以创建新文件夹并以我们的板子命名(例如 ebaz4205)。在这个目录中,我们将创建另一个以板版本命名的文件夹(例如 1.0)。

该文件夹将包含我们的电路板图片和三个重要的 XML 文件:

  • board.xml - 定义关于板的所有信息。它包括基本信息(例如电路板名称、描述、供应商)、有关板上组件的信息(例如 FPGA 部件、LED、按钮)、有关板上组件所需接口的信息以及实现这些接口的首选 IP 内核。

  • preset.xml - 预设 board.xml 文件中指定的 IP 内核定义。

  • part0_pins.xml - 为board.xml 文件中指定的物理引脚接口定义和 I/O 标准。

创建所有必需的文件夹和文件后,我们的板文件文件夹结构应如下所示:

ebaz4205/
└── 1.0├── board.xml├── ebaz4205.jpg├── part0_pins.xml└── preset.xml

下面针对每个文件简单介绍一下内容。

board.xml

该文件以名为的 XML 标记开头,我们将在其中提供有关该板的基本信息:

<board schema_version="2.1" vendor="miner.ebang.com.cn" name="ebaz4205" display_name="EBAZ4205 Development Board" url="http://miner.ebang.com.cn" preset_file="preset.xml">

首先,我们定义板文件架构版本 - 告诉 Vivado 软件如何解释文件中提供的数据的属性(在 Vivado 2020.1 中,我目前使用的架构的最新版本是 2.1)。接下来,我们为电路板供应商定义供应商名称、电路板名称和网页。在标签中,我们还指定了稍后将使用的预设文件的名称。在此之后,我们必须通过在新行中写入来关闭标记。所有其他板信息必须在这两个标签之间定义。

为了确保板文件的正常工作,我们必须添加 <file_version> 和 <compatible_board_revisions> 标签:

<!-- Board file revision -->
<file_version>1.0</file_version><!-- Board PCB revision -->
<compatible_board_revisions><revision id="1">1.0</revision>
</compatible_board_revisions>

<file_version> 标签用于跟踪电路板文件的版本,而 <compatible_board_revisions> 标签用于指定这些文件可以与哪些电路板 PCB 修订版一起使用。

我们可以通过在  中指定图像和在标签中指定描述来添加板的图片和描述:

<!-- Image of the board -->
<images><image name="ebaz4205.jpg" display_name="EBAZ4205 Development Board" sub_type="board"><description>EBAZ4205 Development Board</description></image>
</images><!-- Board description -->
<description>EBAZ4205 is mining board used in Ebang Ebit E9+ bitcoin miner machine. This board features 256MB DDR3 memory, 128MB NAND Flash memory, 10/100MBit Ethernet and speed grade -1 Zynq 7010.</description>

创建新项目时,大部分信息将显示在板选择窗口中:

或在 Vivado 项目摘要窗口中:

提供基本信息后,现在我们可以通过在标签之间添加信息来指定板上的组件:

<!-- Information about board components: fpga part, interfaces, etc. -->
<components><!-- FPGA part --><component name="part0" display_name="EBAZ4205" type="fpga" part_name="xc7z010clg400-1" pin_map_file="part0_pins.xml" vendor="xilinx" spec_url="www.xilinx.com"><description>FPGA part on the board</description><!-- Associated FPGA interfaces and IP cores --><interfaces><!-- Zynq 7000 processing system --><interface mode="master" name="ps7_fixedio" type="xilinx.com:display_processing_system7:fixedio_rtl:1.0" of_component="ps7_fixedio" preset_proc="ps7_preset"> <preferred_ips><preferred_ip vendor="xilinx.com" library="ip" name="processing_system7" order="0"/></preferred_ips></interface><!-- User LEDs: Red and Green (LED6) --><interface mode="master" name="leds_2bits" type="xilinx.com:interface:gpio_rtl:1.0" of_component="leds_2bits" preset_proc="leds_2bits_preset"><preferred_ips><preferred_ip vendor="xilinx.com" library="ip" name="axi_gpio" order="0"/></preferred_ips><port_maps><port_map logical_port="TRI_O" physical_port="leds_2bits_tri_o" dir="out" left="1" right="0"> <pin_maps><pin_map port_index="0" component_pin="leds_2bits_tri_o_0"/> <pin_map port_index="1" component_pin="leds_2bits_tri_o_1"/> </pin_maps></port_map></port_maps></interface></interfaces></component><!-- Zynq 7000 processing system --><component name="ps7_fixedio" display_name="PS7 fixed IO" type="chip" sub_type="fixed_io" major_group=""/> <!-- User LEDs: Red and Green (LED6) --><component name="leds_2bits" display_name="LEDs" type="chip" sub_type="led" major_group="General Purpose Input or Output"><description>LEDs, Active Low</description></component></components>首先我们必须定义板上使用的 FPGA 型号, EBAZ4205 的情况下它是 xc7z010clg400-1。我们还定义了这个组件的供应商和引脚映射文件。所有用于实现 FPGA 和电路板组件之间接口的 IP 内核都必须在 FPGA <component> 标签之间定义。第一个定义的接口将是 Zynq 处理系统的固定 I/O。我们必须指定接口模式、名称、首选 IP 核来实现此接口和预设名称 (preset_proc),它将 IP 核与 preset.xml 文件中的预定义配置进行链接:```

第二个定义的接口用于 LED。为了实现这个接口,我们将使用 AXI GPIO IP 内核。对于此接口,我们还必须定义端口引脚映射,因为 AXI GPIO IP 内核端口引脚必须连接到物理 FPGA 引脚:

<!-- User LEDs: Red and Green (LED6) -->
<interface mode="master" name="leds_2bits" type="xilinx.com:interface:gpio_rtl:1.0" of_component="leds_2bits" preset_proc="leds_2bits_preset"><preferred_ips><preferred_ip vendor="xilinx.com" library="ip" name="axi_gpio" order="0"/></preferred_ips><port_maps><port_map logical_port="TRI_O" physical_port="leds_2bits_tri_o" dir="out" left="1" right="0"> <pin_maps><pin_map port_index="0" component_pin="leds_2bits_tri_o_0"/> <pin_map port_index="1" component_pin="leds_2bits_tri_o_1"/> </pin_maps></port_map></port_maps>
</interface>

在定义 FPGA 部分及其接口之后,我们必须定义其他组件。默认情况下一个是 Zynq 7000 处理系统,另一个是 LED。之前创建的接口将通过称为组件名称的属性链接到这些组件:

<!-- Zynq 7000 processing system -->
<component name="ps7_fixedio" display_name="PS7 fixed IO" type="chip" sub_type="fixed_io" major_group=""/><!-- User LEDs: Red and Green (LED6) -->
<component name="leds_2bits" display_name="LEDs" type="chip" sub_type="led" major_group="General Purpose Input or Output"><description>LEDs, Active Low</description>
</component>

该声明还让我们可以在 Vivado 模块设计窗口的 Board 选项卡中找到我们的组件:

在 board.xml 文件中,如果方便,我们还必须为板上的所有组件定义 JTAG 链。在这种情况下,我们只有一个用于 FPGA 部分的 JTAG 链:

<!-- Board jtag chains for all fpga parts -->
<jtag_chains><!-- Board jtag chains for part0 --><jtag_chain name="chain1"><position name="0" component="part0"/></jtag_chain></jtag_chains>

当然,我们必须指定将我们的组件接口链接到在 part0_pins.xml 文件中声明的物理 FPGA 引脚的连接:

<!-- Connections between component interfaces and physical pins described in part0_pins.xml -->
<connections><!-- User LEDs: Red and Green (LED6) -->
<connection name="part0_leds_2bits" component1="part0" component2="leds_2bits"><connection_map name="part0_leds_2bits_1" c1_st_index="0" c1_end_index="1" c2_st_index="0" c2_end_index="1"/>
</connection></connections>

这里 c1_st_index 和 c1_end_index 对应 part0_pins.xml 文件中的 pin 索引,而 c2_st_index 和 c2_end_index 对应 IP 核端口 pin 索引。

preset.xml

preset.xml 文件以名为 <ip_presets> 的 XML 标记开头,我们必须在其中提供此文件架构版本。预设文件的当前架构版本是 1.0:

<ip_presets schema = "1.0">

我们必须通过在新行中写入 </ip_presets> 来关闭 <ip_presets> 标记。IP 核的预设将列在这两个标签之间。

首先我们为 Zynq 处理系统 IP 核添加配置。这些配置通过名为 preset_proc_name 的属性链接到 board.xml 文件:

<!-- Zynq 7000 processing system configuration -->
<ip_preset preset_proc_name="ps7_preset"><ip vendor="xilinx.com" library="ip" name="processing_system7" version="*"><user_parameters><user_parameter name="CONFIG.PCW_UART1_PERIPHERAL_ENABLE" value="1"/><user_parameter name="CONFIG.PCW_UART1_UART1_IO" value="MIO 24 .. 25"/><user_parameter name="CONFIG.PCW_SD0_PERIPHERAL_ENABLE" value="1"/><user_parameter name="CONFIG.PCW_SD0_SD0_IO" value="MIO 40 .. 45"/><user_parameter name="CONFIG.PCW_NAND_PERIPHERAL_ENABLE" value="1"/><user_parameter name="CONFIG.PCW_NAND_GRP_D8_ENABLE" value="0"/><user_parameter name="CONFIG.PCW_ENET0_PERIPHERAL_ENABLE" value="1"/><user_parameter name="CONFIG.PCW_ENET0_ENET0_IO" value="EMIO"/><user_parameter name="CONFIG.PCW_ENET0_GRP_MDIO_ENABLE" value="1"/><user_parameter name="CONFIG.PCW_ENET0_PERIPHERAL_FREQMHZ" value="100 Mbps"/><user_parameter name="CONFIG.PCW_GPIO_MIO_GPIO_ENABLE" value="1"/><user_parameter name="CONFIG.PCW_GPIO_MIO_GPIO_IO" value="MIO"/><user_parameter name="CONFIG.PCW_ENET_RESET_ENABLE" value="0"/><user_parameter name="CONFIG.PCW_USB_RESET_ENABLE" value="0"/><user_parameter name="CONFIG.PCW_I2C_RESET_ENABLE" value="0"/><user_parameter name="CONFIG.PCW_UIPARAM_DDR_BUS_WIDTH" value="16 Bit"/><user_parameter name="CONFIG.PCW_UIPARAM_DDR_PARTNO" value="MT41K128M16 JT-125"/></user_parameters></ip>
</ip_preset>

在 Zynq 7000 处理系统中,我们启用 UART1、SD0、NAND、ETHERNET0 和其他外设,为这些外设选择 MIO 引脚并配置 DDR 内存。

接下来,我们为 AXI GPIO IP 内核添加配置,该内核将用于在板上实现 FPGA 和用户 LED 之间的接口:

<!-- User LEDs: Red and Green (LED6) AXI GPIO configuration -->
<ip_preset preset_proc_name="leds_2bits_preset"><ip vendor="xilinx.com" library="ip" name="axi_gpio" ip_interface="GPIO"><user_parameters><user_parameter name="CONFIG.C_GPIO_WIDTH" value="2"/><user_parameter name="CONFIG.C_ALL_OUTPUTS" value="1"/><user_parameter name="CONFIG.C_ALL_INPUTS" value="0"/><user_parameter name="CONFIG.C_DOUT_DEFAULT" value="0x00000003"/></user_parameters></ip>
</ip_preset>

在这里,我们将 AXI GPIO IP 内核配置为只有 2 个引脚将用作默认逻辑值为 1 的输出,因为该板上的 LED 处于低电平有效(通过提供逻辑 0 开启)。

part0_pins.xml

part0_pins.xml 文件在 <part_info> </part_info> 标签之间键入信息,我们必须在其中指定板上使用的 FPGA 部件。在这两个标签之间,我们将提供所有引脚映射信息:

<!-- Physical pin location and I/O standards for component interfaces described in board.xml -->
<part_info part_name="xc7z010clg400-1"><pins><pin index="0" name ="leds_2bits_tri_o_0" iostandard="LVCMOS33" loc="W14"/><pin index="1" name ="leds_2bits_tri_o_1" iostandard="LVCMOS33" loc="W13"/></pins>
</part_info>

此处列出的引脚通过引脚名称属性链接到 board.xml 文件中指定的 IP 核端口引脚。我们将 I/O 标准设置为 LVCMOS33,因为这些引脚所在的 FPGA bank 的电压在 EBAZ4205 板上设置为 3.3V。最后,我们通过提供位置属性 loc 将 IP 核端口引脚链接到物理 FPGA 封装引脚。

我希望本教程能帮助各位更好地了解 Xilinx Vivado 电路板文件结构以及如何为你的开发板定制电路板创建这些文件。

完整的 EBAZ4205 板文件可以在下面的链接中找到,只需要放到文章开头的路径下即可:

https://github.com/suisuisi/EBAZ4205/tree/main/Documents/Board%20files

路径下还有Spartan Edge Accelerator开发板的文件。

谈谈Verilog和SystemVerilog简史,FPGA设计是否需要学习SystemVerilog

陪你度过深夜的2048小游戏,我们用FPGA实现它

数字硬件建模综述

AMBA_AXI总线详解

使用Xilinx Vivado 创建自己板卡文件-以 EBAZ4205(旷板ZYNQ7010) 为例相关推荐

  1. xilinx vivado 生成flash下载文件

    生成fsbl工程. SDK里新建Apllication Project,模板里选择选择Zynq FSBL,finish. 右击,刚新建的工程选择Create Boot Image. 按下图少文件的自行 ...

  2. xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证

    xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...

  3. Xilinx VIVADO 中 DDR3(AXI4)的使用(1)创建 IP 核

    1.前言 DDR3 SDRAM 简称 DDR3,是当今较为常见的一种储存器,在计算机及嵌入式产品中得到广泛应用, 特别是应用在涉及到大量数据交互的场合,比如电脑的内存条.DDR3的时序相当复杂,对DD ...

  4. vivado创建项目时找不到boards(ZCU102)的两种解决方案

    问题:vivado创建项目时找不到boards(ZCU102) 如下图所示,vivado检测不到板卡(这里我用的是xilinx的Zynq_UltraScale+_MPSoC_ZCU102_Evalua ...

  5. Vivado创建项目和仿真

    一.创建项目 Create Project: Next: 填写项目名,选择项目位置,Next: 选择RTL项目,勾选Do not specify sources at the time,即不添加源文件 ...

  6. Vivado中IP核生成文件

    正像我之前所说的,较XPS的IP核而言,Vivado IP核在创建.打包.使用等各方面都更加简单便捷,同样的Vivado IP核抛弃了以往复杂的IP核文件组织模式,仅使用一个component.xml ...

  7. 打开vivado的.xpr工程文件报错Cannot locate target loader

    打开vivado的.xpr工程文件报错Cannot locate target loader 在打开vivado工程时总是报错Cannot locate target loader(重新安装vivad ...

  8. Xilinx vivado 常用IP核使用

    目录 1. Accumulator 12.0 2. Aurora 8B10B 11.1 3. Clocking Wizard 3.1. 时钟资源 4. Divider Generator 5.1 5. ...

  9. linux系统安装vivado软件,vivado 2017下载 Xilinx Vivado HLx 2017.2 在线安装包 官方安装版(附许可证) 64位 Linux版 下载-脚本之家...

    vivado 2017.1是一款Xilinx开发的功能强大的产品加工分析软件,在专业化的产品加工方面,提高产品上市的时间决定于加工的流程设计以及优化的设计方案,定制一套专业的加工流程是每一个厂家以及设 ...

最新文章

  1. 2022-2028年现代农业背景下中国家庭农场深度调研及投资前景预测报告
  2. android检测内存使用工具--procrank
  3. C#笔记(五):文件和流
  4. atom上网本 安装linux,拆东墙补西墙?多数Atom上网本或将无法安装Windows 7
  5. k8s的job和CronJob
  6. NYOJ--106--背包问题
  7. Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
  8. 以mysql为例有几种隔离级别_mysql隔离级别有几种
  9. 查询一个表插入数据的时间,按BLOCK时间
  10. 论文笔记_S2D.53_2013-ICCV_单目相机半稠密视觉里程计(VO)
  11. 从雷声谈云层中的电能
  12. C# Winform 实现屏蔽键盘的win和alt+F4的实现代码
  13. 《Axure RP 9实战指南》Axure RP 9.0最新版汉化问题
  14. windows配置端口映射
  15. [译] 为什么你要学习 Go?
  16. 多种模块拔号上网驱动开发调试
  17. 本地搭建我的世界服务器(可联机)
  18. 激光雷达相机外参标定
  19. uebs游戏_UEBS Ultimate Epic Battle电脑版
  20. 洛谷刷题C语言:Bold、饱食、公平の意、DOM、

热门文章

  1. Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战
  2. 简单答题系统(判断题)
  3. java实训———百词斩
  4. 基于Android的聊天系统
  5. 支持向量机(二)——松弛变量处理异常点
  6. IDEA 加断点debug时阻塞问题
  7. 个人深度学习工作站配置指南
  8. java微信公众号自动回复文字加图片
  9. 自动驾驶与python_Python对自动驾驶技术的重要作用
  10. JDK 8 的安装报javac不是外部或内部命令