Written by Juan David

 

Introducción 

El proyecto FPGArduino consiste en transformar el uso que normalmente se le da a la FPGA y usarlo como un sistema de micro controladores programables usando Arduino. El sistema consiste en construir una “CPU CORE” que ejecuta subgrupos de cualquier RISC-V o MIPS grupo de instrucciones.

 

¿Qué es softcore?

Es un microprocesador de núcleo que puede ser implementado en su totalidad mediante la síntesis de la lógica. Se puede implementar a través de diferentes dispositivos semiconductores  que contienen la lógica programable (por ejemplo, ASIC, FPGA, CPLD), incluyendo tanto de gama alta y las variaciones de las materias primas.

 

¿Qué es una CPU CORE?

Un procesador multinúcleo es aquel que combina dos o más microprocesadores independientes en un solo paquete, a menudo un solo circuito integrado. Generalmente, los microprocesadores multinúcleo permiten que un dispositivo computacional exhiba una cierta forma del paralelismo a nivel de thread (thread-level parallelism) (TLP) sin incluir múltiples microprocesadores en paquetes físicos separados. Esta forma de TLP se conoce a menudo como multiprocesamiento a nivel de chip (chip-level multiprocessing) o CMP.

 

En este caso la CPU CORE que usamos es una F32C. La F32C es un retarguetable (diseñada para generar código para más de una plataforma), escalar (variable), pipelined (grupo de elementos de procesamiento de datos conectado en serie), procesador de 32-bit que es capaz de ejecutar subgrupos de cualquier RISC-V o MIPS grupo de instrucciones. Es implementado en VHDL parametrizada que permite sintetizar con diferentes compensaciones de área o velocidad, e incluye un predictor de saltos, manejo de excepciones de control de bloques, y caches de correlación opcionales. El código RTL además incluye módulos como controladores SDRAM y SRAM de multi-puertos, framebuffers de vídeo con material compuesto ( PAL ) , HDMI , DVI y VGA con aceleración simple 2D para sprites y windows, SPI , UART , audio PCM , GPIO , salidas PWM y un temporizador, así como la lógica de pegamento adaptados para el desarrollo de numerosas tarjetas FPGA de varios fabricantes.

 ¿Cómo funciona?

Una vez configurado, la FPGA se comporta como sistema en un chip de 32 Bit, ejecutando un gestor de arranque que espera una compilación binaria para ser recibida en el puerto serial de la FPGA.

Compilar y subir el programa (sketch) es fácil para todas las plataformas. El proceso funciona incluso con sistemas operativos que algunas herramientas de síntesis de la FPGA no soportan.

 

Procedimiento para usar un ARDUINO con la FPGA

Lo primero que se debe hacer es abrir el código en QUARTUS que se encuentra al final de la pagina llamado DE0_NANO_SOC_arduino.qar

El montaje para conectar la FPGA con el Conversor Serial USB consiste en conectar el Transmisor (Tx) de la FPGA con el Receptor (Rx) del Conversor Serial USB, además conectar el Receptor de la FPGA con el transmisor del Conversor Serial USB y también conectar las tierras de ambos dispositivos.

                       
                      

Como se observa en el código la FPGA maneja unas entradas que son la del reloj, unos switch, dos botones y un receptor, y tiene unas salidas que son los Led y el transmisor.

 

Luego de programar la FPGA se puede observar la conexión en RTL de forma detallada de cómo está construido.

                     

En las imágenes se observa que hay un conjunto de memorias y una etapa de pipeline.

 

Luego, se procede a conectar el Conversor Serial USB  y se abre el archivo Blinked.ino (se encuentra al final de la pagina).

Al abrir el archivo se abre un código en ARDUINO UNO, para  ejecutarlo primero debe asegurarse de que las siguientes configuraciones estén aplicadas:

  1. En la ventana de ARDUINO IDE abrimos el menú archivo y selecciona preferencias
 
 

Luego de haber seleccionado aparecerá una ventana como la siguiente y en esta debe buscar la opción que dice “Gestor de URLs adicionales de tarjetas” y en este espacio agregue la siguiente dirección: http://www.nxlab.fer.hr/fpgarduino/package_f32c_core_index.json

 
 
    2.    Ahora seleccione el menú herramientas y busque la opción que diga “placa”, luego seleccione “gestor de tarjetas”
 
 
 

Luego de seleccionar esta opción busque en la ventana a la que lo dirige la opción que dice “FPGArduino by FER+RIZ+RADIONA” e instalela.

 
 
 
    3.    Ahora para poder empezar a dar uso al programa que usara con la FPGA y el Conversor Serial USB debe seleccionar las siguientes opciones:

                a.    En el menú de herramientas se debe asegurar de que en la opción de placa este seleccionado “Terasic DEO NANO”

 
 
 
                b.     En el menú herramientas en la opción de CPU Architecture seleccionar “MIPS”
 
 
 
 
                    c.        En el menú herramientas en la opción de RAM size seleccionar “32 KB BRAM Internal”
 
 
 
                d.        En el menú herramientas en la opción “programador” seleccionar “ujprog (FPGArduino)”
 
 
 
                e.        En el menú de herramientas en la opción de “puerto” seleccionamos “COM4”
 
 

        Una vez hecha la conexión de la FPGA y el Conversor Serial USB (que se muestra en la figura)

 
            Al ejecutarlo lo que se muestra en la pantalla es lo siguiente
 
 
 
        En el siguiente vídeo podrá observar el funcionamiento en la FPGA
 

Vídeo de YouTube

 

Vídeo de YouTube

   
EJERCICIO
 
Con el siguiente diseño, genere una secuencia musical
 
 
El procedimiento es el siguiente: 
 
  1. Descargue DE0_NANO_SOC_arduino_2.qar
  2. Abra el archivo en quartus, y abra el archivo Rom_Musical
    Lo que tiene que hacer en la Rom_Musical es añadir las notas que se utilizaran en la secuencia musical que desea hacer añadiendo el numero correspondiente a la frecuencia de cada nota. El numero lo halla con la siguiente formula: En este caso la frecuencia que maneja el reloj es de 50Mhz y la frecuencia de salida es la frecuencia de la nota. Lo único que debe cambiar de la Rom_musical es en el "case" donde dependiendo de la cantidad de notas que va a manejar la secuencia musical es la cantidad de temporales que va a utilizar.

    Una vez haya cambiado las frecuencias de las notas que utilizara, ya se tiene la Rom_Musical, el Div_Freq que se usa en el diseño, y solo falta diseñar el software que mandara la señal a la Rom_Musical mostrando cual es la secuencia musical que debe seguir y la Rom enviara la frecuencia al divisor para que luego se reproduzca en el altavoz.
  3. Ahora para diseñar el software descargue Secuencia_Musical, copielo y peguelo en el archivo "Blinked.ino" que se trabajo anteriormente.
  • Esta parte del código consiste en definir al nombre de las letras que definimos en la Rom_Musical y asignarles un valor. 
  • La siguiente parte del código consiste en un switch el cual se encarga de identificar la nota que sigue en la secuencia y envía una señal a la Rom_Musical para que está pueda enviar la nota al divisor.  En cada "case" se lee la nota dependiendo del valor que le asigno y usd debe formar el numero en binario con varias funciones digitalWrite siendo la 8 bit menos significativo y el 12 el mas significativo.
  • La parte final del código consiste en hacer la secuencia musical deseada en la que pondrá en orden todas las notas que ya asigno con sus respectivos tiempos de duración en el "delay" que se expresa en mili segundos.
.
En el siguiente video puede observar la secuencia musical desarrollada.
 

Vídeo de YouTube

 
 
Instagram
Powered by OrdaSoft!

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)


Donate Rapidly 5 USD:

Donate Rapidly 10 USD: