Register type variable gives error : unknown type
Register type variable gives error : unknown type
我正在制作一个 1 位上升沿 Dflipflop。只有当时钟信号出现上升沿时,才应分配所有输出。
Q与D相同,Qbar是D的否定
当我用 Qbar 作为电线尝试这个时,它以某种方式工作。
assign Qbar = ~Q;
在 always 块之外。但是下面的原始代码给出了 "Syntax error near =" 和 "Qbar is an unknown type"
的错误
我试过让Qbar赋值成为非阻塞类型,但是没有效果。
module DFlipFlop(
input D,
input clk,
output reg Qbar,
output reg Q
);
//assign Qbar = ~D;
always @(posedge clk)
Q = D;
Qbar = ~D;
endmodule
我在这里错过了什么?我是 verilog 的新手。
您的错误消息是由于以下事实引起的:在 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
我正在制作一个 1 位上升沿 Dflipflop。只有当时钟信号出现上升沿时,才应分配所有输出。 Q与D相同,Qbar是D的否定
当我用 Qbar 作为电线尝试这个时,它以某种方式工作。
assign Qbar = ~Q;
在 always 块之外。但是下面的原始代码给出了 "Syntax error near =" 和 "Qbar is an unknown type"
的错误我试过让Qbar赋值成为非阻塞类型,但是没有效果。
module DFlipFlop(
input D,
input clk,
output reg Qbar,
output reg Q
);
//assign Qbar = ~D;
always @(posedge clk)
Q = D;
Qbar = ~D;
endmodule
我在这里错过了什么?我是 verilog 的新手。
您的错误消息是由于以下事实引起的:在 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