agentee

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 logic

Der 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 = 1
agentee sim counter
agentee show sim:counter
agentee render sim:counter -o counter.png
assertions 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 2us

Der Lauf schreibt ein Ergebnis und eine VCD-Wellenform neben die Spezifikation, die jeder Wellenform-Viewer öffnet.

Waveforms of the counter simulation

Stimulus

  • Ein clock ist niedrig bis phase, dann hoch für duty von jedem period.
  • steps sind [time, level]-Paare in Zeitreihenfolge, mit Stufen 0, 1, "x" und "z".
  • constant hält ein Netz auf einer Stufe.

Ein Stimulus treibt sein Netz als starker Treiber; auf einem Versorgungsznetz ersetzt er die Schiene.

Assertions

  • at liest ein Netz oder einen Bus, wenn alles zu dieser Zeit abgeklungen ist.
  • Eine sequence liest 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, z und - 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, VEE und 0V-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, SN74LVC1G08DBVR und CD74HCT04E passen 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 ignore oder 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"

Diese Anleitung verbessern · Markdown für Agenten