Restablecimiento de una dirección de 128 direcciones * 16 palabras

1

Estoy haciendo mi proyecto de término, en el que tengo una memoria, que puede ser cambiada por el usuario. La especificación es que siempre que se active el restablecimiento, los datos en este registro deben restablecerse a todos los ceros.

Primero declaré la memoria que consta de 128 direcciones * 16 palabras de la siguiente manera

    reg [15:0] memory [127:0];

Aquí está el código que trato de usar para restablecer el propósito

    always @(posedge clk)
    begin
    if (reset)
   begin
    for (i=0; i<256; i = i+1) 
        begin
            memory[i] <= 16'b0000000000000000;
        end
   end

Este es mi intento de solución. He intentado el enfoque de reinicio del sincronismo.

Ahora, lo más importante que quiero preguntar es, ¿puedo usar for loop adentro siempre? He investigado un poco y descubrí que para loop no es sintetizable para los FPGA, que se requieren durante la demostración de proyectos. Sin usar para bucle, ¿cómo puedo hacer que los 16 bits en todas las 128 direcciones sean todos cero? Me parece imposible? Soy bastante nuevo en Verilog, por lo que puede ser una pregunta noob.

Cualquier ayuda es apreciada. Gracias.

    
pregunta Deniz Yildirim

1 respuesta

1

El bucle es perfectamente sintetizable, excepto por el hecho de que cuenta hasta 256 cuando solo tiene 128 direcciones.

Sin embargo, lo que va a inferir no es una memoria, sino 2048 registros discretos. Si eso es lo que quieres, entonces no deberías tener problemas, pero probablemente no lo sea. Los bloques de memoria en los FPGA no tienen señales de reinicio de matriz (tienen señales de reinicio para la dirección y los registros de salida, pero no la matriz de datos). Si desea restablecer el contenido de un bloque de memoria, no puede hacerlo de una sola vez.

Tienes dos opciones si quieres inferir una memoria en lugar de registros.

La primera opción sería tener un contador y, a lo largo de 128 ciclos de reloj, establecer cada dirección a su vez en cero. Eso lleva mucho tiempo.

La segunda opción sería tener un registro de 128 bits de ancho (una de cada palabra de memoria). Usted utiliza ese registro para indicar si la palabra de la memoria es válida o no. Para restablecer la memoria, borra el registro de 128 bits para indicar que ninguno es válido. Luego puede usar el bit válido para determinar si debe emitir el valor en la memoria o cero. La ventaja de este enfoque es que puede borrar los datos en un solo ciclo de reloj borrando los bits válidos.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas