Angenommen, es gibt einen 1-Bit-Datenausgangsport und einen 1-Bit-dataValid-Ausgangsport für ein Modul. Ist es in Ordnung, der Datenausgabe 1'dx zuzuweisen, wenn dataValid 0 zugewiesen wird? Wird dies zu Syntheseproblemen führen?
BEARBEITEN: X-Optimierungen scheinen sowohl in Synopsys DC als auch in Cadence RC zu erfolgen. Betrachten Sie diesen Code (a und b sind 1-Bit-Eingänge und c ist ein 1-Bit-Ausgang).
always_comb
if ( !a && !b ) c= 0;
else if ( a && !b ) c = 1;
else if ( !a && b ) c = 1;
else c = 1'dx; // Don't care about this value.
ergibt ein ODER-Gatter, das eine optimierte Lösung im Gegensatz zu einem XOR ist, das gefolgert worden wäre, wenn c auf 1'd0 gesetzt worden wäre. Dies ist ein einfaches Beispiel, aber es scheint zu beweisen, dass Synthesewerkzeuge eine X-Optimierung durchführen. Sind X-Zuweisungen in Anbetracht der fiesen X-Propagationsfehler und Verifizierungsprobleme den eingesparten Bereich wert?
Weisen Sie niemals ein X in einem erreichbaren Codepfad zu, verwenden Sie X nur zum Propagieren von Simulationsunbekannten. Das wird das Leben auf Dauer etwas einfacher machen. Wenn Sie die don-t-care-Logik optimieren möchten, tun Sie dies explizit (und wählen Sie den optimalen Wert für den unbenutzten Zustand). Auf diese Weise erhalten Sie häufiger (hoffentlich immer) ein konsistentes Verhalten.
Eine solche Zuordnung ist während der Simulation nützlich, um die Wellenform-Plots etwas klarer zu machen.
Die meisten Synthesewerkzeuge ignorieren einfach jede Zuweisung an x
. YMMV.
Die Zuweisung zu einem externen Pin kann verwendet werden, um einen Tristate-Treiber zu bezeichnen, aber die meisten FPGAs unterstützen internez
Tristate-Busse , wenn überhaupt, nur eingeschränkt .
Die Tool-Unterstützung für 'x
as don't care scheint ziemlich gut zu sein. DC unterstützt es ebenso wie Intel FPGA (Altera) und Xilinx-Tools.
Ich finde es generell eine gute Idee. In der Regel und für Ihr Beispiel 'x
sollte die Weitergabe in der Simulation nicht stattfinden, da sich andere Logik nicht darum kümmern sollte, was der Wert von c
unter den Bedingungen ist, die schreiben 'x
. (Ansonsten ist es nicht "egal", oder?) Tatsächlich kann die Verwendung von 'x, wenn Sie glauben, dass der Wert keine Rolle spielt, beim Identifizieren von Fehlern helfen.
Es gibt jedoch Fälle, in denen es zu Problemen kommen kann. Beispielsweise verwenden serielle Transceiver-Protokolle häufig selbstsynchronisierende Scrambler, die in der Simulation zusammenbrechen würden, wenn einige der Bits in den Eingangsdaten sind 'x
, selbst wenn es Ihnen egal ist, wie diese Bits im Empfänger enden, selbst wenn es so ist funktioniert gut in der Hardware.
Es gibt nichts als X für die Synthese. Es wird hauptsächlich für die Simulation verwendet, um Probleme im Zusammenhang mit Datenleitungen zu erfassen.
Tom Tischler
else if ( !a && b ) c = 0;
, würde dies wahrscheinlich dazu führen, dass Siec
0 sind, wenna
undb
1 sind