Written by Javier
Objetivos:
- Conocer qué es un IP Core
- Conocer los pasos para emplear los IP Cores
- Implementar adecuadamente un IP Core
¿Qué es un IP Core y un Open Core?
Un IP Core (Intellectual Property Core ) es una unidad lógica re-utilizable que tiene derechos de propiedad intelectual. Se pueden personalizar de acuerdo a las necesidades de diseño. Por su parte también existen los Open Cores, cuya diferencia con los IP Cores radica en que estas unidades son de código abierto.
Procedimiento para usar una IP Core:
Para empezar con el uso de las IP cores se debe crear un nuevo proyecto con System Builder y a abrirlo. Una vez adentro se selecciona en la pestaña Tools, IP Catalog.
Inmediatamente se despliega un menú en la parte derecha de la pantalla, donde se podrá ver el listado de Cores que Altera dispone.
Se pueden observar diversas IP Cores, desde cosas tan elementales como realizar sumas o restas, hasta Cores especiales para vídeo y audio, PLLs, entre muchas otras.
Se procede a seleccionar en Basic Funtions > Arithmetic el Core ALTFP_ADD_SUB, core especial para realizar operaciones de suma y/o resta.
Una vez seleccionada se despliega una ventana de nombre Save IP Variation, en la cual, en el campo IP variation file name se puede seleccionar el nombre y la ubicación del archivo que se va a crear.
En el campo IP variation file type se puede elegir el tipo de archivo a crear (archivo de VHDL o de Verilog), para este caso se seleccionará que sea un archivo de Verilog y se da click en OK.
Automáticamente se despliega el menú MegaWizard Plug - In Manager
Se puede observar que en la pestaña Parameter Settings > General se puede editar el formato del punto flotante, en el cual y para este caso se elige la opción Single precision (32bits). También se puede seleccionar que el IP Core sea sólo de suma, resta, o crear un puerto de entrada add_sub para realizar las dos operaciones
En la pestaña Parameter Settings > Optional Input/Exception Ports se pueden agregar puertos adicionales, tales como puertos asíncronos, de habilitación de reloj, para overflow, etc. En este caso se selecciona únicamente para crear un puerto habilitación de reloj.
En la pestaña Parameter Settings > Optimization se puede elegir qué optimizar, si área (número de bloques usados en la FPGA) o velocidad de funcionamiento.
En la pestaña EDA se pueden ver qué archivos de modelo de simulación son necesarios para que la IP Core pueda ser generada adecuadamente. También se puede seleccionar si se desea generar o no una netlist para estimar temporización y recursos y Altera hace unas recomendaciones y nota acerca de la generación de la netlist.
En la pestaña Summary se seleccionan qué tipos de archivos se desean generar. Para llevar a cabo la implementación de la IP Core seleccionada anteriormente, en Verilog, se elige generar un archivo de instanciación, y un archivo de Verilog, tal y como se señalan en el recuadro rojo.
En la carpeta que se seleccionó al inicio aparecenrán los siguientes archivos.
Los elementos que aparecen enmarcados en el recuadro rojo son los archivos que se acaban de crear, y los no seleccionados son los que se crearon utilizando la herramienta System Builder.
A continuación se procede a abrir la plantilla creada con System Builder en la herramienta Quartus II, se da click en File > Open... y se selecciona el archivo que se muestra a continuación
Esto desplegará una ventana donde aparecerá el siguiente código
Se debe copiar y pegar en la plantilla creada por System Builder de la siguiente manera
Lo escrito dentro de cada paréntesis se reemplaza por los valores correspondientes.
Para este caso se seleccionó como clk el switch 1 de la FPGA (Se puede seleccionar cualquier Switch o bontón que desee); como clock o reloj se seleccionó el que trae por defecto la FPGA que tiene una frecuencia de 50 MHz.
En dataa y datab se colocan los valores con los que se quiere realizar la operación. En este ejemplo se eligió realizar la suma entre los números 6.4 y -7.9.
Nota: La IP Core seleccionada trabaja con el formato hexadecimal de 32 o 64 bits bajo el formato IEEE 754. Para realizar la conversión de base decimal a hexadecimal, se utilizó el siguiente conversor online: h-schmidt.
Se escribe el número deseado en el capo Decimal Representation y se presiona enter. El número que inmediatamente aparece en el campo Hexadecimal Representation es el que se ubicará en dataa y datab, no sin antes cambiar el 0x inicial por un 32'h, es decir, si en la representación hexadecimal obtenida en la página es 0x0fccccd, al reescribirlo en Quartus II deberá quedar como 32'h0fccccd.
Se asignan, también, los 8 leds de la FPGA para que muestren el resultado que será dado en base binaria de 32 bits. Para llevar a cabo esto, se toman los switch 2 y 3 (se pueden variar a su antojo) como selectores, con el fin de mostrar, en intervalos de 8 bits, el valor del arreglo en el cual se guarda el resultado.
Una vez realizados todos los pasos anteriores, se procede a realizar la prueba en la FPGA. El resultado que se debe mostrar en este caso es -1.5, que en base binaria y según el conversor utilizado es el siguiente.
Los leds de la FPGA se seben ver de la siguiente manera
Switch 3 Switch 2 Resultado Binario
0 0 00000000
0 1 00000000
1 0 11000000
1 1 10111111
Los resultados prácticos que se deben obtener son los siguientes:
Switch habilitador o clk en alto (1)
Switch 3 Switch 2
0 0
Switch habilitador o clk en alto (1)
Switch 3 Switch 2
0 1
Switch habilitador o clk en alto (1)
Switch 3 Switch 2
1 0
Switch habilitador o clk en alto (1)
Switch 3 Switch 2
1 1
You can contribute and make this a better place by supporting it.
if you like this webpage, or if the resources of this webpage are useful for you, please donate.
Paypal(Own Amount):