vivado_hls demo LZ77

原文–Zynq 高层次综合HLS 项目开发经历(3) 代码移植及Vivado HLS的使用

首先简介一下HLS的整套开发流程。详细流程可参考[1][2]。
1、设计C/C++代码以及C/C++的TestBench
2、C Simulation,验证软件代码是否正确
3、C Synthesis,将C/C++化为Verilog/VHDL
4、C/RTL Co-Simulation,将C的TestBench与生成的RTL一起进行Simulation
5、Export RTL,导出IP核
HLS的使用本身不是一个难点,我猜Vivado HLS本身就是一个Eclipse搭起来的IDE,所以只要对Eclipse上手就行。难点在于代码移植。

LZ77的软件算法在实现的时候,是用std::vector实现的。std::vector用了动态内存分配,是HLS综合不了的。所以数组必须要用固定长度的数组。而对于FPGA来说,片上SRAM又是有限的,不可能把文件的所有数据都存进来。又恰好因为LZ77本身就是一个流式算法。因此我决定在FPGA上开一个缓冲区,PS与PL的数据交换采用流(hls::stream[3],接口是axi_stream),实现了一个FIFO_Array类在硬件实现上来替代std::vector[6]。

但后来在Vivado里IP Integrator里Validate Design的时候发现了问题。Vivado一直提醒Stream没有TLast信号[4][10]。这个是一个非常大的坑。对于AXI_Stream,TLast信号为高标志着一批数据发送的结束。应当携带在本批数据的最后一个数据上向外发送。当使用纯C数据类型初始化hls::stream template时,

上一篇:HLS编程入门


下一篇:南京航空航天大学 PA2.1