agentee

Simulation

Simulation logique

Simuler les parties numériques d'un schéma directement depuis sa liste de connexions : modèles série 74, stimulation, assertions, vérifications de setup et hold, et sortie VCD.

Une simulation logique exécute les parties numériques d'un schéma directement depuis sa liste de nets. Aucun routage n'est nécessaire, elle convient donc tôt dans une conception : vérifier qu'un compteur compte, qu'un décodeur décode et qu'un bus à collecteur ouvert accuse réception, avant que rien ne soit placé.

Démarrer une

agentee new sim counter --kind logic

Le point de départ a une horloge, une remise à zéro et une assertion horlogée à renommer pour vos nets. L'exemple logique contient deux exemples terminés. Voici counter, un 74HC161 qui compte une horloge de 10 MHz vers un 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

L'exécution écrit un résultat et une forme d'onde VCD à côté de la spécification, que tout visualiseur de formes d'onde ouvre.

Formes d'onde de la simulation du compteur

Stimulus

  • Un clock est bas jusqu'à phase, puis haut pendant duty de chaque period.
  • steps sont des paires [time, level] dans l'ordre du temps, avec les niveaux 0, 1, "x" et "z".
  • constant maintient un net à un niveau.

Un stimulus pilote son net comme un conducteur fort ; sur un net d'alimentation, il remplace le rail.

Assertions

  • at lit un net ou un bus une fois que tout à ce temps s'est stabilisé.
  • Une sequence lit les nets juste avant chaque front net d'une horloge, de sorte qu'une sortie enregistrée est vue telle qu'elle était quand le front est arrivé. from saute les fronts avant elle.
  • Une valeur de bus est un nombre ou une chaîne de 0, 1, x, z et - pour n'importe quoi, MSB d'abord.

La vérification liste chaque assertion échouée, contention ou violation de temporisation comme une erreur sur la simulation, tant que le résultat est à jour.

Ce qui devient une cellule

  • Les nets d'alimentation et les symboles d'alimentation sont des sources constantes : les noms GND, VSS, VEE et 0V sont 0, tout autre est 1.
  • Les résistances de 0 ohm, les ponts et les liaisons de nets rejoignent leurs nets. Une résistance d'un rail à un net est une résistance de tirage haut ou bas, un conducteur faible.
  • Les condensateurs, inductances, diodes, LED, points de test, cristaux et similaires sont exclus.
  • Les composants dont la valeur ou le nom du symbole contient un numéro de la série 74 reçoivent un modèle intégré par numéro de broche : 74HC00, SN74LVC1G08DBVR et CD74HCT04E correspondent tous. La bibliothèque couvre les portes courantes, les bascules, les latches, les tampons, le décodeur 138, les compteurs 161 et 163, les registres à décalage 164 et 595 et les composants LVC à porte unique ou double. Les composants à collecteur ouvert tirent vers le bas ou relâchent.
  • Un composant dont la valeur ou le symbole est un nom de primitive (NAND, DFF, MUX2, ...) mappe ses broches par nom.
  • Tout autre composant est une erreur qui le nomme, sauf s'il est dans ignore ou s'il a un modèle [[parts]].

Les lettres de famille définissent les temporisations : HC a un délai de 10 ns et une setup de 15 ns, LVC 4 ns et 3 ns, LS 15 ns et 20 ns, avec recovery et removal issus des fiches techniques de TI et Nexperia. La référence logique contient le tableau complet et ses sources.

Vos propres modèles

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

Un composant reçoit une primitive avec ses broches mappées, un brochage de bibliothèque emprunté avec primitive = "74HC244", ou une table de vérité dont la première ligne correspondante l'emporte.

Violations de temporisation

Les bascules, compteurs et registres à décalage vérifient la setup et la hold sur leurs entrées horlogées, et la recovery et la removal sur leurs réinitialisations asynchrones. En cas de violation, la cellule passe à x, comme dans les modèles Verilog, jusqu'à ce qu'elle soit horlogée ou réinitialisée proprement à nouveau. on_violation = "keep" signale la violation et conserve la valeur échantillonnée à la place.

Le moteur maintient quatre niveaux, 0, 1, x et z. Des conducteurs forts qui ne s'accordent pas donnent x et une contention ; les pulls ne comptent que si aucun conducteur fort n'est actif. Une porte passe à x seulement si l'entrée inconnue a de l'importance, donc 0 dans une AND reste 0.

Dans une interface

Une simulation logique peut servir de mesure d'une interface, qui échoue alors à la vérification tant que la simulation présente un échec :

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

Améliorer ce guide · Markdown pour agents