【发布时间】:2015-07-19 11:19:49
【问题描述】:
我在理解这样一个看起来很简单的事情时遇到了问题:阻塞和非阻塞分配。
我创建了一个小型测试台来模拟这段代码的行为:
module ATest(clk, out);
input wire clk;
output reg [7:0] out;
reg [7:0] A;
initial begin
A <= 8'b0;
end
always @(posedge clk) begin
A = A + 1;
out = A;
end
endmodule
模拟后得到了这个波:
我希望A 和out 下的值相同,因为我按顺序为它们分配了值。为什么out 在第一个时钟“不在乎”?
然后我尝试使用非阻塞赋值。我将部分代码更改为:
always @(posedge clk) begin
A <= A + 1;
out <= A;
end
我得到了这一波:
我没想到这里有什么,因为非阻塞语句对我来说有点神秘。为什么A 和out 都设置为“不关心”?
另外,我在我访问的每个页面上都发现了不同的名称,所以请帮助我: 阻塞和非阻塞可以与顺序和并发互换吗?哪个是正确的:非阻塞语句还是并发语句?
【问题讨论】:
标签: verilog simulation assign