如何在verilog中将输入从电线存储到reg中?
How to store input into reg from wire in verilog?
我正在尝试将名为 'in' 的电线的值存储到寄存器 'a' 中。
但是,问题是 reg 'a' 的值在模拟器中显示为 'xxxx'。但是,电线 'in' 的值显示正确。
我的目标只是从输入线读取值并将其存储到寄存器中。
module test(
input [3:0] in,
output [3:0] out
);
reg [3:0] a;
initial
begin
a = in;
end
endmodule
之所以a
的值在模拟中是'xxxx',大概是因为a
只设置了一次in
的值最初,并且a
此时可能尚未在模拟中设置为任何特定值。
在Verilog中声明一个reg
并不一定意味着代码描述了一个硬件寄存器。这通常涉及使用时钟信号:
module test(
input clk,
input [3:0] in,
output [3:0] out
);
// this describes a register with input "in" and output "a"
reg [3:0] a;
always @(posedge clk) begin
a <= in;
end
// I assume you want "a" to be the output of the module
assign out = a;
endmodule
这是一个反例,其中 reg
用于描述不是寄存器的东西,而只是简单的连线:
module not_a_register(
input in,
output out
);
reg a;
always @(in) begin
a <= in;
end
assign out = a;
endmodule
另请注意,我在 always
块内使用了非阻塞赋值运算符 <=
,这在描述同步逻辑时是个好习惯。您可以阅读更多相关信息 here。
我正在尝试将名为 'in' 的电线的值存储到寄存器 'a' 中。 但是,问题是 reg 'a' 的值在模拟器中显示为 'xxxx'。但是,电线 'in' 的值显示正确。 我的目标只是从输入线读取值并将其存储到寄存器中。
module test(
input [3:0] in,
output [3:0] out
);
reg [3:0] a;
initial
begin
a = in;
end
endmodule
之所以a
的值在模拟中是'xxxx',大概是因为a
只设置了一次in
的值最初,并且a
此时可能尚未在模拟中设置为任何特定值。
在Verilog中声明一个reg
并不一定意味着代码描述了一个硬件寄存器。这通常涉及使用时钟信号:
module test(
input clk,
input [3:0] in,
output [3:0] out
);
// this describes a register with input "in" and output "a"
reg [3:0] a;
always @(posedge clk) begin
a <= in;
end
// I assume you want "a" to be the output of the module
assign out = a;
endmodule
这是一个反例,其中 reg
用于描述不是寄存器的东西,而只是简单的连线:
module not_a_register(
input in,
output out
);
reg a;
always @(in) begin
a <= in;
end
assign out = a;
endmodule
另请注意,我在 always
块内使用了非阻塞赋值运算符 <=
,这在描述同步逻辑时是个好习惯。您可以阅读更多相关信息 here。