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 logicDe 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 = 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 2usDe run schrijft een resultaat en een VCD golfvorm naast de spec, die elke golfvorm viewer opent.

Stimulus
- Een
clockis laag totphase, dan hoog voordutyvan elkeperiod. stepszijn[time, level]paren in tijdsvolgorde, met niveaus 0, 1,"x"en"z".constanthoudt een net op één niveau.
Een stimulus stuurt zijn net als een sterke driver; op een voeding net vervangt hij de rail.
Asserties
atleest een net of bus zodra alles op dat moment is gestabiliseerd.- Een
sequenceleest de nets net vóór elke schone rand van een klok, zodat een geregistreerde output wordt gezien zoals hij was toen de rand kwam.fromslaat de randen ervoor over. - Een bus waarde is een getal of een tekenreeks van
0,1,x,zen-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,VEEen0Vnamen 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,SN74LVC1G08DBVRenCD74HCT04Ekomen 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
ignorestaat 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"