C语言 vivado hls和vivado的资源利用表现不同

dfty9e19  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(371)

我在vivado HLS中实现了这个循环计算。

For (i = 0; i < 59; i++){
#pragma HLS unroll
    tmp = C[i];
    For (j = 0; j < 3; j++){
#pragma HLS unroll
         tmp = tmp + A[j][i] * B[j];
     }
     C[i] = tmp;
}

DSP48E利用率结果为189。
我导出这个模块并在vivado中运行合成。
DSP48利用率结果为39。
我想知道为什么结果会有很大的不同?

toe95027

toe950271#

请记住,Vivado HLS(高级综合)将始终提供 * 估计 *。它永远不会提供 * 准确 * 的资源利用率,因为Vivado HLS中的编译器不执行place and route。而Vivado综合提供的是实际的资源利用率。
不过,话虽如此,您提到的DSP48差异量,这是一个相当大的差异,不应该 * 发生 *。以下是我的答案列表,供您解决这个问题:

  • 您应该考虑的第一件事是确保您使用的是最新版本。好的,如果不是最新版本,至少请确保Vivado HLS和Vivado版本相同。如果您使用的是不同版本,HLS估计值和Vivado Synthesis结果之间有时可能存在差异。
  • 确保选择了相同的底层FPGA硬件。
  • 您应该在启用Vivado合成的情况下运行Vivado HLS流程的导出步骤。这将在Vivado合成(而不是HLS合成)中合成Vivado HLS IP,然后返回实际使用的资源。请参阅本guide的第108页。您可以具体阅读不同的合成选项。
  • Vivado合成工具确实做了一些物理优化。例如,请检查您的Vivado中的opt_design优化。
nnsrf1az

nnsrf1az2#

  • Synthesis对优化资源使用的目标、策略和功能有详细的了解。
  • 综合可能决定是否可以将一些加法实现为LUT/逻辑结构,其中HLS做出某种假设,如每个加法一个DSP(或类似的东西)。
  • 合成下游未使用的总线的“逻辑调整”部分。检查合成结果,确保输出总线温度为预期宽度。
  • 使用Vivado RTL查看器(F4)打开综合设计,浏览网表并验证总线宽度是否符合预期。

相关问题