Verilog Set在触发器中的使用

Verilog Set在触发器中的使用,verilog,flip-flop,Verilog,Flip Flop,1) 据我所知,ASIC中使用重置从已知状态开始。像 always @ (posedge clk or negedge reset) begin if (reset) //Initialize the signals else //do something end 但是如果是这样的话,为什么我们不使用设置信号,从一个不同的状态开始,最终得到电路应该做的事情呢?这看起来很愚蠢,但我很好奇 就是这样。我从未见过有人编写这样的代码 always @ (posedge clk or negedg

1) 据我所知,ASIC中使用重置从已知状态开始。像

always @ (posedge clk or negedge reset)
begin 
if (reset)
//Initialize the signals
else 
//do something
end
但是如果是这样的话,为什么我们不使用
设置
信号,从一个不同的状态开始,最终得到电路应该做的事情呢?这看起来很愚蠢,但我很好奇
就是这样。我从未见过有人编写这样的代码

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

2) 此外,我还了解到,有必要使用带有reset in
if
条件的
if/else
语句对复位信号进行建模。有人能给我举个例子说明如何做吗?

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

always @ (posedge clk or negedge reset) begin 
  if (~reset) begin //<-- Reset when rest low
    //Initialize the signals
  end
  else begin 
    //do something
  end
end
重置条件不必设置为0。它可以是任何东西,但必须是已知的静态值。ie不是
next_state
a+b
等。它连接到触发器的复位引脚,这就是我们保持名称复位的原因

有源低电平复位在ASIC中是首选的,因为当没有电源时,它处于复位状态。当芯片启动时,您通常会同步释放时钟边缘的复位。通常至少有两条边。这样可以避免在很短的时间内出现重置故障

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

使用了
if(reset)else
结构,因此合成工具可以将其重新转换为带异步重置的触发器,尝试另一种结构可能会模拟得很好,甚至可能会合成(错误),但很容易出现硬件错误,这些错误不会在模拟中显示,这使得调试非常困难

你可能有兴趣了解一下。这只是一个没有切换功能的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

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

always @ (posedge clk or negedge reset) begin 
  if (~reset) begin //<-- Reset when rest low
    //Initialize the signals
  end
  else begin 
    //do something
  end
end
重置条件不必设置为0。它可以是任何东西,但必须是已知的静态值。ie不是
next_state
a+b
等。它连接到触发器的复位引脚,这就是我们保持名称复位的原因

有源低电平复位在ASIC中是首选的,因为当没有电源时,它处于复位状态。当芯片启动时,您通常会同步释放时钟边缘的复位。通常至少有两条边。这样可以避免在很短的时间内出现重置故障

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

使用了
if(reset)else
结构,因此合成工具可以将其重新转换为带异步重置的触发器,尝试另一种结构可能会模拟得很好,甚至可能会合成(错误),但很容易出现硬件错误,这些错误不会在模拟中显示,这使得调试非常困难

你可能有兴趣了解一下。这只是一个没有切换功能的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