第23讲 函数层面的优化
- 2019 年 10 月 31 日
- 笔记
谈到函数,我们会很自然地联想到Verilog中的module或者VHDL中的entity,没错,它们之间是相互对应的。通常在Vivado HLS中,每个函数会生成相应的RTL代码。类似的,如果一个函数功能简单,代码量很小,那么该函数就有可能被合并到调用它的函数中,这其实就是所谓的层次打平。
采用C描述的函数,因为C本身的特性,函数是顺序执行的,可理解为串行工作。实际上,有的函数是可以并行工作的。Vivado HLS提供了这种机制,通过使用Allocation可确定函数是顺序执行还是并行执行。此外,通过对函数使用DATAFLOW,也可提高吞吐率。其本质是采用乒乓工作机制使得函数并行工作。
无论是RTL代码还是C代码,清晰合理的数据流是非常重要的,它可以有效帮助设计者划分模块、设计函数层次。因此,在写代码之前,画出清晰合理的数据流是很有必要的。
更为深入的介绍可以阅读以下文档:
ug902 (v2018.1) High-Level Synthesis UserGuide:page 312-page313

