agentee

Symulowanie

Symulacja logiczna

Symulowanie części cyfrowych schematu bezpośrednio z jego listy połączeń: modele serii 74, stymulacja, asercje, sprawdzanie setup i hold oraz wyjście VCD.

Symulacja logiczna uruchamia części cyfrowe schematu bezpośrednio z jego listy sieci. Nie jest potrzebny layout, więc pasuje to na wczesnym etapie projektu: sprawdź, czy licznik liczy, dekoduje dekoduje, a magistrala z otwartym drenem potwierdza, zanim cokolwiek zostanie rozmieszczone.

Rozpocznij jedną

agentee new sim counter --kind logic

Starter ma zegar, reset i asercję sterowaną zegarem do przemianowania na twoje sieci. Przykład logiczny zawiera dwa gotowe. To jest counter, 74HC161 liczący zegar 10 MHz do 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

Uruchomienie zapisuje wynik i falogram VCD obok specyfikacji, który każdy podgląd falogramów otwiera.

Waveforms of the counter simulation

Stymulacja

  • clock jest niski do phase, a następnie wysoki przez duty każdego period.
  • steps to pary [time, level] w kolejności czasowej, z poziomami 0, 1, "x" i "z".
  • constant trzyma sieć na jednym poziomie.

Stymulacja steruje swoją siecią jako silny sterownik; na sieci zasilającej zastępuje szynę.

Asercje

  • at odczytuje sieć lub magistralę, gdy wszystko w tym czasie się ustabilizuje.
  • sequence odczytuje sieci tuż przed każdą czystą krawędzią zegara, więc wyjście zarejestrowane jest widziane tak, jak było, gdy krawędź przyszła. from pomija krawędzie przed nim.
  • Wartość magistrali to liczba lub ciąg 0, 1, x, z i - dla dowolnego, MSB na początku.

Sprawdzanie wypisuje każdą nieprzeszłą asercję, konflikt lub naruszenie czasu jako błąd symulacji, dopóki wynik jest aktualny.

Co staje się komórką

  • Sieci zasilające i symbole zasilania to stałe źródła: nazwy GND, VSS, VEE i 0V to 0, każda inna to 1.
  • Rezystory 0 omów, zwory i połączenia sieci łączą ich sieci. Rezystor od szyny do sieci to pull-up lub pull-down, słaby sterownik.
  • Kondensatory, cewności, diody, diody LED, punkty testowe, kryształy i podobne elementy są pomijane.
  • Elementy, których wartość lub nazwa symbolu zawiera numer z serii 74, otrzymują wbudowany model po numerze pinu: 74HC00, SN74LVC1G08DBVR i CD74HCT04E wszystkie się dopasowują. Biblioteka obejmuje popularne bramki, elementy bistabilne, blokadę, bufora, dekodery 138, liczniki 161 i 163, rejestry przesuwnikowe 164 i 595 oraz elementy LVC z pojedynczą i podwójną bramką. Elementy z otwartym drenem pociągają do masy lub zwalniają.
  • Element, którego wartość lub symbol to nazwa prymitywu (NAND, DFF, MUX2, ...), mapuje swoje piny po nazwie.
  • Każdy inny element to błąd z jego nazwą, chyba że znajduje się w ignore lub ma model [[parts]].

Litery rodziny określają parametry czasowe: HC to opóźnienie 10 ns i setup 15 ns, LVC to 4 ns i 3 ns, LS to 15 ns i 20 ns, z recovery i removal z arkuszy danych TI i Nexperia. Pełna tabela i jej źródła znajdują się w referencji logiki.

Własne modele

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

Element otrzymuje prymityw z zmapowanymi pinami, pinout biblioteki pożyczony przez primitive = "74HC244" lub tabelę prawdy, w której wygrywa pierwszy pasujący wiersz.

Naruszenia parametrów czasowych

Elementy bistabilne, liczniki i rejestry przesuwnikowe sprawdzają setup i hold na wejściach zegarowych oraz recovery i removal na asynchronicznych resetach. W przypadku naruszenia komórka przechodzi w stan x, tak jak w modelach Verilog, dopóki nie zostanie ponownie zegarowana lub zresetowana bezbłędnie. on_violation = "keep" zgłasza naruszenie i zachowuje próbkowaną wartość.

Silnik utrzymuje cztery poziomy: 0, 1, x i z. Silne sterowniki, które się nie zgadzają, dają x i konflikt; rezystory pociągające liczą się tylko wtedy, gdy żaden silny sterownik nie jest aktywny. Bramka przechodzi w stan x tylko wtedy, gdy nieznane wejście ma znaczenie, więc 0 na wejściu AND to nadal 0.

W interfejsie

Symulacja logiki może być miarą interfejsu, który wtedy nie przechodzi weryfikacji, gdy symulacja ma błąd:

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

Popraw ten przewodnik · Markdown dla agentów