高层次综合基础-vivado hls第三章
Xilinx的vivado hls工具可以将C语言函数综合为IP,然后集成到FPGA硬件设计系统中。
Vivado hls的设计流程:
- 编译、C仿真、C执行和C语言算法的调试
- 将C语言算法综合为RTL实现,可选择使用用户最优化指令
- 将C语言算法综合生成综合性报告,并进行分析
- 使用按钮式流程来验证RTL的实现
- 将RTL设计实现封装为一套特定的IP格式
关于vivado hls的输入和输出
- 使用C,C++,SystemC编写的C语言函数,这个是Vivado hls的主要输入
- 函数可以包含子函数层级
- 约束是必需的。包括时钟周期约束,时钟的不确定性约束,FPGA目标器件的约束。时钟的不确定性如果没有指定,默认为12.5%
- 优化指令的使用。优化指令的使用并不是必要的,而是可选的。优化指令的作用是用于指示综合流程实现特定行为或者最优化操作
- 在传统的C程序设计中,顶层函数都是入口函数main()函数,但是,在vivado hls设计中,你可以将main()下任意子函数指定为综合的顶层函数。Main函数是无法被综合的。
- 允许指定main函数中其中的某一个函数为综合的顶层,一个设计只能有一个顶层函数
- 综合的顶层函数中的任意的子函数都会被进行综合
- 如果要综合的函数不包含在综合的顶层函数的层级下,必须将此类函数单独的进行综合,或者将其合并到顶层函数的层级下
- 不支持不可综合的C语言包括:动态内存分配,fpga的资源是固定的资源,不支持动态的创建和分配,你要多少资源,都是预先分配和感知的,不能够动态分配和创建
- OS操作系统的一些系统函数是不可综合。
- FPGA设计的所有数据都必须从输入的端口读取或者将数据写入输出端口。
- 操作系统的文件读写操作,时间和日期之类的操作系统函数是不支持综合的
- 任意精度数据类型库
- 半精度浮点数据类型库
- 数学运算库
- FFT函数和FIR函数
- 标准的C语言类型是8bit边界实现的,FPGA硬件平台,通常使用任意位宽边界的数据类型
- 任务执行流水线,允许当前任务完成之前就开始执行下一项任务
- 指定完成函数,循环和区域的时延
- 指定使用的资源数量限制
- Vivado hls中任何子函数使用的IO协议你是无法控制的,这个是vivado hls自行决定的,用户不能控制这些接口,只能指定接口是否寄存。