在循环体中构成或忽略

时间:2019-06-28 15:49:16

标签: verilog

我有以下Verilog代码。我找不到答案,在循环中间或在posedge之后使用a <= x;b<=ri有什么作用。我认为always begin总是被执行,然后函数将在posedge clk上(在integer d行之后)被阻塞。当clock上升时,将执行下一行(即r <= 0)。

如果这是真的,那么下一个posedge clk(在<= x ; b <= ric = ri之后)将在相同的时钟边沿执行,或者需要另一个时钟边沿,使用的原因是什么? posedge是在代码中间,而不是在代码开头?

always
begin :two
   real c;
   integer d;
   @(posedge clk)
      r <= 0;
   if (k) 
   begin
      a <= x; b <= ri;
      @(posedge clk);
      begin :loop
      forever
      begin
         c = ri;
         @(posedge clk);
         d = $rtoi(c*4);
         if (abs(b-c) > abs(a-b)) disable loop;
         r <= $rtoi(j*4);
      end
   end 
   d = 3*d; k <= 1’b0; r <= d + 1;
end

1 个答案:

答案 0 :(得分:2)

  

然后将在同一时钟沿执行下一个posege clk(在<= x; b <= ri和c = ri之后)

否,每个@(posedge clk);将阻止执行,直到看到上升沿为止,此后它将继续。

  

在代码中间而不是开始使用posege的原因是什么?

我不知道为什么这样编写代码,因为我必须知道(或猜测)作者试图解决的问题。

如上所述:a @(posedge clk);将阻止执行直到看到上升沿。因此,您应该将代码阅读为特定的事件序列:

  1. 等待时钟上升沿,然后将r设置为零。

  2. if k设置ab,然后再次等待时钟上升沿。

  3. 设置c(出于某种原因,这是一个阻塞分配),然后再次等待时钟上升沿。