Estoy tratando de modelar una memoria RAM de 0.125GB en Verilog usando ModelSim de 512 bits de ancho usando chips de memoria de 32 bits de ancho. Así que he creado un 32 * 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 traté de 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 desde cada módulo instanciado de manera consecutiva, de modo que se necesitan 16 ciclos de reloj para completar la transferencia de datos de 512 bits.
El primer módulo funciona correctamente, pero el segundo no. Los datos se escriben y se leen correctamente en la memoria en cada ciclo de reloj, pero el registro 'word_output' no se actualiza mientras se realiza la escritura en la memoria. Por lo tanto, permanece indefinido mientras se afirma 'nosotros'. Sin embargo, se actualiza durante las lecturas de memoria. Por favor guíe
Parece que necesita volver a escribir el modelo de memoria para probar el puerto de salida cuando cs es 0. Dado que este no es el caso, el resultado no está definido ya que hay varios controladores.
titán
alex.forencich
titán
alex.forencich
alex.forencich
titán
alex.forencich