如何将输入从verilog中的wire存储到reg?
我正在尝试将名为“in”的导线中的值存储到注册表“a”中。 但是,问题是注册表'a'的值在模拟器中显示'xxxx'。但是,导线“in”的值显示正确。 我的目标只是从输入线读取值并将其存储到寄存器中如何将输入从verilog中的wire存储到reg?,verilog,fpga,hdl,Verilog,Fpga,Hdl,我正在尝试将名为“in”的导线中的值存储到注册表“a”中。 但是,问题是注册表'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最初仅一次设置为中的值,而a此时在模拟中可能尚未设置为任何特定
module test(
input [3:0] in,
output [3:0] out
);
reg [3:0] a;
initial
begin
a = in;
end
endmodule
模拟中
a
的值为“xxxx”的原因可能是a
最初仅一次设置为中的值,而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
还请注意,我使用了非阻塞分配运算符您是否故意不将a
连接到out
?为什么要使用Reg?从您的逻辑看来,您希望将输入复制到reg,因此无论何时输入更改,reg都应该更改(您的逻辑),所以为什么不使用导线?
module not_a_register(
input in,
output out
);
reg a;
always @(in) begin
a <= in;
end
assign out = a;
endmodule