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

本文参考了高亚军老师的课程,搜索课程在各大电子网站和B站即可看到。

传统的RTL设计流程

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

  1. 设计Verilog VHDL SV代码代码

  2. 设计TB文件

  3. 进行RTL级仿真不断修改

  4. 综合实现

  5. 系统级调试

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

在这里插入图片描述

C语言设计流程

在HLS工具的使用中最大的不同是你只需要进行C语言的编写设计和测试代码,通过HLS工具即可自动完成对RTL的代码生成,进过C综合后通过声明的操作进行对代码不同的优化。
完成C综合后即可导出RTL级代码进行RTL级的综合分析。后面过程与传统的RTL分析过程相同。
在这里插入图片描述

HLS的系统级ip使用流程

一个C/C++代码最后映射到RTL代码有三大类接口,包括Block-level IO Handshake(握手信号)、C Inputs、C Outputs;
生成调用后可以在system generate或者vivado的block design中添加到IP库中即可进行调用。

在这里插入图片描述
Vivado HLS的设计输入包括Test bench、C/C++和Directives,相应的设计输出有IP(在Vivado的IP Catalog中)、DCP(RTL代码综合后的网表文件)、SysGen(HLS之后的结果可以导入SysGen中使用)。
Test bench的作用有两点:一是验证C/C++代码的正确性;二是在与RTL的协同仿真阶段,生成用于RTL级验证的Test bench;
在这里插入图片描述

对于一个工程,只可以有一个顶层的函数用于综合,这个函数下面的子函数也可以被综合,通常情况下C/C++综合后的RTL代码的结构和原始的C函数描述的结构一致(除了子函数所需要的逻辑量很小、算法功能很简单时,综合阶段不会单独有这个结构,将HLS INLINE off关掉时就会完全一致)。
并不是所有的C/C++语言风格的代码都能被综合,有两点需要注意:一是动态内存分配,二是操作系统层面;

HLS的设计操作流程

  1. 添加设计文件

  2. 添加测试文件

  3. 进行C仿真

  4. 进行C综合

  5. 进行联合仿真

  6. 导出RTL

    注意:
    在C综合时候,我们可以通过添加声明来对代码进行优化和约束。
    

在这里插入图片描述

hls界面中的操作流程

在这里插入图片描述

SOLUTIONS

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

查看波形

在这里插入图片描述

Directives的两种方式

在这里插入图片描述
在这里插入图片描述

将每个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都要被执行。

小结

在这里插入图片描述
为C/C++代码中的for循环单独创建标签,这会使得在创建directives时非常方便;
最好将directives单独存放,不要将其和源码放在一起;
Test bench中的main()函数的返回结果值为int类型,仿真通过返回值为0,不通过才是1;
通常情况下RTL代码的层次和原始的C/C++代码层次一致;

猜你喜欢

转载自blog.csdn.net/weixin_41445387/article/details/105877549
HLS
今日推荐