agentee

Simuleren

Logica-simulatie

Simuleer de digitale onderdelen van een schema rechtstreeks uit de netlist: 74-serie modellen, stimulus, assertions, setup en hold controles, en een VCD-uitvoer.

Een logicsim draait de digitale delen van een schema rechtstreeks uit zijn netlist. Geen layout nodig, dus het past vroeg in een ontwerp: controleer dat een teller telt, een decoder decodeert en een open-drain bus bevestigt, voordat er iets is geplaatst.

Start er één

agentee new sim counter --kind logic

De starter heeft een klok, een reset en een geklokte assertie om te hernoemen naar jouw nets. Het logica voorbeeld bevat twee afgeronde. Dit is counter, een 74HC161 die een 10 MHz klok telt naar een 74HC138:

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

De run schrijft een resultaat en een VCD golfvorm naast de spec, die elke golfvorm viewer opent.

Golfvormen van de teller simulatie

Stimulus

  • Een clock is laag tot phase, dan hoog voor duty van elke period.
  • steps zijn [time, level] paren in tijdsvolgorde, met niveaus 0, 1, "x" en "z".
  • constant houdt een net op één niveau.

Een stimulus stuurt zijn net als een sterke driver; op een voeding net vervangt hij de rail.

Asserties

  • at leest een net of bus zodra alles op dat moment is gestabiliseerd.
  • Een sequence leest de nets net vóór elke schone rand van een klok, zodat een geregistreerde output wordt gezien zoals hij was toen de rand kwam. from slaat de randen ervoor over.
  • Een bus waarde is een getal of een tekenreeks van 0, 1, x, z en - voor willekeurig, MSB eerst.

De controle noemt elke mislukte assertie, contentie of timingovertreding als een fout op de simulatie, zolang het resultaat actueel is.

Wat een cel wordt

  • Voeding nets en voeding symbolen zijn constante bronnen: GND, VSS, VEE en 0V namen zijn 0, elke andere is 1.
  • 0 ohm weerstanden, jumpers en net ties voegen hun nets samen. Een weerstand van een rail naar een net is een pull-up of pull-down, een zwakke driver.
  • Condensatoren, spoelen, diodes, LED's, testpunten, kristallen en dergelijke worden niet meegenomen.
  • Onderdelen waarvan de waarde of de symboolnaam een 74-serienummer bevat, krijgen een ingebouwd model op pinnummer: 74HC00, SN74LVC1G08DBVR en CD74HCT04E komen allemaal overeen. De bibliotheek dekt de gangbare poorten, flip-flops, latches, buffers, de 138-decoder, de 161- en 163-tellers, de 164- en 595-verschuifregisters en de LVC-onderdelen met één of twee poorten. De open-drain-onderdelen trekken laag of laten los.
  • Een onderdeel waarvan de waarde of het symbool een primitieve naam is (NAND, DFF, MUX2, ...), koppelt zijn pinnen op naam.
  • Elk ander onderdeel is een fout met die naam, tenzij het in ignore staat of een [[parts]]-model heeft.

De familietekens bepalen de timing: HC is 10 ns vertraging en 15 ns setup, LVC 4 ns en 3 ns, LS 15 ns en 20 ns, met recovery en removal uit de datasheets van TI en Nexperia. De logica-referentie bevat de volledige tabel en de bronnen.

Eigene modellen

[[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"]

Een onderdeel krijgt een primitieve met gekoppelde pinnen, een pinconfiguratie uit de bibliotheek met primitive = "74HC244", of een waarheidstabel waarbij de eerste overeenkomende rij wint.

Timingovertredingen

Flip-flops, tellers en verschuifregisters controleren setup en hold op hun geklokte ingangen, en recovery en removal op hun asynchrone resets. Bij een overtreding gaat de cel naar x, zoals Verilog-modellen doen, tot hij weer netjes wordt geklokt of gereset. on_violation = "keep" rapporteert de overtreding en behoudt in plaats daarvan de bemonsterde waarde.

De engine gebruikt vier niveaus: 0, 1, x en z. Sterke drivers die het niet eens zijn, geven x en een conflict; pulls tellen alleen als er geen sterke driver aan staat. Een poort gaat alleen naar x als de onbekende ingang ertoe doet, dus 0 naar een AND is nog steeds 0.

In een interface

Een logicsimulatie kan een meting van een interface zijn, die dan de controle laat falen zolang de simulatie een fout heeft:

[[interfaces.measure]]
sim = "i2c-bus"

Verbeter deze handleiding · Markdown voor agents