Ich modelliere digitale Schaltungen mit ICs in einer Software. Ich habe mit Flip-Flops und Theken gearbeitet, aber ich erinnere mich nicht gut daran. Wie modelliere ich einen undefinierten oder anfänglichen Wert von Flip-Flops (SR oder JK usw.)? Ich habe drei Möglichkeiten
Betrachten Sie auch ein JK-Flip-Flop, wenn die Benutzereingabe '0' und '0' ist, ist die Ausgabe 'Q' und 'Q bar'. Welchen Wert vergebe ich in diesem Fall? '0' & '1'? Dies ist der Ausgangsfall, dh die Schaltung wurde hergestellt und die Konsole gerade eingeschaltet.
Bitte teilen Sie Ihre Erfahrungen mit.
Bei manchen Arten von Simulationen gilt: Je mehr Staaten, desto besser. Wenn Sie nur eine synchrone Einzeltaktlogik verwenden, würde ich drei Zustände vorschlagen (hoch / niedrig / undefiniert), aber die Logik des JK-Flipflops erweitern, um die vollständige Berechnung des nächsten Werts einzuschließen. Wenn man zum Beispiel eine Schaltung hat, in der sowohl die J- als auch die K-Eingänge mit dem UND des Ausgangs und einem RESET-Signal verbunden sind, sollte man anwenden, output := (J & !output) | (!K & output)
damit sich der frühere Term aufhebt und übrig bleibt output := !RESET & output
, dessen Wert wohldefiniert wäre wenn reset hoch ist, auch wenn output
es undefiniert ist.
Wenn Sie versuchen, eine zeitkontinuierliche Simulation durchzuführen, werden viel mehr Zustände erforderlich, einschließlich "steigend", "fallend", "stabil unbekannt", "instabil unbekannt" usw. mit einigen komplizierten Wahrheitstabellen, die von den vorherigen Zuständen abhängen der Eingänge sowie die aktuellen Zustände (z. B. 'steigend:hoch & steigend:hoch == steigend', aber 'steigend:hoch & hoch:fallend' == 'instabil unbekannt'), da das erste Signal dies möglicherweise getan hat oder nicht schnell genug hoch geworden, um einen hohen Impuls am Ausgang zu erzeugen.
Es gibt im Allgemeinen zwei Ansätze, die Simulatoren für so etwas verwenden können:
1) Zuweisung oder Unterstützung bei der Zuweisung eines Anfangszustands
2) Simulieren Sie mit 3 (oder mehr) Zustandslogik, von denen eine "undefiniert" ist - und lassen Sie die undefinierte Eingabe durch alle abhängigen Logiken ausbreiten, die undefinierte Ausgaben erzeugen. Dies ist ein recht üblicher Ansatz - bauen Sie eine Zustandsmaschine in Verilog, geben Sie eine Anweisung ein, damit der Simulator die Zustandsvariable druckt, und sehen Sie, dass "x" angezeigt wird, bis alles definiert ist, was in diesen Wert einfließt. (Im Falle Ihres Q und /Q wären beide undefiniert)
Ich würde mit dem Raise einen Fehler machen und die Simulation verweigern.
Einen schwebenden Eingang zu haben ist nie eine gute Idee.
Vinayak Garg
Superkatze
Superkatze