Vivado HLS介绍及IP核的设计流程

本篇主要是笔者个人对Vivado HLS软件的一些理解与介绍,及该软件的设计流程创建IP核。


目录

前言

正文

一、创建工程

二、C源代码的验证(Validate)

三、高层次综合

四、RTL验证(Verify)

五、IP创建

结语


前言

Vivado HLS全称是Vivado High Level Synthesis,一般在安装Vivado的时候会默认附带安装。一般我们在用Vivado开发时,可以使用其自带的IP核,实现基本的数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、DDS等),IP核类似编程中的函数库,可以直接调用,非常方便。而Vivado中的IP核毕竟种类有限,而且并不总是能实现我们需要的功能,所以Vivado HLS的作用就凸显出来了!

简单的说,我们可以将需要实现的功能使用C/C++写成子函数,然后通过Vivado HLS综合生成HDL级的IP核。然后将此IP核添加到Vivado中的IP核库中备用。当然,在从C/C++到IP核的过程中,要进行测试,仿真,优化等步骤确保IP核可用并且性能得到提升。下面两张图说明了具体设计流程,以Xilinx官方提供资料为例,进行讲解。

Vivado HLS入门视频教程:https://forums.xilinx.com/t5/Vivado/%E8%B7%9F-Xilinx-SAE-%E5%AD%A6-HLS-%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0-%E4%B8%AD%E6%96%87%E8%AE%B2%E8%A7%A3/td-p/708179

官方手册与例程资料:链接:https://pan.baidu.com/s/17F8JKuEV2XQq1dkHR6_DBw 
提取码:y4ba

链接失效请点这个:https://download.csdn.net/download/CSD_N_csdn/12657321

正文

一、创建工程

以官方例程中的lab1文件夹提供的源文件与测试文件为例。

首先,打开Vivado HLS,点击Create New Project,在弹出窗口中填写工程名,设置工程本地存放路径,然后点击Next。

 

点击Add Files,选择fir.c文件进行添加(如果源代码是C++编写,应该是.cpp文件),然后点击Browse,添加Top Function,完成后,.h头文件会自动添加,点击Next,至此源文件添加完成。

在这个页面上,上面有提示,Add/remove C-based testbench files即添加测试文件和测试数据文件,点击Add Files,选择文件夹中的fir_test.c和.dat文件,它们一个是测试的程序文件,一个是测试的数据文件,完成后点击Next。

在Solution Configuration窗口,Solution Name可以修改或者默认,后续如果进行优化,就要新建Solution,代表不同的解决方案。Part Selection要进行芯片选型,这个可以默认或者根据你具体应用的芯片型号进行选择。完成后,点击Finish。

第一部分创建工程至此结束,可以看出,在创建工程的过程中,就已经把源文件和测试文件等添加到了工程中,接下来进行验证。

二、C源代码的验证(Validate)

进入工程后,可以打开源文件和测试文件查看,不难发现,源文件的代码主要是一个子函数,而测试文件的代码就是一个主程序,在主程序中调用该子函数,以达到测试子函数的目的。

点击Run C Simuation,进行验证,在弹出窗口点击OK。

完成之后,会弹出fir_csim.log窗口,包含验证的信息,出现0 errors代表验证成功。

三、高层次综合

本步骤是将C代码综合成RTL逻辑,点击Run C Synthesis,综合完成后,可以查看资源使用情况。

四、RTL验证(Verify)

本步骤是对RTL的逻辑验证,使用测试文件提供测试数据,与标准输出数据进行对比。点击Run C/RTL Cosimulation,在弹出窗口点击OK即可。完成后会弹出Cosimulation的报告。

五、IP创建

本步骤就是将上述的RTL逻辑打包成HDL的IP核,在左侧工程文件目录窗口,右键点击solution,选择Export RTL,弹出对话框,可在对话框中对该IP核信息进行配置,也可默认点击OK。

完成后,可以在左侧的文件夹solution->impl->ip下找到压缩完成的IP核。

完成后的IP核就可以添加到Vivado的仓库中,便于以后的使用了。

结语

这篇博客侧重于对设计流程的描述,而对每个部分可能遇到的问题及解决方法并没有说明。在后续的更新中会对每个部分进行详细的分析说明,例如关于测试文件和测试数据的编写方法,关于端口的问题,关于优化的方法等,当然大家也可以参考官方的文档学习。

对于此软件的学习算是准备工作吧,接下来笔者准备使用该工具制作神经网络模型的卷积核等部分,最终实现在FPGA上部署神经网络模型的目标!欢迎有兴趣的朋友一起学习、探讨!

参考前辈博文:https://blog.csdn.net/weixin_39290638/article/details/80228806


如果本文对您有用,欢迎点赞、关注!

 

 

视频课程源:http://xilinx.eetop.cn/category-83 目录 1 从软件工程师的角度来看 FPGA 架构 3 2 Vivado HLS的工作机制 5 3-4 HLS设计流程基本概念 9 5 任意精度数据类型 15 5.1 C语言支持的数据类型 15 5.2 sizeof()函数使用 16 5.3 设置Visual Studio支持任意精度数据类型 17 6 数组类型转换 17 6.1 变量的定义和初始化 17 6.2 定点数据类型 18 6.3 浮点数据类型的定义和初始化 19 6.4 隐式数据类型转换 19 6.5 显示数据类型转换 19 7 Vivado HLS中的复合数据类型 20 7.1 结构体 20 7.2 枚举类型 22 8 Vivado HLS中的C++基本运算 23 9 测试平台的基本架构 25 9.1 Test Bench 25 9.2 C Test Bench 26 10 测试激励 28 11 测试输出检测与格式控制 28 11.1 Scoreboard 28 11.2 输出格式控制 30 12 接口综合基本介绍 33 12.1 接口综合概述 33 12.2 block-level interface protocol和port-level interface protocol 34 13 接口综合之数组 35 14 接口综合案例演示 37 14.1 添加寄存器 37 14.2 添加时钟使能信号 38 14.3 指令优化 38 15 for循环优化-基本性能指标 40 15.1 基本衡量指标 40 15.2 for循环pipeline 41 15.3 for循环UNROLL展开 41 15.4 for循环变量i 42 16 for循环优化-循环合并 42 17 for循环优化-数据流 46 18 for循环优化-嵌套的for循环优化 54 18.1 循环嵌套类型 54 18.2 Perfect loop nest示例 55 18.3 Imperfect loop nest示例 56 19 for循环优化-其他优化方法 59 19.1 for循环的并行性 59 19.2 for循环pipeline时的rewind选项 61 19.3 for循环的循环边界是变量时处理方法 64 20 数组优化-数组分割 67 20.1 数组接口 67 20.2 数组分割 67 21 数组优化-数组映射和重组 69 21.1 数组的映射 69 21.2 数组的重组 72 21.3 综合对比 72 22 数组优化-其他优化方法 72 22.1 定义ROM 72 22.2 数组的初始化 74 23 函数层面优化 75 23.1 代码风格 75 23.2 Inline 75 23.3 Allocation 75 23.3 Dataflow 75 24 总结分析 77 24.1 改善吞吐率(Throughput) 77 24.2 改善时延(Latency) 78 24.3 改善资源(Area) 79
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值