文章 ID: 000074260 内容类型: 故障排除 上次审核日期: 2021 年 08 月 28 日

为什么我的Nios II C-to-Hardware (C2H) 编译器在源代码包含可变移运算符时生成加速器故障时序?

环境

  • 英特尔® Nios® II 处理器
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    设计不符合时间的一个可能原因是它与其他组合逻辑在系列中包含一个或多个桶形移位器。每当移位操作员使用可变的岪档时,例如:"a = b << c;"Nios® II C2H 生成桶形逻辑。C2H 生成的桶形逻辑实现了大量组合多路复用器,这些多路复用器会显著影响设计的计时。 以下两个示例显示可能导致桶形变换导致时序下降的源代码。


    组合移输入:

    以下是将输入到桶移位器的组合移入桶移位器可能导致时序下降的示例。

    int a, b, c, d, result, shift_distance;
    result = (a b c d) >> shift_distance;

    附加结果被用作移位操作员的移位符,因此在其中一个添加输入和"结果"之间创建一条较长的时序路径。为了增加管道的量,为添加结果分配一个临时变量,如下所示:

    int a, b, c, d, addition_result, shift_distance;
    addition_result = a b c d;
    result = addition_result >> shift_distance;


    组合移输出:

    以下是桶移器的组合移输出的一个示例,该输出可能导致时序下降。

    int a, b, c, d, result, shift_distance;
    result = (a >> shift_distance) b c d;

    移位结果被用作附加操作员的并行,因此在"a"和"结果"之间创建一条较长的时序路径。为了增加管道的量,将移位结果分配为以下所示的变量:

    int a, b, c, d, result, shift_result, shift_distance;
    shift_result = a >> shift_distance;
    result = shift_result b c d;

    相关产品

    本文适用于 1 产品

    英特尔® 可编程设备

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。