Menu
Coddy logo textTech

Almacenamiento en matriz de registros

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

Un array desempaquetado puede modelar palabras de almacenamiento de hardware. Una escritura sincronizada actualiza una palabra seleccionada; una lectura continua selecciona una palabra sin un reloj de lectura. La síntesis puede implementar arrays pequeños con registros o inferir recursos de memoria para patrones compatibles. Nunca supongas que una palabra no escrita comienza en cero.

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

reg [7:0] mem [0:3];
always @(posedge clk)
    if(we) mem[waddr] <= data;
assign q = mem[raddr];

La escritura se activa por flanco, mientras que la lectura sigue la palabra almacenada seleccionada.

Define explícitamente la habilitación de escritura y la temporización de lectura; no dependas del contenido de memoria initial no especificado.

challenge icon

Desafío

Intermedio

Implementa cuatro palabras de 8 bits. En un flanco ascendente, we escribe datos en mem[waddr]. q es una lectura combinacional asíncrona de mem[raddr]. La memoria no tiene reinicio ni contenido initial; el banco de pruebas escribe en cada dirección observada antes de leerla. Las observaciones ocurren después del flanco, por lo que una escritura en la misma dirección es visible en q. 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 sus nombres de módulo 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 we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
    // Reemplaza este marcador de posición con tu diseño.
    assign 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