Altifigence Academy

25 / 63 · Práctica

Práctica: prueba exhaustiva del MUX y análisis de la salida registrada

Aplique las mismas entradas a los caminos combinacional y registrado y verifique con la tabla de verdad y los instantes de captura.

Circuito y condiciones de observación

Con sel=0, y recibe a; con sel=1, recibe b. sampled_y almacena y en el flanco ascendenteFlanco ascendente Instante en que el reloj pasa de 0 a 1. Se distingue del nivel alto, que abarca todo el intervalo con CLK=1. Más información y se conserva hasta el siguiente aunque cambien las entradas.

Antes de empezar

Prepare un proyecto Desktop de Digital Design Studio y los permisos necesarios para ejecutarlo. Guarde cada ejemplo como rtl/top.sv en una carpeta independiente.

Primero haga que a y b difieran. Compruebe que sel=0 selecciona a y sel=1 selecciona b y contraste cada fila del archivo de entradas.

Cambie directamente el camino seleccionado

y = sel ? b : a

Código SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic a,
    input logic b,
    input logic sel,
    output logic y,
    output logic sampled_y
);
    assign y = sel ? b : a;
    // Explicit observation register: y remains purely combinational.
    // The register makes this design eligible for logic-netlist-1 simulation.
    always_ff @(posedge clk) sampled_y <= y;
endmodule

Ejecución

En New analysis, seleccione Two-state single-clock v1. Configure Clock port como clk y el periodo como 1000ps. Con los valores siguientes, ejecute Preflight y después Run RTL simulation; compare los resultados.

ConfiguraciónValor
Valores iniciales de registros, desde el LSB[false]
Reset portVacío
Maximum cycles / time8 / 8000ps

Cada columna representa una entrada del archivo siguiente. La y combinacional esperada es 0,0,0,1,1,0,1,1. La figura predice la función en orden de entradas; no muestra cuándo se actualiza sampled_y.

Las ocho combinaciones del JSON de entrada
Ver los datos de la forma de onda
Datos de la forma de onda: cada carácter es un intervalo; un punto conserva el estado anterior; p representa un ciclo de reloj.
SeñalForma de ondaValores del bus
a0...1...
b0.1.0.1.
sel01010101
y esperado0..1.01.

Estímulos de entrada

json
[
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        false
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        false
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        true
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        true
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        false
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        false
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        true
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        true
      ],
      "sel": [
        true
      ]
    }
  }
]

Comparación de resultados

8 cycles · y=1 · sampled_y=1. Compruebe que a 3000ps y=1 y sampled_y=0.

Esta práctica usa RTL 0/1 de un solo reloj, sin bancos de pruebas con #delay, initial o X/Z. Marcar la lección como completada es un registro de aprendizaje, no un resultado real de simulación.

Escriba primero los resultados esperados

Antes de ejecutar, calcule y para la secuencia dada: 0,0,0,1,1,0,1,10,0,0,1,1,0,1,1. Se comprueban las ocho combinaciones posibles, una evidencia más fuerte que acertar solo el valor final.

La salida del registroRegistro Circuito que almacena varios bits de estado. Los registros síncronos de este curso capturan la entrada especificada en el flanco de reloj. Más información cambia en el flanco ascendente, no al aplicar un estímulo. Anote por separado y justo antes del flanco y la salida registrada justo después.

qk+1=sk‾ak+skbkq_{k+1}=\overline{s_k}a_k+s_kb_k

Las entradas capturadas en k definen el estado posterior qk+1q_{k+1}, llamado sampled_y. Aunque compartan coordenada temporal, compruebe el orden de aplicación de entradas y actualización del registro.

Tres comprobaciones para distinguir los fallos

  1. Selección invertida: antes de cambiar a sel ? a : b, prediga el primer vector que falla. Los vectores con a=ba=b no detectan el error.
  2. Confusión del punto de observación: explique por qué comparar inmediatamente sampled_y, en lugar de y, con la referencia combinacional puede hacer fallar un circuito correcto.
  3. Conservación frente a entradas no seleccionadas: cambie solo la entrada no elegida y compruebe que y se conserva. Si cambia la elegida, y debe seguirla.

Registre para cada fallo entrada, instante, valor esperado y valor real. «La onda es extraña» no permite distinguir un error de selección de una latencia de un ciclo.

Ampliación

Con datos de cuatro bits, el espacio combinacional es 24+4+1=5122^{4+4+1}=512. Sigue siendo viable probarlo todo, pero use primero 0, máximo, 0101, 1010 y patrones walking-one para revelar errores de posición. Actualice también configuración y archivo de entradas para el nuevo ancho.

Inténtalo tú

Después de capturar a=0,b=1,s=0a=0,b=1,s=0 en un flanco ascendente, cambia solo ss a 1 antes del siguiente. Calcule yy tras el retardo lógico y sampled_y antes y después del próximo flanco.

Leer la explicación

La salida combinacional es y=1y=1. sampled_y conserva 0 hasta el próximo flanco ascendente y allí captura 1. Se supone que las entradas permanecen estables el tiempo requerido para la captura.

Lesson files

mux-top.sv ↓mux-inputs.json ↓

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.