Menu
Coddy logo textTech

Reenvío de lectura-escritura

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

Una interfaz de memoria debe definir el comportamiento de lectura/escritura en la misma dirección. El reenvío selecciona explícitamente los datos de escritura entrantes en caso de colisión, lo que produce un comportamiento de datos nuevos. Sin ese bypass, la plantilla de lectura no bloqueante anterior captura los datos antiguos. Los modos de memoria de los dispositivos difieren, por lo que la semántica de la simulación por sí sola no garantiza una asignación específica a una primitiva.

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

if(re) begin
    if(we && waddr==raddr) q <= data;
    else q <= mem[raddr];
end

La derivación selecciona la palabra entrante solo para una colisión de direcciones real.

Define explícitamente el comportamiento ante colisiones y verifícalo con respecto al modo de memoria del hardware elegido.

challenge icon

Desafío

Intermedio

Implementa una memoria de cuatro palabras con lectura registrada y reenvío de datos nuevos. Las reglas de escritura y de reinicio/habilitación de lectura coinciden con las de la lección anterior. En una lectura habilitada que colisiona con una escritura habilitada en la misma dirección, q captura los datos entrantes en lugar de la palabra antigua. Para las demás lecturas, captura mem[raddr]. 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 impresión, 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