Simulieren
Logiksimulation
Die digitalen Teile eines Schaltplans direkt aus seiner Netliste simulieren: 74er-Serie-Modelle, Stimulation, Assertions, Setup- und Hold-Prüfungen und eine VCD-Ausgabe.
Eine Logiksimulation führt die digitalen Teile eines Schaltplans direkt aus seiner Netlist aus. Kein Layout ist nötig, daher passt sie früh in einen Entwurf: Prüfe, dass ein Zähler zählt, ein Dekoder dekodiert und ein Open-Drain-Bus bestätigt, bevor etwas platziert ist.
Eine starten
agentee new sim counter --kind logicDer Starter hat einen Takt, einen Reset und eine getaktete Assertion, die du auf deine Netze umbenennen kannst. Das Logikbeispiel enthält zwei fertige. Das ist counter, ein 74HC161, der einen 10-MHz-Takt in einen 74HC138 zählt:
name = "counter"
kind = "logic"
schematic = "counter"
duration = "2us"
ignore = ["J1", "J2"]
record = ["CLK", "RST_N", "Q3", "Q2", "Q1", "Q0", "TC"]
[[stimulus]]
net = "CLK"
clock = { period = "100ns", duty = 0.5, phase = "50ns" }
[[stimulus]]
net = "RST_N"
steps = [["0ns", 0], ["120ns", 1]]
[[expect]]
nets = ["Q3", "Q2", "Q1", "Q0"]
clock = "CLK"
edge = "rising"
sequence = [0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2]
[[expect]]
nets = ["Y7_N", "Y6_N", "Y5_N", "Y4_N", "Y3_N", "Y2_N", "Y1_N", "Y0_N"]
at = "600ns"
value = "11011111"
[[expect]]
net = "TC"
at = "1600ns"
value = 1agentee sim counter
agentee show sim:counter
agentee render sim:counter -o counter.pngassertions passed 6 of 6
assertions failed 0
contention 0 strong drivers disagreeing
timing violations 0 setup, hold, recovery, removal
cells 5 18 nets
events 130 to 2usDer Lauf schreibt ein Ergebnis und eine VCD-Wellenform neben die Spezifikation, die jeder Wellenform-Viewer öffnet.

Stimulus
- Ein
clockist niedrig bisphase, dann hoch fürdutyvon jedemperiod. stepssind[time, level]-Paare in Zeitreihenfolge, mit Stufen 0, 1,"x"und"z".constanthält ein Netz auf einer Stufe.
Ein Stimulus treibt sein Netz als starker Treiber; auf einem Versorgungsznetz ersetzt er die Schiene.
Assertions
atliest ein Netz oder einen Bus, wenn alles zu dieser Zeit abgeklungen ist.- Eine
sequenceliest die Netze kurz vor jeder sauberen Flanke eines Takts, sodass ein registrierter Ausgang so gesehen wird, wie er war, als die Flanke kam.fromüberspringt die Flanken davor. - Ein Buswert ist eine Zahl oder eine Zeichenkette aus
0,1,x,zund-für beliebig, MSB zuerst.
Die Prüfung listet jede fehlgeschlagene Assertion, jeden Konflikt oder jeden Zeitverstoß als Fehler auf der Simulation, solange das Ergebnis aktuell ist.
Was zu einer Zelle wird
- Versorgungsnetze und Versorgungssymbole sind konstante Quellen:
GND,VSS,VEEund0V-Namen sind 0, jeder andere ist 1. - 0-Ohm-Widerstände, Jumper und Netzverbindungen verbinden ihre Netze. Ein Widerstand von einer Schiene zu einem Netz ist ein Pull-up oder Pull-down, ein schwacher Treiber.
- Kondensatoren, Induktivitäten, Dioden, LEDs, Testpunkte, Quarze und dergleichen werden nicht berücksichtigt.
- Bauteile, deren Wert oder Symbolname eine 74er-Seriennummer enthält, erhalten ein eingebautes Modell nach Pinnummer:
74HC00,SN74LVC1G08DBVRundCD74HCT04Epassen alle. Die Bibliothek deckt die üblichen Gatter, Flipflops, Latches, Puffer, den 138er-Decoder, die 161er- und 163er-Zähler, die 164er- und 595er-Schieberegister sowie die LVC-Bauteile mit einem und zwei Gattern ab. Die Open-Drain-Bauteile ziehen auf Masse oder geben den Ausgang frei. - Ein Bauteil, dessen Wert oder Symbol ein Primitivname ist (
NAND,DFF,MUX2, ...), weist seine Pins nach Name zu. - Jedes andere Bauteil ist ein Fehler, der es benennt, es sei denn, es steht in
ignoreoder hat ein[[parts]]-Modell.
Die Familienbuchstaben legen die Timing-Werte fest: HC hat 10 ns Verzögerung und 15 ns Setup, LVC 4 ns und 3 ns, LS 15 ns und 20 ns, mit Recovery und Removal aus den Datenblättern von TI und Nexperia. Die Logik-Referenz enthält die vollständige Tabelle und ihre Quellen.
Eigene Modelle
[[parts]]
ref = "U7"
primitive = "nand"
pins = { A = "1", B = "2", Y = "3" }
delay = "3ns"
[[parts]]
ref = "U9"
inputs = ["1", "2", "3"]
outputs = ["4"]
truth = ["000 1", "1-- 0", "01- z"]Ein Bauteil erhält ein Primitiv mit zugewiesenen Pins, eine Bibliotheks-Pinbelegung, die mit primitive = "74HC244" übernommen wird, oder eine Wahrheitstabelle, bei der die erste passende Zeile gewinnt.
Timing-Verletzungen
Flipflops, Zähler und Schieberegister prüfen Setup und Hold an ihren getakteten Eingängen sowie Recovery und Removal an ihren asynchronen Resets. Bei einer Verletzung geht die Zelle auf x, wie es Verilog-Modelle tun, bis sie wieder sauber getaktet oder zurückgesetzt wird. on_violation = "keep" meldet die Verletzung und behält den abgetasteten Wert bei.
Die Engine hält vier Pegel: 0, 1, x und z. Starke Treiber, die sich widersprechen, ergeben x und einen Konflikt; Pulls zählen nur, wenn kein starker Treiber aktiv ist. Ein Gatter geht nur auf x, wenn der unbekannte Eingang relevant ist, also bleibt 0 in einem UND weiterhin 0.
In einem Interface
Eine Logiksimulation kann eine Messgröße eines Interfaces sein, die dann während der Simulation bei einem Fehler die Prüfung scheitern lässt:
[[interfaces.measure]]
sim = "i2c-bus"