Tengo una memoria como esta:
reg [7:0] memory [1023:0]
¿Cómo debo usar un for-loop para restablecer la memoria en verilog? Por favor dame el codigo Por ejemplo, si reset==0
, ¿cómo puedo restablecerlo?
Tengo una memoria como esta:
reg [7:0] memory [1023:0]
¿Cómo debo usar un for-loop para restablecer la memoria en verilog? Por favor dame el codigo Por ejemplo, si reset==0
, ¿cómo puedo restablecerlo?
Por lo general, las memorias grandes, como lo que está mostrando, se implementan como recursos de tipo RAM de bloque: RAM dedicada punteada en el FPGA. Estos recursos no suelen ser compatibles con el restablecimiento; puede restablecer el registro de salida, pero no la matriz en sí.
Si intenta implementar una señal de reinicio, el sintetizador se dará cuenta de que no puede usar una memoria dedicada e intentará implementar toda la matriz en registros dedicados. En su caso, serían 8192 registros, un multiplexor de 8 bits 1024: 1. y grandes cantidades de lógica de decodificación de direcciones. ¡Se necesitaría una gran cantidad de recursos!
Si aún desea probar el reinicio y ver si encaja, simplemente podría agregar un bucle for en su bloque siempre:
integer j;
always @ (posedge clock or negedge reset) begin
if (~reset) begin //negative reset clause
for (j=0; j < 1024; j=j+1) begin
mem[j] <= 8'b0; //reset array
end
end else if (write) begin //write enable
mem[waddr] <= data; //standard write logic
end
end
Sin embargo, yo realmente aconsejaría seriamente contra esto. Quizás pregúntese por qué necesita hacerlo y considere sus otras opciones.
Una solución, aunque toma tantos ciclos de reloj como direcciones de memoria es que al reiniciar, tiene un contador que cuenta a través de todas las direcciones y escribe un cero a cada uno (borra una dirección en cada ciclo de reloj).