当前位置:   article > 正文

Xilinx RTL编码指南(一)

rtl编码


该一系列为学习ug949-vivado-design-methodology.pdf的记录,该文档包含了对Xilinx器件最佳实践的方法学。

控制信号与控制集

​ 控制集指用于驱动任何给定 SRL、 LUTRAM 或寄存器的控制信号组 (置位/复位、时钟使能和时钟)。对任意控制信号的独特组合,都能构成独立控制集。背后的原因是一个重要的概念,即在 7 系列 slice 中的寄存器都共享相同的控制信号,因此只有使用相同控制集的寄存器才能打包到同一个 slice 中。不同slice可以有不同的控制信号。例如,如果具有给定控制集的寄存器仅具有一个寄存器作为加载,则被占据的片中的其他七个寄存器将不可用。(在wp 405-7 series FPGAS The Logical Advantage里面说明了确实是这样)

​ 同时拥有多个独立控制集的设计会造成大量资源浪费和布局选项数量减少,导致功耗上升,性能下降。从布局的角度而言,拥有较少数量控制集的设计能提供更多选项和更高灵活性,一般也能产生更加理想的结果。在 UltraScale™ 器件中,在 CLB 内部能灵活地实现控制集的映射。未驱动的复位不形成控制集的一部分,因为是在片内局部生成的。然而,限制独立控制集数目是为一组逻辑布局提供最大灵活性的一个好方法。

Reset

复位是需要在设计中考虑和设限的更常见也更重要的控制信号之一。复位会给用户设计的性能、占位面积和功耗产生显著影响。

经引用得到的同步代码会产生下列资源:

  • LUT
  • 寄存器
  • 移位寄存器 LUT(SRL)
  • 块存储器或 LUT 存储器
  • DSP48 寄存器

复位的选择和使用会影响上述组件的选择,导致给定设计中资源利用率下降。如果在阵列上误置复位,会产生截然不同的结果,可能是推断出一个块 RAM,也可能是推断出数千个寄存器。在乘法器输入或输出处描述异步复位,可能造成寄存器布置在 slice 上而非 DSP 块上。在此类情况以及在其它情况下,会给资源数量造成影响。总体功耗和性能也会受到显著影响。在大多数情况下,这会影响性能。它还对器件利用率和功耗有负面影响。

使用复位的时间和位置

赛灵思器件提供专用的全局置位/复位信号 (GSR)。在器件配置结束时,该信号将器件配置中所有顺序单元的初始值。如果未指定初始状态,则为顺序原语分配默认值。在大多数情况下,默认值为零。 FDSE 和 FDPE 原语是例外,默认为逻辑 1。每个寄存器在配置结束时将处于已知状态。因此没有必要单独为初始化加电器件编写全局复位代码。赛灵思强烈建议用户仔细判断设计何时需要复位,何时不需要复位。大多数情况下,在控制路径逻辑上可能需要复位以确保正常运行。然而在数据路径逻辑上通常不需要复位。限制复位使用的方法如下:

  • 限制复位网络的总体扇出。

  • 减少复位路由所需的互联数量。

  • 简化复位路径的时序。

  • 从而在许多情况下能够从整体上提升性能、缩小占位面积和降低功耗。

使用功能仿真应能够轻松地判断是否需要复位。对没有编码复位功能的逻辑,在选择用于映射逻辑的 FPGA 资源方面具有更高的灵活性。综合工具随后能为该代码选择最优资源,为了实现可能的最佳结果,应考虑到以下因素,如:

  • 要求的功能
  • 性能要求
  • 可用器件资源
  • 功耗

同步复位与异步复位

如果需要复位,赛灵思建议代码同步复位。与异步复位相比,同步复位拥有众多优势。

  • 同步复位可以直接映射到 FPGA 器件架构中的更多资源元件。

  • 异步复位还会影响通用逻辑结构的性能。由于所有赛灵思 FPGA 通用寄存器都能置位/复位为异步或同步,通常认为使用异步复位不会造成时间延迟。这种假设往往是不对的。使用全局异步复位时,虽然控制集的数量不会增多,但由于需要把这个复位信号路由到所有的寄存器元件,时序复杂性会增大。

  • 在使用异步复位时,务必记住同步异步复位的取消断言。

  • 在需要较大密度或精细化布局的情况下,同步复位能够更加灵活地实现控制集的重新映射。如果在布局更加理想的 slice 中发现有不兼容的复位,可以把同步复位重新映射到该寄存器的数据路径中。这样可以在需要时缩小走线宽度,提升密度,从而实现良好的适配和更加优异的性能。

  • 异步复位可能需要多周期激活,以确保电路正确复位且稳定。如果正确地被时序约束了,同步复位则不包含此要求。

  • 在复位激活过程中,若异步复位有更高概率发生块 RAM、 LUTRAM、以及 SRL 存储内容翻转时,可以使用同步复位。

  • DSP48 和块 RAM 等部分资源只为块中的寄存器元件提供同步复位。当需要在这些元件相关的寄存器元件上使用异步复位时,不能将这些寄存器直接推断到这些块中,否则会造成功能异常

复位编码实例 1:乘法器与异步复位

异步复位

module test(
input clk,
input rst,
input [15:0] a,
input [15:0] b,
output  [31:0]  dout
    );
    reg [15:0] a1,a2,b1,b2;
    reg [31:0] dout_reg;
    always @(posedge clk,posedge rst) begin
        if(rst)begin
            a1<=0;
            a2<=0;
            b1<=0;
            b2<=0;
            dout_reg &l
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/807911
推荐阅读
相关标签
  

闽ICP备14008679号