Menu
Coddy logo textTech

Puertos de lectura registrados

Parte de la sección Diseño y verificación RTL del Journey de Verilog de Coddy. Lección 23 de 38.

Una lectura registrada captura datos de memoria en un flanco de reloj y mantiene ese valor después. Una habilitación de lectura puede preservar la salida anterior en ciclos deshabilitados. Restablecer el registro de lectura no requiere borrar cada palabra de memoria. Con asignaciones de lectura y escritura no bloqueantes, la expresión de lectura ve la palabra previa al flanco.

Fragmento relevante; las declaraciones y conexiones circundantes se proporcionan en el desafío.

always @(posedge clk) begin
    if(we) mem[waddr] <= data;
    if(rst) q <= 0;
    else if(re) q <= mem[raddr];
end

El registro de salida se actualiza únicamente en el flanco especificado y en la ruta habilitada.

Latencia de lectura de documentos, comportamiento de lectura deshabilitada y qué restablecimiento de estado realmente borra.

challenge icon

Desafío

Intermedio

Implementa una memoria de cuatro palabras de 8 bits con escritura síncrona y lectura registrada q. we escribe en los flancos ascendentes. rst borra síncronamente solo q; de lo contrario, re carga q desde mem[raddr] antes del flanco; re=0 mantiene q. La memoria no se reinicia y las escrituras son independientes de rst. Si la lectura y la escritura comparten una dirección en un flanco, q recibe la palabra antigua. Las pruebas inicializan las palabras antes de las lecturas habilitadas. Columnas de salida: q. Todos los controles y datos permanecen estables antes de cada flanco ascendente del reloj; los resultados se observan después.

Completa design.v y conserva los nombres de sus módulos y puertos. El testbench.v bloqueado proporciona los cambios de entrada e imprime las salidas después de que se estabilizan. Elige un escenario mediante un argumento del simulador como +CASE=1; no se requiere entrada estándar. No añadas impresiones, retardos ni terminación de la simulación al diseño. La salida esperada es una fila de valores decimales por observación, separados por un espacio y terminada con un salto de línea.

Pruébalo tú mismo

module dut (input clk, input rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
    // Reemplaza este marcador de posición con tu diseño.
    initial q = 0;
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Diseño y verificación RTL

Practica por tu cuenta: Compilador de Verilog online