¿cómo restablecer una matriz de memoria en verilog?

3

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?

    
pregunta Abraham

1 respuesta

4

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).

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas