如何将输入从verilog中的wire存储到reg?

如何将输入从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此时在模拟中可能尚未设置为任何特定

我正在尝试将名为“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
此时在模拟中可能尚未设置为任何特定值


在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