agentee

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 logic

El 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 = 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

La ejecución escribe un resultado y una forma de onda VCD junto a la especificación, que cualquier visor de formas de onda abre.

Waveforms of the counter simulation

Estímulo

  • Un clock está bajo hasta phase, luego alto durante duty de cada period.
  • steps son pares [time, level] en orden temporal, con niveles 0, 1, "x" y "z".
  • constant mantiene 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

  • at lee una red o un bus una vez que todo en ese tiempo se ha asentado.
  • Una sequence lee las redes justo antes de cada flanco limpio de un reloj, así que una salida registrada se ve como estaba cuando llegó el flanco. from omite los flancos anteriores a él.
  • Un valor de bus es un número o una cadena de 0, 1, x, z y - 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, VEE y 0V son 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, SN74LVC1G08DBVR y CD74HCT04E coinciden 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 ignore o 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"

Mejorar esta guía · Markdown para agentes