2016-03-31 9 views
0

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.

+0

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

+0

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

+0

Können Sie auch den Testbench-Code hinzufügen? –

Antwort

0

Als Greg darauf hinwies, war das Problem, dass p ein Bit in einem Bitvektor antrieb, dem alle Nullen zugewiesen worden waren. Ich hatte dies abgewiesen, weil ich mehrere Module habe, die Bits auf demselben Bitvektor ansteuern. Ich nehme an, ein Problem tritt nur auf, wenn der Zuweisungswert und der vom Modul erzeugte Wert nicht gleich sind.

Verwandte Themen