循环体中的 posedge 或 negedge
posedge or negedge in the body of the loop
我有以下verilog代码。我找不到答案在循环中间或之后使用 posedge
的效果是什么 a <= x;b<=ri
。我认为 always begin
总是被执行,之后该函数将在 posedge clk
(在 integer d
行之后)被阻止。当clock
上升时,下一行将被执行。(即r <= 0
)。
如果为真,那么下一个 posedge clk
(在 <= x ; b <= ri
和 c = 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
then the next posedge clk (after <= x ; b <= ri and c = ri) will be executed on the same clock edge
不,每个@(posedge clk);
都会阻塞执行,直到看到上升沿,然后会继续执行。
what is the reason of using posedge in the middle of code instead of in beginning?
我不知道为什么这样写代码,因为我必须知道(或猜测)作者试图解决哪个问题。
如上所述:a@(posedge clk);
会阻塞执行,直到看到上升沿。因此,您应该将代码阅读为特定的事件序列:
等待时钟上升沿,然后将 r
设置为零。
if k
设置 a
、b
并再次等待时钟上升沿。
设置c
(出于某种原因,这是一个阻塞分配)并再次等待时钟上升沿。
等等
我有以下verilog代码。我找不到答案在循环中间或之后使用 posedge
的效果是什么 a <= x;b<=ri
。我认为 always begin
总是被执行,之后该函数将在 posedge clk
(在 integer d
行之后)被阻止。当clock
上升时,下一行将被执行。(即r <= 0
)。
如果为真,那么下一个 posedge clk
(在 <= x ; b <= ri
和 c = 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
then the next posedge clk (after <= x ; b <= ri and c = ri) will be executed on the same clock edge
不,每个@(posedge clk);
都会阻塞执行,直到看到上升沿,然后会继续执行。
what is the reason of using posedge in the middle of code instead of in beginning?
我不知道为什么这样写代码,因为我必须知道(或猜测)作者试图解决哪个问题。
如上所述:a@(posedge clk);
会阻塞执行,直到看到上升沿。因此,您应该将代码阅读为特定的事件序列:
等待时钟上升沿,然后将
r
设置为零。if k
设置a
、b
并再次等待时钟上升沿。设置
c
(出于某种原因,这是一个阻塞分配)并再次等待时钟上升沿。等等