Я пытаюсь реализовать небольшой строчный буфер в 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 [2], прежде чем он будет прочитан в temp_buffer [0]?
always @(posedge TD_CLK27)
begin
temp_buffer[0] <= temp_buffer[1];
temp_buffer[1] <= temp_buffer[2];
temp_buffer[2] <= temp_pixel;
end
Будут ли оба блока работать одинаково, или это обязательно должно блокировать операторы присваивания и почему?