Usando un archivo mif en Quartus

0

He creado un archivo mif en Quartus y estoy trabajando con el ciclón 2 Altera. Mi consulta es "¿Cómo puedo usar este archivo mif para inicializar una variable en mi arquitectura de diseño de nivel superior"? Déjame elaborar. Mi objetivo es producir una onda sinusoidal utilizando FPGA almacenando los valores en las tablas de consulta y accediendo a ella desde un programa VHDL. Calculé los valores de la tabla de búsqueda utilizando MATLAB. Los he puesto en un archivo mif. Ahora creo que debería escribir un programa que tome estos valores de LUT y enviarlo al DAC.

Para esto, estoy tratando de escribir un programa vhdl con una variable que se inicializa con mis valores de LUT. Luego asignaré los valores a una variable de vector de salida (¿debería ser una matriz bidimensional?) Y luego usaré el DAC.

Escuché que no hay DAC directos en el ciclón 2?

    

1 respuesta

4

Puede usar los núcleos IP de memoria para crear una memoria con contenido inicial de mif. Puede consultar la guía de usuario principal de IP para más información.

Otra solución es usar los atributos VHDL para inicializar el contenido de su variable. Debe estar seguro de que su código es interpretado como una ROM por altera, de lo contrario el atributo será ignorado. Este es el uso de ejemplo de documentación de altera :

type mem_t is array(0 to 255) of unsigned(7 downto 0);
signal ram : mem_t;
attribute ram_init_file : string;
attribute ram_init_file of ram : signal is "my_init_file.mif";

Una tercera forma, que prefiero, es inicializar la memoria en código VHDL, por ejemplo:

type rom_t is array(0 to 1023) of signed(15 downto 0);

function fill_sin_rom return rom_t is
    variable ret : rom_t;
begin
    for i in ret'range loop
        ret(i) := to_signed(integer((2.0**15 - 1.0)*sin(2.0*MATH_PI*real(i)/1024.0)), 16);
    end loop;
    return ret;
end function fill_sin_rom;

constant sin_rom : rom_t := fill_sin_rom;

Este código estaría en un paquete para las secciones de una declaración de arquitectura. Requiere use ieee.math_real.all y use ieee.numeric_std.all para funcionar. La ventaja de esta solución es que también funciona en simulación, mientras que el atributo no lo haría.

    
respondido por el Jonathan Drolet

Lea otras preguntas en las etiquetas