【发布时间】:2014-04-13 21:29:25
【问题描述】:
我正在尝试在 Verilog 中实现一个小行缓冲区。我从一端放入数据并从另一端读取数据。
wire [29:0] temp_pixel;
reg [29:0] temp_buffer[2:0];
我可以使用像这样的阻塞赋值语句,它应该可以按预期工作。
always @(posedge TD_CLK27)
begin
temp_buffer[0] = temp_buffer[1];
temp_buffer[1] = temp_buffer[2];
temp_buffer[2] = temp_pixel;
end
但是,我可以使用非阻塞语句(如下所示)并仍然得到预期的结果吗?或者 temp_buffer[1] 在被读取到 temp_buffer[0] 之前会被 temp_buffer[2] 覆盖吗?
always @(posedge TD_CLK27)
begin
temp_buffer[0] <= temp_buffer[1];
temp_buffer[1] <= temp_buffer[2];
temp_buffer[2] <= temp_pixel;
end
这两个块的工作方式是否相同,还是必须强制阻塞赋值语句,为什么?
【问题讨论】:
-
这些例子都没有创建缓冲区。第一个创建 1 个触发器,第二个创建 3 个触发器。
-
@N8TRO 你能解释一下它是如何创建一个触发器的吗?