HLS

less than 1 minute read

Published:

HLS example: acc_DTQRD

HLS

principle

关于HLS的原理,我参考了一下两篇文章,介绍了现代加速器是如何通过数据流分析来得出可以进行存算优化的点的,包括MLIR和HLS分析。这里暂时不具体分析。

MLIR原理与应用技术杂谈 - 知乎 (zhihu.com)

【Vivado那些事儿】高层次综合技术(HLS)原理浅析-碎碎思的CSDN博客

notes

  • 直观来看,HLS的c++语法和语义与verilog行为级模型没有什么区别,无非是不再拘泥于wire/reg这种导线类型,转而聚焦于数据。vivado提供了多种的自定义数据类型,包括自定义位宽的定点、浮点数,还有相应的math库等。

  • 在这里,非内联函数将被看做是一个硬件模块(所以没有main函数),接口由stream<>类型定义,这是一个FIFO结构。

  • HLS代码中有大量的#pragma编译器标记符,指示数据流的映射方式。加上这些符号是为了保证综合出的电路与预想的电路是一样的逻辑,而不是被综合成其他形式。
  • 严格来说,c++应该是串行逻辑,但是加上这些标记符,通过编译器分析,就会把串行逻辑并行化(这也包括隐式的无依赖计算)。
  • 最常见的优化就是把循环unroll/pipeline。还有的是Array_partition,摆脱BRAM只有双端口的限制。