Ich habe ein einfaches 8-Bit-Paritätsprüfmodul, um die Ergebnisse zu überprüfen und Merker zu setzen.Der Verilog-Modulausgang ist X, auch wenn ihm ein Wert zugewiesen wurde
Der Ausgang dieses Moduls ist immer X, und ich kann nicht für das Leben von mir herauszufinden, warum. Hier ist der Code:
module parity8 (p, low8);
output p;
input [7:0] low8;
wire [3:0] pchka;
wire [1:0] pchkb;
wire parity_bar;
xor2$ xora0 (pchka[0], low8[0], low8[1]),
xora1 (pchka[1], low8[2], low8[3]),
xora2 (pchka[2], low8[4], low8[5]),
xora3 (pchka[3], low8[6], low8[7]),
xorb0 (pchkb[0], pchka[0], pchka[1]),
xorb1 (pchkb[1], pchka[2], pchka[3]),
xorp (parity_bar, pchkb[0], pchkb[1]);
inv1$ pinv (p, parity_bar);
endmodule
parity_bar immer den richtigen Wert hat, und ich versuchte, einen anderen Draht ptest machen, die p in der letzten Zeile ersetzt. Ptest hatte den richtigen Wert, also versuchte ich hinzufügen:
assign p = ptest;
Doch der Ausgang des Moduls noch wurde X. Auch versucht die Zuordnung p = 1'b1; und es hat sich nicht geändert. Hoffentlich ist das nicht etwas Offensichtliches, danke für deine Hilfe.
Klingt, als ob ein anderer Treiber auf 'p' ist, entweder von einem anderen Modul oder definiert als 'reg' in der Testbank. Ausgänge von Untermodulen sollten mit Leitungstypen verbunden sein und keine anderen Treiber haben. – Greg
Das könnte es sein. In dem Modul, das parity8 aufruft, war ich mir nicht sicher, wie ich meinen Flagvektor am besten auf 0 initialisieren könnte (sehr neu für Verilog), also tat ich: assign flags = 32'b0; Der Grund, warum ich dachte, dies sei kein Problem, ist, dass es andere Module gibt, die ähnliche Aufgaben ausführen, um ein Flag zu berechnen und ein anderes Bit zu steuern. Sie funktionieren gut. Wie auch immer, ich werde den Fahrer zu diesem Teil herausnehmen und Sie wissen lassen, ob es funktioniert. Danke – Xionraseri
Können Sie auch den Testbench-Code hinzufügen? –