Capítulo 13: Procesador simplez en FPGA - Obijuan/videoblog GitHub Wiki

VideoBlog 13

VER VIDEO:

Click to see the youtube video

Descripción

En las FPGAs podemos implementar cualquier circuito digital, como por ejemplo un microprocesador. Yo he implementado el procesador educacional Símplez, creado por el profesor Gregorio Fernández. Simplez tiene 8 instrucciones y 512 palabras de memoria. Se ha implementado en lenguaje verilog y sintetizado con las herramientas libres del proyecto icestorm. En este videoblog se muestra cómo configurar la FPGA para tener Simplez, y ejemplos de ejecución de programas en él

ACCESO A LA DOCUMENTACION DEL PROYECTO

Sintetizando a Simplez

  • Lo primero que hacemos es clonarlos el repositorio de github (o hacer un fork y luego clonarlo):

    $ git clone https://github.com/Obijuan/simplez-fpga.git

  • Nos metemos en el directorio simplez-fpga/verilog

    $ cd simplez-fpga/verilog

  • Ensamblamos el programa bootloader para sintetizar un simplez con ese programa metido en la memoria. Podríamos usar cualquier otro, pero el bootloader nos permite que usemos la herramienta sboot para descargar programas fácilmente en simplez:

$ ./sasm.py asm/boot.asm Assembler for the SIMPLEZ microprocessor (Version: v1.2) Released under the GPL license

OK! Machine code for SIMPLEZ generated

File: prog.list Size: 60 words Code: 50 words data: 10 words


Esto genera el fichero **prog.list** con el **código máquina del bootloader**, que se cargará en la memoria RAM al realizarse la síntesis

* Realizamos la **síntesis**:

```$ make sint```

Nos genera el fichero **simplez.bin** con el **bitstream** para configurar la FPGA

* **Configuramos la FPGA**:

```$ make prog```

Ahora la **placa icestick tiene un simplez dentro**, con un bootloader en su RAM. Es como si hubiésemos comprado una placa con Simplez en una tienda. Si la desconectamos y la volvemos a conectar, simplez con su bootloader seguirán ahí. Es como nuestro propio arduino pero simplificado

* Hacemos un **test de carga**, para comprobar que está todo ok:

$ ./sboot.py -t 1 Test! Bootloader ready!!!! EXECUTING!!!


Esto carga un programa de ejemplo que está dentro de la **herramienta sboot**. Hará que los leds roten en sentido horario. Nos sirve para comprobar que está todo ok

# Cargando ejemplos en Simplez

* **Ensamblamos un programa nuestro**:

$ ./sasm.py asm/boot_02_sec1.asm -o sec1.list Assembler for the SIMPLEZ microprocessor (Version: v1.2) Released under the GPL license

OK! Machine code for SIMPLEZ generated

File: sec1.list Size: 9 words Code: 7 words data: 2 words


Se crea el fichero **sec1.list** con el código máquina de nuestro programa

* **Cargamos sec1.list en la memoria de simplez**, para que se ejecute:

$ ./sboot.py sec1.list File: sec1.list Size: 9 words Initial address: H'040 Bootloader ready!!!! EXECUTING!!!

Podemos ver la secuencia en los leds

# Probando el modo interactivo

* **Ensamblamos el ejemplo del eco**:

$ ./sasm.py asm/boot_06_echo.asm -o eco.list Assembler for the SIMPLEZ microprocessor (Version: v1.2) Released under the GPL license

OK! Machine code for SIMPLEZ generated

File: eco.list Size: 17 words Code: 15 words data: 2 words

* Lo **cargamos con sboot**, en **modo interactivo**:

$ ./sboot.py -i eco.list File: eco.list Size: 17 words Initial address: H'040 Bootloader ready!!!! EXECUTING!!! Entering the interactive mode... Press CTRL-D to exit

Hola como estas... :-)

El modo interactivo funciona como un terminal de comunicaciones. Las teclas que pulsamos se envían por el puerto serie a Simplez. Y todo lo que nos envía simplez se muestra por la pantalla. En este ejemplo, simplez nos devuelve todas las teclas que pulsamos (hace eco)

Salimos de este modo pulsando la tecla **Control-D**

# Enlaces

* [Diseño Digital para FPGAs, con herramientas libres](https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki): Tutorial para aprender verilog y diseño digital usando sólo herramientas libres.

* [Comunidad FPGA-wars: explorando el lado libre](https://groups.google.com/forum/#!forum/fpga-wars-explorando-el-lado-libre). Grupo donde compartir información, preguntar, hacer compras conjuntas sobre todo lo relacionado con las FPGAs libres

* [Documentación de Simplez F](https://github.com/Obijuan/simplez-fpga/wiki/Procesador-SIMPLEZ-F)