嵌入式硬件开发学习教程——Xilinx Vivado HLS案例 (2)

2021-11-11 09:28:54 浏览数 (1)

前 言

本文主要介绍HLS案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx Vivado HLS 2017.4、Xilinx SDK 2017.4。

Xilinx Vivado HLS(High-Level Synthesis,高层次综合)工具支持将C、C 等语言转化成硬件描述语言,同时支持基于OpenCL等框架对Xilinx可编程逻辑器件进行开发,可加速算法开发的进程,缩短产品上市时间。

本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC评估板,处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源,评估板由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证。

TLZ7x-EasyEVM-S评估板

TLZ7x-EasyEVM-S评估板评估板接口资源丰富,引出千兆网口、双路CAMERA、USB、Micro SD、CAN、UART等接口,支持LCD显示拓展及Qt图形界面开发。

led_flash案例

案例功能:控制评估底板LED2每隔0.5s将状态翻转一次。

HLS工程说明

  1. 时钟

HLS工程配置的时钟为100MHz,案例将该时钟用于计算0.5s间隔时间进行LED2亮灭状态控制,生成的IP核亦需接入该时钟。如需修改时钟频率,请打开HLS工程后点击,在弹出的界面中的Synthesis栏目进行修改。

图 26

  1. 顶层函数

案例顶层函数为led_flash.cpp中的led_flash()。

图 27

点击然后,可在弹出的界面中的Synthesis栏目查看或设置顶层函数。

图 28

该函数控制评估底板LED2每隔0.5s将状态翻转一次。工程设置的时钟为100MHz(周期10ns),在for循环里计数值为100000000,用时为10ns x 100000000 = 1s。

编译与仿真

请参考本文档HLS开发流程说明章节,进行编译。编译完成后,进入仿真界面点击后进行单步运行,进入led_flash()函数。

图 29

继续点击后进入for循环,当i < 50000000时,*led_o等于1(true)。

图 31

点击后全速运行或修改i的值为50000000,当i ≥ 50000000时,*led_o等于0(false)。

图 32

IP核测试

请参考本文档HLS开发流程说明章节,完成IP核测试前的准备工作。

HLS工程生成的IP核为led_flash_0。

图 33

加载PL端.bit格式可执行文件,即可看到评估底板的LED2进行闪烁。

key_led_demo案例

案例功能:通过按键KEY2控制评估底板的LED2状态。

HLS工程说明

  1. 时钟

HLS工程配置的时钟为100MHz。案例通过按键KEY2控制评估底板的LED2状态,实际没有使用该时钟。如需修改时钟频率,请打开HLS工程后点击

,在弹出的界面中的Synthesis栏目进行修改。

图 34

  1. 顶层函数

案例顶层函数为key_led_demo.cpp中的key_led_demo()。

图 35

点击后,可在弹出的界面中的Synthesis栏目查看或设置顶层函数。

图 36

按键所对应的IO默认是上拉、高电平。按下按键时,key_i为0;松开按键时,key_i为1。

普通标量类型参数对应IP核的输入接口,如key_i作为输入。指针类型参数可作为输入输出,如*led_o作为输出。

图 37

编译与仿真

请参考本文档HLS开发流程说明章节,进行编译。编译完成后,进入仿真界面点击后进行单步运行,可看到Console窗口打印led_o的值。由于key_i默认值为0,因此led_o的值为1。

图 38

修改key_i的值为1,并继续点击进行单步运行。

图 39

此时可看到led_o的值为0。

图 40

IP核测试

请参考本文档HLS开发流程说明章节,完成IP核测试前的准备工作。

HLS工程生成的IP核为key_led_demo_0。

图 41

加载PL端.bit格式可执行文件,按下KEY2则LED2点亮,松开KEY2则LED2熄灭。

0 人点赞