Estoy tratando de modelar una memoria RAM de 0.125GB en Verilog usando ModelSim de 512 bit de ancho usando chips de memoria de 32 bit de ancho. Así que he creado un 32 * \ $ \ 2 ^ {18} \ $ matriz de memoria cuyo código es el siguiente:
//The 32x2**18 MEMORY CHIP
module mini_sub_chip (word_out, word_in, word_addr, cs, we, clk);
parameter WIDTH = 32,
DEPTH = 1 << 18,
SEL_BITS = 18;
//output
output reg [WIDTH-1:0] word_out;
//inputs
input [WIDTH-1:0] word_in;
input [SEL_BITS-1:0] word_addr;
input cs, we, clk;
//regs
reg [WIDTH-1:0] schip [0:DEPTH-1];
always @ (posedge clk)
begin
if (cs)
begin
if (we)
begin
schip[word_addr] <= word_in; // write into memory
word_out <= word_in;
end
else
begin
word_out <= schip[word_addr]; //read from memory
end
end
end
endmodule
Luego intenté aumentar el ancho de la memoria a 512 creando 16 instancias del módulo anterior en un módulo diferente de la siguiente manera:
always @ (posedge clk)
begin
if (reset)
count <= 4'b0000;
else
count <= count + 1;
word_output <= word_out[count] //word_output is the 32 bit output register
end
decode_4x16 dcd416 (sel, count);
generate
for (i = 0; i <= 15; i = i + 1)
begin: loop
assign chip_sel[i] = cs & sel[i];
mini_sub_chip mschip (word_out[i], word_in, word_addr, chip_sel[i], we, clk); //Instantiating 16 modules in parallel
//word_out is 32x16 array, with a different 32 bit array element driven every time 'mini_sub_chip' is instantiated
end
endgenerate
En cada ciclo de reloj, se transfieren datos de 32 bits de cada módulo instanciado de manera consecuente, de manera que se requieren 16 ciclos de reloj para completar la transferencia de datos de 512 bits.
El primer módulo funciona correctamente, pero el segundo módulo no funciona correctamente. Los datos se escriben en la memoria y se leen correctamente en cada ciclo de reloj, pero el registro 'word_output' no se actualiza mientras se lleva a cabo la escritura de la memoria. Por lo tanto, permanece indefinido mientras se afirme 'nosotros'. Sin embargo, se está actualizando durante las lecturas de memoria. Por favor, guía