上期内容:揭秘DCP
在ESL(ElectronicSystem Level)阶段,典型的特征之一就是采用高层次语言完成设计。这里的“高层次”是相对于传统的RTL语言(VHDL/Verilog)而言。Xilinx有专门的高层次综合工具Vivado HLS,可支持C、C++和System C做为设计输入。
先回顾一下传统的RTL设计流程,如下图所示。设计输入为可综合VHDL/Verilog/System Verilog以及相应的Test bench,这里Test bench也是采用硬件描述语言描述。之后,完成行为级仿真以验证功能的正确性,综合以完成RTL到FPGA器件结构的映射,布局布线将相应的逻辑单元放置到具体型号的FPGA中并连线。在这两个阶段都要保证设计时序收敛,性能满足要求,资源利用率合理。
再来看看Vivado HLS设计流程,如下图所示。此时设计输入采用C/C++或者System C,相应的Testbench也采用这种高级语言描述。同时在C这个级别完成功能验证,因此其仿真速度比传统的RTL级别的仿真要快很多。C综合完成C到RTL级别的转换,然后就可以基于生成的RTL代码采用RTL设计流程。
在这个流程中,设计输入需要Test bench,这是很多初学者容易忽略的。基于C的Test bench不仅用于验证C算法功能的正确性,这可在log文件中看到,如下图所示。还用于C/RTL Cosimulation,这意味着设计者并不需要提供基于硬件描述语言的Testbench。C/RTL Cosimulation是至关重要的,它保证了生成RTL代码功能的正确性,毕竟设计优化和设计验证均是在C层面完成,如果生成的RTL代码功能不正确,是无法直接修改RTL代码的。
进一步详细描述Vivado HLS设计流程如下图所示。不同于传统的C算法描述,HLS需要通过添加Directives指导工具如何对设计进行优化。这些Directives可在Vivado HLS界面完成,最终写在相应的Tcl脚本文件里,也可直接以pragma的形式写在C程序中。
根据这一流程可以看到Vivado HLS设计输入包括三部分:C算法描述文件、C算法仿真文件和Directives文件。最终输出结果以IP、DCP或SysGen模型的形式存在。
结论
如果文章对你有收获,欢迎转发赞赏~