FPGA中不必要的寄存器复位

unnecessary register reset in FPGA

假设我有一些不需要重置的内部寄存器,例如,如果我将它们设置为使用它们之前的状态——比如这里的缓冲区,我在重置时不给它任何值,当状态转换为 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

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

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

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

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

  • 不管是IC还是FPGA,都不会占用走线资源 将复位信号路由到触发器。

但是,在 IC 中,某些设计流程可能会出于制造测试目的强制执行重置。这在 FPGA 中不是问题。