Simulación
Simulación lógica
Simula las partes digitales de un esquemático directamente desde su netlist: modelos de la serie 74, estímulos, aserciones, verificaciones de setup y hold, y una salida VCD.
Una simulación de lógica ejecuta las partes digitales de un esquemático directamente desde su lista de redes. No hace falta layout, así que encaja al principio del diseño: comprueba que un contador cuenta, que un decodificador decodifica y que un bus de drenador abierto reconoce, antes de colocar nada.
Empieza uno
agentee new sim counter --kind logicEl inicial tiene un reloj, un reset y una aserción con reloj para renombrar a tus redes. El ejemplo de lógica contiene dos terminados. Este es counter, un 74HC161 que cuenta un reloj de 10 MHz hacia 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 = 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 2usLa ejecución escribe un resultado y una forma de onda VCD junto a la especificación, que cualquier visor de formas de onda abre.

Estímulo
- Un
clockestá bajo hastaphase, luego alto durantedutyde cadaperiod. stepsson pares[time, level]en orden temporal, con niveles 0, 1,"x"y"z".constantmantiene una red en un nivel.
Un estímulo impulsa su red como un conductor fuerte; en una red de alimentación, reemplaza el riel.
Aserciones
atlee una red o un bus una vez que todo en ese tiempo se ha asentado.- Una
sequencelee las redes justo antes de cada flanco limpio de un reloj, así que una salida registrada se ve como estaba cuando llegó el flanco.fromomite los flancos anteriores a él. - Un valor de bus es un número o una cadena de
0,1,x,zy-para cualquiera, MSB primero.
La verificación enumera cada aserción fallida, contención o violación de temporización como un error en la simulación, mientras el resultado esté actualizado.
Lo que se convierte en una celda
- Las redes de alimentación y los símbolos de alimentación son fuentes constantes: los nombres
GND,VSS,VEEy0Vson 0, cualquier otro es 1. - Los resistores de 0 ohmios, los puentes y las uniones de redes unen sus redes. Un resistor desde un riel a una red es un pull-up o pull-down, un conductor débil.
- Los condensadores, inductores, diodos, LEDs, puntos de prueba, cristales y similares quedan excluidos.
- Las piezas cuyo valor o nombre de símbolo contiene un número de la serie 74 usan un modelo integrado por número de pin:
74HC00,SN74LVC1G08DBVRyCD74HCT04Ecoinciden todos. La biblioteca cubre las puertas comunes, los biestables, los bloqueos, los búferes, el decodificador 138, los contadores 161 y 163, los registros de desplazamiento 164 y 595 y las piezas LVC de puerta única y doble. Las piezas de colector abierto tiran a bajo o sueltan. - Una pieza cuyo valor o símbolo es un nombre de primitiva (
NAND,DFF,MUX2, ...) asigna sus pines por nombre. - Cualquier otra pieza es un error que la nombra, salvo que esté en
ignoreo tenga un modelo[[parts]].
Las letras de la familia fijan el temporizado: HC es 10 ns de retardo y 15 ns de establecimiento, LVC 4 ns y 3 ns, LS 15 ns y 20 ns, con recuperación y eliminación tomadas de las hojas de datos de TI y Nexperia. La referencia de lógica tiene la tabla completa y sus fuentes.
Modelos propios
[[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"]Una pieza recibe una primitiva con sus pines asignados, un pincel de biblioteca prestado con primitive = "74HC244", o una tabla de verdad cuya primera fila coincidente gana.
Violaciones de temporizado
Los biestables, contadores y registros de desplazamiento comprueban establecimiento y retención en sus entradas con reloj, y recuperación y eliminación en sus restablecimientos asíncronos. Ante una violación, la celda pasa a x, como hacen los modelos de Verilog, hasta que se reloje o se restablezca limpiamente de nuevo. on_violation = "keep" informa de la violación y conserva el valor muestreado.
El motor mantiene cuatro niveles: 0, 1, x y z. Los conductores fuertes que no coinciden dan x y una contención; las resistencias de arrastre solo cuentan cuando no hay ningún conductor fuerte activo. Una puerta pasa a x solo cuando la entrada desconocida importa, así que 0 en una AND sigue siendo 0.
En una interfaz
Una simulación de lógica puede ser una medida de una interfaz, que entonces falla la comprobación mientras la simulación tenga una falla:
[[interfaces.measure]]
sim = "i2c-bus"