如何使用xilinx的HLS工具进行算法的硬件加速

【引言】 本系列教程演示如何使用xilinx的hls工具进行算法的硬件加速。分为三个部分,分别为hls端ip设计,vivado硬件环境搭建,sdk端软件控制。在hls端,要将进行硬件加速的软件算法转换为rtl级电路,生成便于嵌入式使用的axi控制端口,进行数据的传输和模块的控制。 【hls介绍】 hls可以将算法直接映射为rtl电路,实现了高层次综合。vivado-hls可以实现直接使用 c,c++ 以及 system c 语言对xilinx的fpga器件进行编程。用户无需手动创建 rtl,通过高层次综合生成hdl级的ip核,从而加速ip创建。hls的官方参考文档主要为:ug871( ug871-vivado-high-level-synthesis-tutorial.pdf )和ug902(ug902-vivado-high-level-synthesis.pdf)。  对于vivado hls来说,输入包括tesbench,c/c++源代码和directives,相应的输出为ip catalog,dsp和sysgen,特别的,一个工程只能有一个顶层函数用于综和,这个顶层函数下面的子函数也是可以被综合的,会生成相应的vhdl和verilog代码,所以,c综合后的rtl代码结构通常是跟原始c描述的结构是一致的,除非是子函数功能很简单,所需要的逻辑量很小。并不是所有的c/c++都可以被综合,动态内存分配和涉及到操作系统层面的操作不可以被综合。vivado hls 的设计流程如下:
在整个流程中,用户先创建一个设计 c、c++ 或 systemc 源代码,以及一个c的测试平台。通过 vivado hls synthesis 运行设计,生成 rtl 设计,代码可以是 verilog,也可以是 vhdl。有了 rtl 后,随即可以执行设计的 verilog 或 vhdl 仿真,或使用工具的c封装器技术创建 systemc 版本。然后可以进行system c架构级仿真,进一步根据之前创建的 c 测试平台,验证设计的架构行为和功能。设计固化后,就可以通过 vivado 设计套件的物理实现流程来运行设计,将设计编程到器件上,在硬件中运行和/或使用 ip 封装器将设计转为可重用的 ip。   step 1: 新建一个工程 1,creat new project新建文档,输入工程名称和工程路径。完成后点击next。
2,添加设计文件,并制定顶层函数。完成后点击next。
3,添加c语言仿真文件。完成后点击next。
4,:配置solution name,一般默认即可。配置clock period,单位是ns。配置uncertainty,默认为空。选择产品型号。完成后点击finish。
5,工程新建成功后进入的开发界面,hls是典型的eclipse界面,和sdk的界面十分相似。
导入的文件的代码如下:1,源文件。axi_interfaces.c   #include axi_interfaces.hvoid axi_interfaces (dout_t d_o[n], din_t d_i[n]) {int i, rem;// store accumulated datastatic dacc_t acc[channels];axi_interfaces_label0:for (i=0;i #ifndef axi_interfaces_h_ #define axi_interfaces_h_ #include  typedef int din_t; typedef int dout_t; typedef int dacc_t; #define channels 8 #define samples 4 #define n channels * samples void axi_interfaces (dout_t d_o[n], din_t d_i[n]); #endif  3,测试文件。axi_interfaces_test.c
#include axi_interfaces.h int main () { // create input data din_t d_i[n] = {10, 20, 30, 40, 50, 60, 70, 80, 11, 21, 31, 41, 51, 61, 71, 81, 12, 22, 32, 42, 52, 62, 72, 82, 13, 23, 33, 43, 53, 63, 73, 83}; dout_t d_o[n]; int i, retval=0; file        *fp; // call the function to operate on the data   axi_interfaces(d_o,d_i); // save the results to a file fp=fopen(result.dat,w); fprintf(fp, din dout ); for (i=0;iexport tl,设置如下,点击ok。
ip封装完成后,会在impl文件夹中输出ip文件夹,其中包含了rtl代码(hdl),模块驱动(drivers),文档(doc)等信息,其中包含一个压缩包文件,是用于建立vivado工程所用的ip压缩包。
step 7: 总结 本文重点讲解了hls软件的使用方法和优化方法,在c语言模块设计上没有重点讲解。在掌握了hls软件的基本用法和优化方法后,接下来就可以设计更加复杂的c语言模块,进行rtl综合,加快设计开发的速度。


复杂BLDC控制带来更高效电机应用
Imagination携智慧芯片亮相紫光峰会
Netgear调制解调器/路由器过热怎么办
电容式触摸控制的低成本解决方案
Intel敲定10nm芯片发布时间,并称量产有限
如何使用xilinx的HLS工具进行算法的硬件加速
如何通过实时可变栅极驱动强度更大限度地提高 SiC 牵引逆变器的效率
双向触发二极管与可控硅应用电路
AI助力,商汤科技联手上海电信打造云端医疗服务规模化发展新增长极
地弹导致电源芯片工作不正常
宝明科技:积极践行社会责任 探寻和谐共生发展模式
贸易摩擦加剧,国巨5月营收近腰斩,奇力新年增止步
24C02读写操作程序(C语言)
边缘计算是未来视频监控中的重要部分
推动可再生能源发展是新时代的新要求
智能家居必将崛起 但谁来为安全负责
基于MSP430系列单片机的CAN总线接口转换卡设计
大联大世平集团基于NXP和TI的ZigBee和NFC无线通讯解决方案
针对下一代高带宽通信系统优化的 IDT 模拟可变增益放大器
如何采用STM32单片机来产生PWM输出