【发布时间】:2019-02-05 14:04:03
【问题描述】:
我一直认为,对于非阻塞语句,它们都并行出现在 always 块的末尾。
但是考虑一下我发现的这个例子:
https://www.nandland.com/articles/blocking-nonblocking-verilog.html
always @(posedge i_clock)
begin
r_Test_1 <= 1'b1;
r_Test_2 <= r_Test_1;
r_Test_3 <= r_Test_2;
end
上面写着“上面的 Verilog 代码中的 always 块使用非阻塞分配,这意味着值 1 从 r_Test_1 传播到 r_Test_3 需要 3 个时钟周期。”
这没有任何意义。如果值传播需要 3 个时钟周期,那么它肯定也是串联发生的,而不是并行发生的?
【问题讨论】:
-
好的。我只是不明白为什么每个语句都需要一个时钟周期才能运行,即使我们没有指定延迟。我的意思是,这一切不应该在最后同时发生吗? r_test_3 取 r_test_2 的值,r_test_2 取 r_test_1,r_test_1 取 1'b1。所有这些都需要一个时钟周期。
-
哦。我现在明白了。它需要一个时钟周期才能传播一次,因此需要 3 个时钟周期才能到达终点。
标签: verilog