HLS可以用于将C语言函数转换成硬件模块。这是一个革命性的工具,从此软件人员也可以创建硬件模块。下面从软件工程师的角度,介绍使用HLS创建硬件模块时的注意事项。为了避免重复,请先阅读UG871 《Vivado Design Suite Tutorial: High-Level Synthesis》。
进行硬件加速,要先准备好用来生成硬件模块的函数,它需要保存在一个单独的文件里。在创建工程时,指定它做为顶层函数。同时也要准备一个实现相同功能的函数,它不会被生成硬件模块,用于验证硬件模块的功能是否正确。最后还要准备一个测试的main()函数,它分别调用前面所述的两个软件函数,并比较它们输出的结果是否一致。在C语言验证和RTL验证时,HLS工具都会调用它。
创建HLS工程的具体步骤,请参考UG871 《Vivado Design Suite Tutorial: High-Level Synthesis》。假设已经创建好HLS工程。下面介绍最基本的约束。
下面是一个典型的C语言函数。
long long cmplx_dot_st_1port
(
long long* p_a,
unsigned int ui_vector_length,
unsigned int ui_test_param[2]
)
上面这个函数中,p_a是一个指针,用于存放有用于存储大量输入/输出数据。CPU执行这个函数时,CPU指令会读写其中的数据。如果C语言函数转换成硬件模块,可以生成AXI Master接口,由硬件模块自动读取数据,相当于集成了一个DMA控制器;也可以生成AXI Stream接口,AXI Stream Slave接口接受其它数据源生成的数,AXI Stream m