【ZYNQ】教你用 Vivado HLS 快速设计一个 IP

简介: 【ZYNQ】教你用 Vivado HLS 快速设计一个 IP

Xilinx 推出的 Vivado HLS 工具可以直接使用 C、C++或 System C 来对 Xilinx 系列的 FPGA 进行编程,从而提高抽象的层级,大大减少了使用传统 RTL 描述进行 FPGA 开发所需的时间。

Vivado HLS 的功能简单地来说就是把 C、C++ 或 SystemC 的设计转换成 RTL 实现,这样就可以在 Xilinx FPGA 或 Zynq 芯片的可编程逻辑中综合并实现,我们仍然是在进行硬件设计,只不过使用的不再是硬件描述语言。

以实现 LED 闪烁为例,通过使用 HLS 生成一个 LED 闪烁 IP,并导入到 Vivado 中验证,学习掌握使用 HLS 快速设计 IP 的方法。

  • 开发环境:Windows
  • 软件版本:Vivado 2017.4
  • 验证平台:黑金 ZYNQ 7035

HLS 设计

  • 打开 HLS,点击 Create New Project

  • 填写工程名字,选择工程保存路径,注意不可包含中文,点击 Next

  • 填写顶层函数名字,点击 Next

  • 暂时不添加文件,点击 Next

  • Clock Period 为运行时钟的周期,默认是 10ns,Clock Uncertainty 默认为时钟周期的 12.5%。点击 ... 选择芯片类型:

  • 我们使用的验证板卡为黑金的 ZYNQ7035 开发板,搜索选中 xc7z035fbg676,点击 OK

  • 点击 Finsh,工程配置完成:

  • 等待工程创建完毕,如图所示:

  • 添加源文件,右键 Source-->New File

  • 在工程目录下新建 src 文件夹,创建 .c 文件,文件命名和顶层函数一致:


  • 在源文件中添加源代码,代码功能是实现一个 LED 的闪烁:
#include <ap_cint.h>

#define DELAY 50000000

void led_ctrl(uint1 *led)
{
    int i = 0;

    for(i = 0; i < DELAY; i++)
    {
        if(i < DELAY / 2)
        {
            *led = 1;
        }
        else
        {
            *led = 0;
        }
    }
}
  • 如下图所示:

  • 点击 Run C synthesis 对代码进行综合:

  • 综合完成后可以查看综合报告:

  • 重点关注生成的接口信息,如图所示:

  • 此次我们实现的功能相对比较简单,采用更为简单的 ap_ctrl_none 和 ap_none 协议来综合,在源代码中添加两行指令:
#pragma HLS INTERFACE ap_none port=led
#pragma HLS INTERFACE ap_ctrl_none port=return

  • 保存后再次进行综合:

  • 综合完成后查看综合报告,端口简化了许多:

  • 点击 Export RTL 导出 IP:

  • 保持默认设置,点击 OK

  • 等待导出完成:

  • 在目录下可以看到导出的 IP:

  • 如果在导出 RTL 时报如下错误:

  • 参考解决方案:HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.

IP 验证

  • 创建 Vidado 基础工程,在工程目录下创建 ip_repo 文件夹,将 HLS 创建的 IP 复制过来并解压缩:

  • 在 Vivado 中导入创建的 IP,点击菜单栏 Tool-->Settings

  • 点击 IP --> Repository,点击右侧 + 号:


  • 找到 IP 存放路径,点击 Select

  • 在弹出的界面中可以看到已经识别出来的 IP,点击 OK

  • 创建 Block Design,首先导入一个 Utility Vector Logic

  • 将其配置成 1 位位宽的非门:

  • 导入我们创建的 IP:

  • 如图连接两个 IP 并创建外部端口:

  • 选择 Validate Design 验证设计,验证无误后保存设计:

  • 执行 Generate Output ProductsCreate HDL Wrapper

  • 由于验证板卡时钟为差分输入,这里将 wrapper 文件稍作修改:

  • 添加约束文件:

  • 点击 Generate Bitstream,对设计进行综合、实现、并生成 Bitstream 文件。

板级验证

  • 将比特流文件下载到开发板中,实现效果:

参考来源

  • 正点原子领航者
  • 黑金 ZYNQ7035

更多内容

  • CSDN博客:@Hello阿尔法
  • 哔哩哔哩:@Hello阿尔法
  • 知乎:@Hello阿尔法


相关文章
|
编解码 Linux
Linux MIPI DSI驱动调试笔记-LCD时序参数配置(三)
Linux MIPI DSI驱动调试笔记-LCD时序参数配置(三)
1062 0
|
传感器 数据采集 监控
上千个完整设计的单片机、8086、STM32制作教程和资料-转发分享
在网上收集了接近上千个完整设计的单片机、8086、STM32制作教程和资料-转发分享(涵盖了大部分的毕设课设题目),学习单片机的最好教程,也可以作为帮助大家在做电子课设毕设时有利的帮助,可以从以下百度网盘下载(按照编号下载)。
2161 0
上千个完整设计的单片机、8086、STM32制作教程和资料-转发分享
|
4月前
|
数据采集 计算机视觉 异构计算
FPGA进阶(2):基于I2C协议的EEPROM驱动控制
FPGA进阶(2):基于I2C协议的EEPROM驱动控制
70 0
|
4月前
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
188 0
|
4月前
|
异构计算 内存技术
FPGA进阶(1):基于SPI协议的Flash驱动控制(二)
FPGA进阶(1):基于SPI协议的Flash驱动控制
57 0
MicroPython 玩转硬件系列4:串口小实验
MicroPython 玩转硬件系列4:串口小实验
|
缓存 自然语言处理 网络协议
STM32CubeMX | | 使用小熊派串口驱动峰汇ETH-01以太网模块上传数据到OneNet
STM32CubeMX | | 使用小熊派串口驱动峰汇ETH-01以太网模块上传数据到OneNet
168 0
|
编解码 监控 Linux
嵌入式Linux MIPI接口LCD调试-关于DRM显示与应用调试的干货浓缩
嵌入式Linux MIPI接口LCD调试-关于DRM显示与应用调试的干货浓缩
1163 0
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
732 0
|
网络协议 测试技术 芯片
基于ZYNQ+DSP平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
Xilinx XC7Z035/45-2FFG676I PL端高速串行接口的千兆以太网UDP例程设计和使用说明
基于ZYNQ+DSP平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明