熟悉xilinx vivado技术的同学都知道,vivado软件除了用verilog设计ip、用sdk开发软件外,还可以用hls开发ip的。目前来说,开发fpga似乎是硬件工程师的专利,但是软件工程师也可以用hls开发ip核的。ip核除了实现硬件协议外,另外一个重要的作用就是算法加速。
1、hls的开发语言
可以是c和c++语言
2、hls直接生成ip核
c/c++也是翻译成verilog/vhdl,然后生成的ip核的
3、hls的接口
目前主要是axis、m_axi、s_axilite
第一个是stream接口
第二个是maste入接口
第三个是slave接口
4、hls自带的函数
hls有很多自带的函数,比如hls::fft,hls::Dilate,hls::CvtColor等函数
5、测试方法
两种方法,一种直接用c进行testbench测试,还有一种就是用modelsim看波形
6、编写代码的注意点
两个需要注意的地方,一个是不能使用malloc和free等函数
第二个就是注意#pragma的使用,这个就是c语言生成verilog的关键,告诉hls编译器如何生成verilog
7、学习文档
网上有一本《course_s3_ALINX_ZYNQ开发平台HLS教程V1.03.pdf》、《4_领航者ZYNQ之HLS开发指南V2.0 .pdf》就不错,大家可以搜一下
8、最简单的hls代码,top函数就是led_control
#include <ap_int.h>
void led_control(ap_int<1>& led)
{
#pragma HLS INTERFACE ap_none port=led
#pragma HLS INTERFACE ap_ctrl_none port=return
for(int i = 0; i < 50000000; i++)
{
led = (i < (50000000/2)) ? 1:0;
}
}
9、其他硬件加速的方法
除了hls之外,目前还有arm+dsp(ti)、arm+cuda(nvidia)、arm+opencl(gpu)、npu(rk3399pro)、cpu(多核arm)等很多加速方法,大家可以根据自己的情况多多使用。很多安全关键系统,光靠arm这种cpu计算是远远不够的。