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
Also schrieb ich diese einfache 32-Bit-Subtrahierer module..The Problem ist, dass der Ausgang des C_OUT immer ‚x‘ zu sein, erweist sich und damit die gesamte outputis ‚xxxxxxxx ...‘ .. Was mache ich falsch? Hinweis: Alle Module funktionieren einwandfrei, genau wie die Ergänzung und die Volladdierer ... funktioniert gut.Verilog Uknowns
wenn 'thirtytwo_bit_fa' bekannt ist, funktioniert dann meine Vermutung ist' $ display' wird zu bald ausgegeben. Fügen Sie eine '# 1 'davor hinzu oder ändern Sie sie in' $ strobe' und lassen Sie uns wissen, ob das irgendetwas geändert hat. – Greg
woher wissen Sie, dass separate Module funktionierten. Dies ist ein seltsames Modell alle zusammen. Es gibt weder Uhr noch Reset. Alle Werte werden von Verilog auf "x" initialisiert, sodass Ihr Modul sie nicht aktualisiert. Was ist es auf jeden Fall? – Serge
Alle Werte werden beim Start standardmäßig "x" sein. Sie können den "Bit" -Datentyp verwenden, um ihn beim Start "0" zu machen. Aber im Idealfall sollte das nicht verwendet werden, und Sie sollten eine Reset-Bedingung haben, um Ihr System zu starten. –