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

 
 
Written by Holguer Andres
 
 
Welcome to FPGA lover!!!
 
Currently, I am moving all my web courses to a single one(www.fpgalover.com) using solely Terasic/Altera Boards. This Web page will have soon all my tutorials including the content of all my courses among I have:
 
 
While this is done, please I invite you to take a look at the new manuals on the web page, and have a tour, Enjoy, and Love FPGAs!
 
PS: Register to get access to exclusive tutorials and manuals.
 
Best Regards.
 
 

Thursday, 23 November 2017

Written by Fabio Andres     In this manual you are going to understand how the SNES Controller Works, and how we can acquire through a simple Finite State Machine (FSM), all the buttons states from the SNES controller using the de0-nano SOC (you can use any FPGA borad, and implement this manual). It is important to make clear that this manual is based on "SNES timing diagram"(Design Methodology) by Thomas D.   Required Materials: Any FPGA board (Though for this manual we...

Explore

Thursday, 23 November 2017

Written by Ernesto Andrés Rincón Cruz Nios® II is an softcore 32-bit processor developed by Altera to be implemented over all Altera (INTEL) FPGA and SoC families.  Some NIOS-II features: No license required. Use fewer than 700 logic elements. 6-stage pipeline runnning up to 30 DMIPS at 175 MHz in Nios II /e "economy" processor (Dhrystones 2.1 benchmark). Deterministic and jitter free real-time performance. Vector Interrupt Controller. Custom instructions (ability...

Explore

Thursday, 23 November 2017

Written by Holguer Andres   Introduction to HLS (High Level Synthesis) Using Verilog, or VHDL as a hardware description language might be difficult for software centric people who have to break the mental paradigm between concurrent software, and concurrent hardware, which sometimes can be confusing, and could be a pain in the ass for many. In addition, while designing a product, or developing a new prototype, using Verilog, or VHDL can be rigorous and tedious, due to the required time...

Explore

Thursday, 23 November 2017

Written by Holguer Andres   W5100 Qsys Component.   This Qsys component has been designed to be used with the chip Wiznet W5100 alongside the soft-core Nios II. This manual will tell you how to implement it using the DE0-NANO, and C5GX, and is divided into two parts: Hardware Part. Quartus Project. Qsys. PINOUT Connections. Software Implementation. WebServer Example. Requirements W5100 module. Option 1(Tested). Option 2(Tested). DE0-NANO (Not to be...

Explore

Thursday, 23 November 2017

  Written by Holguer Andres Requirements: DE0-NANO-SOC with and SD-CARD preloaded with the following Linux Image (compiled and customized by Holguer Andres). Putty.  Procedure: Using putty open the Linux Terminal through the UART port at 115200 bps. On the Console type: nano /etc/inittab​ As you can observe in the next image, and highlighted in red, all the initial system processes init with ":sysinit:" and next to this a command or a script that is going to...

Explore

Thursday, 23 November 2017

  Written by Holguer Andres   In this manual you are going to understand how the N64 Controller works, and how we can acquire through a simple Finite State Machine (FSM), all the buttons states from the N64 controller using the DE0-NANO (you can use any FPGA board, and implement this manual). it is important to make clear that this manual is based on http://larsivar.com/wp/?p=86 manual in which it is explained the N64 controller protocol, there is a software example for acquiring the...

Explore

Thursday, 23 November 2017

How you can turn on debug messages on Qsys If you have already created a qsys file, just follow the next steps Close the <>.qsys file you are working with. Open the file called <preferences.xml>, which is in the folder where your <>.qsys file is. Look for a line with  Replace the line with  Reopen the <>.qsys file you are working with, and you must see on the loading console some new messages which look like these (green bugs):

Explore

Thursday, 23 November 2017

  Setting the D5M Terasic Camera using Nios II at 1920x1080 Written by Holguer Andres Requirements: Quartus Version Above or equal to 14.1 D5M Camera. RAM (Where we can store the video acquisition). HDMI/VGA/SDI, or others video outputs (to stream out the video in order to see the results). This manual is composed by two sections: Hardware description part.In this part you can learn how to create a video acquisition system using Qsys. Software part.In this part you will learn...

Explore

Thursday, 23 November 2017

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...

Explore

Thursday, 23 November 2017

Written by Fabio Andres   NIOS II PROCESSOR - Hardware Nios II is an embed processor of structure of 32 bits specifically designed for FPGAs of the brand Altera (Intel).  Nios II has many improvements with the original architecture niosll/e, therefore is more suitable for a huge kinds of informatics applications such as DSP and control systems, moreover, Nios II processor is the world's most versatile processor, according to Gartner Research, and is the most widely used soft processor...

Explore

Thursday, 23 November 2017

Written by Sherneyko Plata Rangel Introducción: El procesamiento digital de señales, y en este  caso, el de audio, es una tarea exigente en cuanto a recursos y velocidad,desde sus inicios se han usado  integrados especializados para esta tarea, sin embargo  con los avances de las ultimas décadas dispositivos programables han  adquirido las capacidades para  realizar  estos procesos, entre ellos se  encuentra la   FPGA, que por sus capacidades y estructura pueden...

Explore

Thursday, 23 November 2017

Written by Holguer Andres             Download Sources for Quartus II: Plantilla para la DE0-NANO Binary (*.sof): Descargar Interesting links: https://sites.google.com/site/tecnicasdigitales22012/proyecto-final http://www.gamesx.com/controldata/psxcont/psxcont.htm http://www.billporter.info/playstation-2-controller-arduino-library-v1-0/   If you want to transform your psx controller to uart using your DE0-NANO, download the next...

Explore

Thursday, 23 November 2017

  Written by Holguer Andres   Materiales: DE0-NANO. 4.3inch-480x272-Touch-LCD.   Parte HW: Descargue la siguiente plantilla y descomprimala en una ruta sin espacios y corta. Ahora abra el proyecto Quartus y abra Qsys(Seleccione system.qsys). Una vez en Qsys, agregue el modulo llamado "Frame Reader" y configure de la siguiente manera:  El Frame Reader, leerá directamente de la RAM una sección de memoria con las características que están en el...

Explore

Thursday, 23 November 2017

Escrito por Fabio Andres En este proyecto se utilizan las herramientas la De0-nano (FPGA, Procesador NIOS II, Memoria y pines) en conjunto con una pantalla touch para lograr la visualizacion de un fractal Mandelbrot, y lograr ver las ventajas que tiene poner Hardware en paralelo con Software para realizar procesos matemáticos complejos como los utilizados en la realización de fractales. El procesador se programa en lenguaje C y la FPGA en el lenguaje de descripción de Hardware...

Explore

Thursday, 23 November 2017

Written by Jesus Basado en la practica de PicoCtrl del Prof. Yair Linn. OBJETIVOS  Aprender como funciona y como programar el microcontrolador PicoCtrl, adquiriendo conocimiento de como funciona un microcontrolador. INTRODUCCIONUn microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador. Un microcontrolador dispone normalmente de los siguientes componentes: Procesador o UCP (Unidad...

Explore

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: