¿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, FPGA, CPLD), incluyendo tanto de gama alta y las variaciones de las materias primas.
En este caso la SoftCORE que usamos es el F32C.
¿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.
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:
- 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
EJERCICIO - Cajita musical
Con el siguiente diseño, genere una secuencia musical
El procedimiento es el siguiente:
- Descargue DE0_NANO_SOC_arduino_2.qar
-
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.
- Ahora para diseñar el software descargue Secuencia_Musical, copielo y peguelo en el archivo "Blinked.ino" que se trabajo anteriormente.
- 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.