HLS高层次综合
一、 背景
介绍:
HLS就是把采用高级语言(C/C++/System C等)描述的数字系统映射成RTL结构,并且满足约束和目标。
HLS优点:
- 从算法层的功能描述成RTL容易出错,耗费大量时间,
- RTL仿真速度慢
- HLS有利于IP复用
- 项目进度快,可以选择最适合的架构
二、 C++到HDL的映射
结构:
- C++是函数组成,HDL是module,将C++单线程映射成HDL多线程
- C++中函数调用通过函数名相关联,函数之间的传值是通过端口变量实现的。相应
地,HDL中地模块调用也通过模块名相关联,模块之间的联系同样通过端口之问的连接实现,所不同的是,它反映的是硬件之间的实际物理连接。C/C++函数调用是唯一的,每一个都是相同的,可以无限制调用;而HDL对模块的调用都必须赋予一个不同的别名,调用次数受硬件电路资源的限制。 - C++中从main函数开始执行,在HDL中每个module是等价的,其必定存在一个顶层模块testbench。main函数相当于testbench
- C++中没有时钟异步、同步,也没有延迟
数据类型:
- C++和HDL中基本类型的对应
- 数组
- 指针:
HDL中不存在地址的概念,所以C中的指针没法映射到HDL
4. 类/结构体:类/结构体可以映射成HDL。联合体(union)不知其真实大小,不能映射
设计接口:
- 输入:
入端口将数据从外界传入设计模块进行处理。C/C++参数列表里非指针的参数和在函数中只被读的指针参数对应于HDL中的输入端口。
![](https://cl.ly/3caa51bae366/Image 2019-03-09 at 4.03.35 PM)
这个是MD
整型a是输入,指针p是输出
2. 输出:输出端口将处理后的数据从设计模块传递给外界。函数的返回值和参数列表里在函数中只被写的指针、数组参数对应于HDL中的输出端口。
3. 双向
向端口既可以从外界接收数据也可以将处理的数据传递给外界。C/CH参数列表里
的指针或数组在函数中若既被读又被写则对应于HDL中的双向端口.
除以上所述之外,HDL描述端口还包括时钟、复位、使能等专用端口。
◆时钟:给出硬件设计的工作频率,并确定同步情况下的有效时钟沿。
◆复位:给整个设计提供复位操作,并确定是同步复位或异步复位。
◆使能:为硬件模块提供使能信号,并确定有效时钟沿。
◆握手协议:一般包括开始和完成反馈信号,开始有效时输入数据被读入,完成有效时表示输出数据已准备好。
三、 可综合C++
层次化设计
面向对象
静态对象
四、 IP重用
- 可以根据不同的需要、应用场景,修改约束条件,将C++映射成不同的RTL
- C++等高级语言实现的IP与工艺无关,能够映射成不同FPGA厂家、型号和foundry工艺
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!