此Verilog代码如何工作?在相同的always块语句中,它具有两个单独但相同的忽略条件

时间:2019-01-22 14:15:32

标签: verilog

我想知道这段代码是否完美。我想了解这两个忽略状态如何在Always块中工作。

#5 clk = ~clk;

always
begin
@(negedge clk) din = 1;
@(negedge clk) din = 0;
end ```


2 个答案:

答案 0 :(得分:0)

模拟将执行以下操作:

  1. 开始执行总是块执行
  2. 等待对clk的否定
  3. 将1分配给din
  4. 等待对clk的否定(下一个)
  5. 将0分配给din
  6. 重新开始执行always块,请转到步骤1。

因此,din的值将在clk的相邻点之间交替出现。

答案 1 :(得分:0)

@(expression)是一种等待表情状态更改的构造。 posedge限定从0到其他值的更改。

变化是一个事件,就像触发器或时间量一样。当更改发生时,您的代码必须等待表达式更改。因此,第二个@(posedge clk)等待 next 下一个clk姿势。

考虑此代码

always @(postage clk)
     begin 
        #11 din = in;
     end

此块总是在其他每一个posege上执行,因为posege事件在过程等待#11时间单位通过时发生。