【发布时间】:2020-05-14 09:50:22
【问题描述】:
我被这段代码卡住了。我不明白为什么我的VALUE 不能倒置。
module PREDIV(
input wire QUARTZ,
output wire VALUE);
always @ (posedge QUARTZ)
assign VALUE= ~VALUE;
endmodule
【问题讨论】:
标签: verilog
我被这段代码卡住了。我不明白为什么我的VALUE 不能倒置。
module PREDIV(
input wire QUARTZ,
output wire VALUE);
always @ (posedge QUARTZ)
assign VALUE= ~VALUE;
endmodule
【问题讨论】:
标签: verilog
有一些问题。
您不应在 always 块内使用 assign 关键字。
在进行程序分配时(在always 块内),您应该将信号声明为reg 类型,而不是wire。这就是您的错误消息所指的内容。
对于顺序逻辑,您应该使用非阻塞赋值:<=。
最后,reg 被初始化为未知 (X)。您需要一种方法来初始化VALUE,否则它将保持X。一种方法是添加RESET 信号。
module PREDIV(
input wire QUARTZ, input RESET,
output reg VALUE);
always @ (posedge QUARTZ or posedge RESET)
if (RESET) begin
VALUE <= 0;
end else begin
VALUE <= ~VALUE;
end
endmodule
【讨论】:
看起来代码在always 块中使用了阻塞赋值。
always 块应该只使用非阻塞分配。
代码应该是这样的:
always @(posedge QUARTS)
Value <= ~Value;
【讨论】: