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
 

 

Previous: 1) Getting Started - DE0-NANO-SOC

Next: NCO - DE0-NANO-SOC

 
 

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)


 

Powered by OrdaSoft!
  Written By Peter Gomez Este contenido esta orientado a los programadores que tienen problema con la conectividad("SGC PmmC") de su pantalla uOled-128-g1/g2…
Written by Sherneyko Plata Rangel   Pynq-z2: Hello world   In this tutorial we will implement a simple test of the inputs/outputs available on…
Objetivos Requerimientos Procedimiento Descripción de Hardware. Qsys. Nios II. UCOS II. Secuencia de Sprite. Sintesis de Audio. Descargas Glosario Otros Resultados. Ejemplo de Sprites.     Objetivos: Diseñar una plantilla general para el diseño de…
Written by Holguer A. Becerra           Requerimientos: DE0-NANO USB-UART(solo para parte 3) Python 2.7 ó superior.   Objetivos: Dar una introducción a los conceptos de Multitasking, Scheduling y…
Written by Holguer A. Becerra             Based on Gregory Estrade's Work.   I have ported the PC Engine System on the DE0-NANO back in 2014, why…
      Arduino tools are generally nice tools for quick prototyping and improvized projects, and the Seeeduino Xiao…
Written by: Holguer A Becerra         En esta practica vamos a construir nuestro primer juego retro  usando un sincronizador de Video VGA…
Written by: Andrea Paola Pabón Ortega & Daniel Enrique Mejia Rueda Revision by: Ing Holguer A. Becerra   DESCRIPCIÓN DEL PROYECTO: El  RTAWD DE0NANO…
  Written by Holguer Andres   Requires: DE0-NANO. 4.3 Inch 480x272 Screen.( WQVGA ) ?️       Parte HW: Descargue la siguiente plantilla( DE0_NANO_TFT_PSP.zip) y descomprimala en una ruta sin espacios y…
Escrito por Guillermo Acevedo   Diseño   En esta practica desarrollaremos un filtro FIR en hardware, para este caso en especifico, realizaremos un filtro…
 Written By Juan David Delgado   FILTRO FIR (FILTRO DE RESPUESTA FINITA AL IMPULSO)     Son conocidos como filtros digitales no recursivos debido a…
XISCKER: Reduced and Complex Instruction Set Computing Key Educational Resources A Configurable Platform for the Emulation of Different Computer Architectures An introduction to Computer Architectures through digital design description for FPGA devices   Computer Architecture embraces all three…
Escrito por: Alix Angarita   En el manual a continuación se explica un método de debug adicional que es muy interesante debido a…
By: Fabio Hernández   INTRODUCCIÓN:   El presente documento pretende mostrar la manera de generar software para una imagen de Linux implementada en la…
Summary Written by Fabio Hernandez   HARD PROCESSOR SYSTEM (HPS)     ------------------------------------------------------------------------------------------------------------------------------------------------   Introducción   Tenemos  2 nuclos de procesamiento ARM cortex-A9, cada uno son su propio cache  se…
Escrito por Jesus Lopez         INTRODUCCIÓN   El acceso directo a memoria (DMA, del inglés direct memory access) permite a cierto tipo de componentes de una computadora acceder a…
    Written by  Sebastian Baquero       Objetivos  Introducción a los conceptos de Multitasking, Scheduling y Context Switching.  Ampliación de los conceptos a cerca de el…