【问题标题】:unnecessary register reset in FPGAFPGA中不必要的寄存器复位
【发布时间】:2020-04-23 04:16:15
【问题描述】:

假设我有一些不需要重置的内部寄存器,例如,如果我在使用它们之前将它们设置为状态 - 就像这里的缓冲区一样,我在重置时不给它任何值,并且当状态转换到 STATE_1(我需要缓冲区)我加载它:

always @(posedge clk or negedge reset_n) 
begin
   if(!reset_n) 
      state <= IDLE
   else begin
       case(state)
         IDLE: begin
             if(in1) begin
                buffer <= in2
                state <= STATE_1             
             end
         end
         STATE_1 :begin
             use buffer..
          end       
       endcase
   end
end

真的有必要在异步重置中包含缓冲区并在重置时为其赋值吗? 合成工具会做吗?这取决于什么?什么是好的做法? 因为直觉上这感觉更有效,因为综合不必找到将重置连接到缓冲区的方法。

【问题讨论】:

    标签: verilog fpga system-verilog


    【解决方案1】:

    不复位触发器是安全的。省略重置有​​很多好处:

    • 在 IC 中,这将导致触发器没有复位 合成的,这将比一个略小将重置。 在 FPGA 中可能不会出现这种情况,因为带有复位功能的触发器会 无论如何都要在场。 (然而,一些 FPGA 合成器可以制作触发器 没有LUT,这是否可能取决于 不管你有没有重置。)

    • 在 IC 或 FPGA 中,不会占用布线资源 将复位信号路由到您的触发器。

    但是,在 IC 中,某些设计流程可能会要求进行复位以用于制造测试。这在 FPGA 中不是问题。

    【讨论】:

      【解决方案2】:

      这取决于您如何使用buffer 信号。如果只在STATE_1中使用,不重置是安全的。 EDA 工具不应重置它,除非上电重置应将所有寄存器设置为已知状态。

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 2014-11-18
        • 2017-07-15
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多