Verilog. Блокирующее и неблокирующее присваивание
ru_radio_electr — 23.02.2017 Здравствуйте.В верилоге есть блокирующее и неблокирующее присваивание, ок. Неблокирующее это например вот так
always @(posedge clk) begin
x <= x + 1;
y <= x + 1;
end
здесь по следующему фронту тактового импульса в x занесется текущее значение x + 1 и в y занесется текущее значение x + 1.
То есть если x был равен 0 и то по началу следующего такта x будет 1. Пока всё ок. Все идет параллельно и независимо друг от друга.
Взяли значение с выхода регистра (q), добавили единичку, подали на вход регистра(d) дрыгнули клоком. y по началу следующего такта станет 1, ибо будет использовать значение x на начало текущего такта. ok.
Блокирующее это так
always @(posedge clk) begin
x = x + 1;
y = x + 1;
end
Здесь тоже вроде всё понятно. Здесь если x было ноль по началу этого такта то по началу следующего такта оно станет 1, а y по началу следующего такта станет 2, ибо компилер развернет всю цепочку выражений с x до выражения с y в одно выражение и подставит её в выражение для y. ok, понятно.
А вот непонятно что получится из
always @(posedge clk) begin
x <= x + 1;
x <= x + 1;
end
В этом случае, в случае x исходного равного нолю на следующем такте x будет (дважды?, параллельно?) присвоено 1, или x станет 2?
и
always @(posedge clk) begin
x = x + 1;
x = x + 1;
end
В этом случае, в случае x исходного равного нолю на следующем такте x станет 2?
Заранее спасибо
|
</> |