1

1)我了解在 ASIC 中使用重置从已知状态开始。喜欢

always @ (posedge clk or negedge reset)
begin 
if (reset)
//Initialize the signals
else 
//do something
end

但如果是这样的话,为什么我们不使用set信号并从不同的状态开始并最终结束电路应该做的事情?这看起来很愚蠢,但我很好奇,就是这样。我从来没有见过像这样的代码这个。

 always @ (posedge clk or negedge set)
    begin 
    if (set)
    //Initialize the signals
    else 
    //do something
    end

2)另外,我读到有必要使用条件if/else重置的语句对重置信号进行建模if。谁能给我一个例子,否则怎么做?

4

1 回答 1

1

您的问题中的示例有一个小错误,应该是:

always @ (posedge clk or negedge reset) begin 
  if (~reset) begin //<-- Reset when rest low
    //Initialize the signals
  end
  else begin 
    //do something
  end
end

negedge reset信号变低时将触发,因此您希望重置条件匹配。这是一个低电平有效复位。对于您想要的高电平有效复位(Reset when reset == 1):

always @ (posedge clk or posedge reset) begin //<--Posedge trigger reset
  if (reset) begin //<-- Reset when rest high
    //Initialize the signals
  end
  else begin 
    //do something
  end
end

重置条件不必为 0。它可以是任何东西,但它必须是已知的静态值。即NOTnext_statea+b。它连接触发器的复位引脚,这就是我们保持名称复位的原因。

ASIC 中首选低电平有效复位,因为没有电源时它处于复位状态。当芯片启动时,您通常会在时钟的位置同步释放复位。通常至少有 2 个姿势。这避免了少量时间的复位故障。

因为您希望在芯片上电时应用低电平有效复位,所以当上电时一切都处于已知状态,我们使用异步复位。使用同步重置,您不知道第一个状态是什么。需要清除数据的状态机和过滤器经常使用同步复位。异步复位用于上电复位 (POR) 以设置已知值。

使用该if (reset) else结构以便综合工具可以将其视为具有异步复位的触发器,尝试另一个结构可能会很好地模拟,甚至可能会合成(不正确),但您很容易会遇到硬件错误,而这些错误不会在模拟制作中显示调试非常困难。

您可能有兴趣阅读设置复位触发器 (SR Flip-Flop)。这只是一个没有切换功能的 JK。

可以使用以下暗示:

always @ (posedge clk or negedge reset or posedge set) begin 
  if (~reset) begin 
    //reset the signals
  end
  else if (set) begin
    //set the signals
  end
  else begin 
    //do something
  end
end
于 2013-04-14T15:41:41.670 回答