Ваше сообщение об ошибке вызвано тем, что в Verilog, если у вас есть более одного оператора в блоке Always (и в других местах тоже), он должен быть заключен в конструкцию begin
- end
.Итак, вам нужно это:
module DFlipFlop(
input D,
input clk,
output reg Qbar,
output reg Q
);
always @(posedge clk) begin
Q = D;
Qbar = ~D;
end
endmodule
Однако это не очень хорошее решение, потому что
i) (если вы не знаете, что делаете) всегда используют неблокирующие назначениядля переменных, которые должны стать триггерами после синтеза и
ii) использование операторов wire
и assign
, вероятно, в любом случае является лучшим решением, поскольку (по крайней мере, изначально), если вы присваиваете две отдельные переменныев синхронизированном блоке always
ваш синтезатор выводит два триггера - один для Q
и один для Qbar
.
Это лучшее решение:
module DFlipFlop(
input D,
input clk,
output Qbar,
output reg Q
);
always @(posedge clk)
Q <= D;
assign Qbar = ~Q;
endmodule