Altifigence Academy

40 / 63 · Práctica

Práctica: verifique el movimiento serie y el orden de bits

Use referencias binarias y enteras para verificar dirección, descarte de bits y latencia tras reset.

Circuito y condiciones de observación

En cada 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, los dos bits inferiores de la q anterior avanzan a la izquierda y din entra en el bit 0. Introduzca 1,0,1,1 y compare el movimiento.

Antes de empezar

Prepare un proyecto Desktop de Digital Design Studio con permisos de ejecución. Guarde cada ejemplo como rtl/top.sv en una carpeta independiente.

Código SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic rst,
    input logic din,
    output logic [2:0] q
);
    // Old q[1:0] and din are captured together at each rising edge.
    always_ff @(posedge clk)
        if (rst) q <= 3'b000;
        else q <= {q[1:0], din};
endmodule

Ejecución

En New analysis, seleccione Two-state single-clock v1. Configure Clock port=clk y periodo=1000ps. Ejecute Preflight y Run RTL simulation con estos valores y compare resultados.

ConfiguraciónValor
Valores iniciales de registros, desde el LSB[false,false,false]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Estímulos de entrada

json
[
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  }
]

Cada columna registra un flanco, con entradas anteriores y estados «después» posteriores a actualizarse. La alineación ordena muestras, no representa propagación físicaRetardo de propagación Tiempo desde un cambio de entrada hasta que la salida se estabiliza en el valor correcto. La equivalencia lógica y el comportamiento temporal son propiedades distintas. Más información. La primera columna es resetReset Control que devuelve el estado a un valor inicial especificado. Deben definirse su carácter síncrono o asíncrono y su prioridad frente a otros controles. Más información; su din=0 no cuenta como dato almacenado. Compare las cuatro entradas siguientes con el orden del JSON.

Estímulos y movimiento del estado de tres bits
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
flanco23452E0 → E1 → E2 → E3 → E4
reset10...
din0101.
q después23452000 → 001 → 010 → 101 → 011

Comparación de resultados

5 cycles · q=011. En flancos sucesivos: 000 → 001 → 010 → 101 → 011.

Se usa RTL 0/1 de un solo reloj, sin bancos #delay, initial o X/Z. Completar la lección registra aprendizaje, no un resultado real de simulación.

Compruebe la concatenación con una referencia independiente

Copiar la misma concatenaciónConcatenación Operación que une secuencias de bits una junto a otra. El ancho resultante es la suma de sus anchos; no es una suma numérica. Más información del RTL en la respuesta esperada puede duplicar el error. Use un modelo entero unsignedunsigned Interpretación de una secuencia de bits como entero no negativo. Con n bits, el rango es de 0 a 2^n−1; puede diferir de la interpretación signed de los mismos bits. Más información:

Qk+1=(2Qk+dk) mod 8Q_{k+1}=(2Q_k+d_k)\bmod 8

Tras reset, 1,0,1,1 produce 0→1→2→5→30\to1\to2\to5\to3. En binario de tres bits debe coincidir con la onda. En el último paso, 2⋅5+1=112\cdot5+1=11 y conservar los tres bits bajos deja 3.

Bits recibidosEntradaq después del flancoEntero
0Reset0000
110011
200102
311015
410113

Con reset=0 y enable=1, seleccione din=1,0,1,1 y avance un flanco para cada valor: q será 001,010,101,011. Prediga con el control paso a paso y después compare con RTL real. Enable permite probar también la parada de la ampliación siguiente.

Prediga el orden de bits antes de ejecutar RTL

El reset síncrono tiene prioridad sobre enable. Con enable=0, se conserva el valor almacenado. q=000; q_next = (2q + din) mod 8

Siga un bit para verificar la dirección

Después de reset, introduzca un 1 y tres ceros: 001 → 010 → 100 → 000. El primer 1 debe pasar por los bits 0,1,2 y salir. Usar solo patrones de todo ceros o todo unos puede ocultar la dirección incorrecta.

Si la primera captura ocurre en k, ese bit llega al bit 2 tras el flanco k+2 de un 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 de tres etapas. Contar desde el flanco de lanzamiento de un registro externo cambia el origen. Indique siempre origen y destino en el informe.

Ampliación: desplace solo entradas válidas

Añadir valid y conservar q con valid=0 difiere de un pipeline que desplaza cada ciclo junto con un bit valid independiente. El primero avanza por datos recibidos; el segundo, por ciclos de reloj. No verifique ambos con la misma secuencia de estados esperados.

Inténtalo tú

Tras reset, los bits válidos son 1,0,1. Hay un ciclo valid=0 antes y otro después del segundo bit; en ellos q se conserva. Explique la q final y cuándo llega el primer 1 al bit 2.

Leer la explicación

Solo tres entradas válidas cambian el estado: q final es 101. El primer 1 llega al bit 2 en el flanco que almacena la tercera entrada válida. Requiere dos desplazamientos adicionales tras la primera captura; las dos pausas prolongan el tiempo real.

Lesson files

shift-top.sv ↓shift-inputs.json ↓

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