0
module subtractor(out,x,y);
output [31:0]out;
input [31:0]x,y;
wire c_out,c_dummy;
wire [31:0]sum1,sum2,sum3,y_c;
reg c_in;
ones_complement oc0(y_c,y);
thirtytwo_bit_fa thirtytwo_fa0(c_out,sum1,c_in,x,y_c);
thirtytwo_bit_fa thirtytwo_fa1(c_dummy,sum2,c_in,sum1,c_out);
thirtytwo_bit_fa thirtytwo_fa2(c_dummy,sum3,c_in,sum2,{32{~c_out}});
initial
begin
#1 c_in=0;
$display("%b",c_out);
end
assign out=c_out?sum1:-sum1;
endmodule
所以我写了这个简单的32位减法器模块..问题是,c_out的输出总是变成'x',因此整个输出是'xxxxxxxx ...'。我究竟做错了什么?注意:所有模块单独工作得很好......就像补码和全加器一样......工作正常。Verilog Uknowns
如果知道'thirtytwo_bit_fa'正在工作,那么我的猜测是'$ display'即将发布。在它之前添加一个'#1'或将其改为'$ strobe',并告诉我们是否改变了任何内容。 – Greg
你怎么知道单独的模块正在工作。这是一个奇怪的模型。没有时钟也没有重置。所有的值都由verilog初始化为'x',所以你的模块不会更新它。无论如何,这是什么? – Serge
在开始时默认情况下,所有的值都是'x'。你可以使用'bit'数据类型,在开始时使它成为'0'。但理想情况下,不应该使用,并且您应该有一些重置条件来启动您的系统。 –