HLS开发学习-03-VIVADO HLS设计流程

简介: HLS开发学习-03-VIVADO HLS设计流程

传统的RTL设计流程


在RTL设计流程中,是这样的设计流程:

  1. 设计Verilog VHDL SV代码代码
  2. 设计TB文件
  3. 进行RTL级仿真不断修改
  1. 综合实现
  2. 系统级调试

注意在综合分析时要根据需要满足资源布局还有时序的要求

image.png

C语言设计流程


在HLS工具的使用中最大的不同是你只需要进行C语言的编写设计和测试代码,通过HLS工具即可自动完成对RTL的代码生成,进过C综合后通过声明的操作进行对代码不同的优化。

完成C综合后即可导出RTL级代码进行RTL级的综合分析。后面过程与传统的RTL分析过程相同。

image.png

HLS的系统级ip使用流程


一个C/C++代码最后映射到RTL代码有三大类接口,包括Block-level IO Handshake(握手信号)、C Inputs、C Outputs;

生成调用后可以在system generate或者vivado的block design中添加到IP库中即可进行调用。

image.png

Vivado HLS的设计输入包括Test bench、C/C++和Directives,相应的设计输出有IP(在Vivado的IP Catalog中)、DCP(RTL代码综合后的网表文件)、SysGen(HLS之后的结果可以导入SysGen中使用)。

Test bench的作用有两点:一是验证C/C++代码的正确性;二是在与RTL的协同仿真阶段,生成用于RTL级验证的Test bench;

image.png

对于一个工程,只可以有一个顶层的函数用于综合,这个函数下面的子函数也可以被综合,通常情况下C/C++综合后的RTL代码的结构和原始的C函数描述的结构一致(除了子函数所需要的逻辑量很小、算法功能很简单时,综合阶段不会单独有这个结构,将HLS INLINE off关掉时就会完全一致)。

并不是所有的C/C++语言风格的代码都能被综合,有两点需要注意:一是动态内存分配,二是操作系统层面;

HLS的设计操作流程


  1. 添加设计文件
  2. 添加测试文件
  3. 进行C仿真
  1. 进行C综合
  2. 进行联合仿真
  3. 导出RTL
注意:
在C综合时候,我们可以通过添加声明来对代码进行优化和约束。

image.png

hls界面中的操作流程


image.png

SOLUTIONS


image.png

对于每份代码综合处理后的,结果可能是不相同的,具体就要根据自己的需求进行合理的优化。

image.png

查看波形


image.png

Directives的两种方式


image.png

image.png

将每个directive以directives.tcl格式作为一个Tcl命令单独存放,以"#"作为标识;

优势在于:每个solution都有独立的directives,如果这个solution需要重新综合,那么只有这个solution下面的directive会起到作用;不足之处在于:如果C source code文件需要被给到第三方,那么需要将directives.tcl包含其中,对于一个代码需要获得同样的综合结果,那么同样的directives.tcl必不可少。

将每个directive嵌入到C/C++源码中,以pragma格式出现,"%"作为标识;

优势在于:如果C source code文件需要被给到第三方,不需要单独将directives.tcl交付,对于一个代码需要获得同样的综合结果,也不需要额外的directives.tcl;不足之处在于:如果一个solution需要重新综合,那么所有的directives都要被执行。

小结


image.png

为C/C++代码中的for循环单独创建标签,这会使得在创建directives时非常方便;

最好将directives单独存放,不要将其和源码放在一起;

Test bench中的main()函数的返回结果值为int类型,仿真通过返回值为0,不通过才是1;

通常情况下RTL代码的层次和原始的C/C++代码层次一致;

目录
相关文章
|
存储 编解码 Linux
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
|
6月前
|
存储 缓存 算法
ffmpeg 音视频同步进阶 剖析:ffmpeg音视频同步中特殊情况处理策略
ffmpeg 音视频同步进阶 剖析:ffmpeg音视频同步中特殊情况处理策略
156 0
|
6月前
|
网络协议 Linux 测试技术
音视频学习之rtsp推流学习1(rtspserver开源库example运行及流程梳理)
音视频学习之rtsp推流学习1(rtspserver开源库example运行及流程梳理)
390 0
|
编解码 网络协议 开发工具
如何对RTSP播放器做功能和性能评估
好多开发者在做产品竞品分析的时候,不知道如何界定一个RTSP播放器,大牛直播SDK认为,一个RTSP播放器,不是说有几个类似于Open/Close接口就够了,好的RTSP播放器需要具备以下功能和性能属性:
|
编解码
播放器实战--音视频同步方案
播放器实战--音视频同步方案
179 0
|
测试技术
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
213 0
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
HLS开发学习-14- Vivado HLS 函数层面的优化
HLS开发学习-14- Vivado HLS 函数层面的优化
316 0
HLS开发学习-14- Vivado HLS 函数层面的优化
|
缓存 数据处理 索引
HLS实践 - 06 - 优化设计(二)
HLS实践 - 06 - 优化设计
210 0
HLS实践 - 06 - 优化设计(二)
|
存储 人工智能 监控
HLS实践 - 06 - 优化设计(一)
HLS实践 - 06 - 优化设计
283 0
HLS实践 - 06 - 优化设计(一)
HLS开发学习-15- HLS优化指令汇总
HLS开发学习-15- HLS优化指令汇总
337 0
HLS开发学习-15- HLS优化指令汇总