Sunteți pe pagina 1din 9

Personal

Open source

Business

Explore

Pricing

Blog

Support

Obijuan / open-fpga-verilog-tutorial
Code

Issues 0

Pull requests 0

Search

This repository

Watch
Wiki

Pulse

Sign in

13

Star

31

Sign up

Fork

15

Graphs

Captulo 0: you are leaving the privative sector


Manuel F. Jaimes edited this page Feb 13, 2016 64 revisions

Pages 40

Inicio (EN)

Captulos

You are leaving the privative sector ... y ests entrando en el sector LIBRE! Bienvenido! De aqu en
adelante slo usaremos herramientas del patrimonio tecnolgico de la humanidad

Introduccin
Las FPGAs son unos chips "en blanco" que nos permiten configurarlos para crear dentro de ellos
nuestros propios circuitos digitales. Si! Con las FPGAs estamos creando hardware!
Todos los circuitos digitales se descomponen en sus elementos bsicos: puertas lgicas para
hacer operaciones booleanas con los bits y biestables para almacenarlos. Como primera
aproximacin, podemos pensar en una FPGA como una chip que tiene en su interior arrays de estos
elementos, sin conectar. Al configurarla, establecemos estas uniones y obtenemos nuestro circuito.

0 You are leaving the privative


sector (EN)
1 Hola mundo! (EN)
2 De un bit a datos (EN)
3 Puerta NOT (EN)
4 Contador de 26 bits (EN)
5 Prescaler de N bits (EN)
6 Mltiples prescalers
7 Contador de 4 bits con prescaler
8 Registro de 4 bits
9 Inicializador
10 Registro de desplazamiento
11 Multiplexor de 2 a 1
12 Multiplexor de M a 1
13 Inicializando registros
14 Registro de N bits con reset
sncrono
15 Divisor de frecuencias
16 Contador de segundos
17 Generando tonos audibles
18 Tocando notas
19 Secuenciando notas
20 Comunicaciones serie
asncronas
21 Baudios y transmisin
22 Reglas de diseo sncrono
23 Controladores y autmatas
finitos
24 Unidad de transmisin serie
asncrona
25 Unidad de recepcin serie
asncrona
26 Memoria ROM
27 Memoria ROM genrica
28 Memoria RAM
29 Puertas triestado
30 Hacia el microprocesador y ms
all
Clone this wiki locally

Esta configuracin se consigue descargando en la FPGA un fichero binario, denominado


bitstream, que contiene toda la informacin necesaria para establecer las conexiones entre los
elementos internos de la FPGA

https://github.com/Obijuan/open-fpga-verilog-tutor

Clone in Desktop

Generacin del bitstream


converted by Web2PDFConvert.com

La magia de las FPGAs est en las herramientas software que permiten generar el bitstream a
partir de la descripcin del circuito en un lenguaje HDL
Los circuitos se disean utilizando un lenguaje de descripcin hardware (HDL), como Verilog o
VHDL. Son los ficheros fuentes. La generacin del bitstream se hace en dos fases, a partir de las
fuentes:

1 Sntesis: La herramienta de sntesis infiere los elementos hardware bsicos a partir de su


descripcin, y obtiene un fichero netlist que describe las uniones entre ellos. Esta fase no depende
de la FPGA a usar

2 Emplazado y rutado. Los componentes del netlist se hacen corresponder con los elementos
fsicos de la FPGA, se determina su colocacin y se realiza el rutado. Toda la informacin de
configuracin de la FPGA se condensa en el bitstream. Esta fase s depende del modelo concreto
de FPGA que se disponga

NOTA SOBRE TERMINOLOGA: Aunque tcnicamente la fase de sntesis en slo una parte de la
generacin del bitstream, coloquialmente cuando se habla de sntesis nos solemos referir al
proceso completo. As, si decimos que "hemos sintetizado este circuito en la FPGA", nos estamos
refiriendo a que se han realizado todas las fase: sntesis, emplazado y rutado, generacin del
bitstream y carga en la FPGA

Cautivos del fabricante


Las FPGAs se conocen desde hace 30 aos. Son unas herramientas tremendamente tiles con
muchsimo potencial. Te permiten disear tu propio chip! Sin embargo, los fabricantes de FPGAs
nunca han liberado ni el software ni las especificaciones de los formatos de sus bitstreams.
Esto ha hecho que nadie pueda crear software para trabajar con las FPGAs, sino que slo se puede
utilizar el del fabricante. Y slo se puede utilizar en los ordenadores que el fabricante te diga. Slo
puedes disear lo que el fabricante haya pensado que se puede disear con sus herramientas. Si se
te ocurre algo nuevo, no soportado por su software, no podrs hacer nada. Todo esto es bastante
frustrante. Y ha hecho que al final mucha gente deje de utilizar las FPGAs.

Herramientas libres para trabajar con


FPGAs
En mayo de 2015 ocurri un hito histrico: se tuvieron por primera vez todas las herramientas
necesarias para generar el bitstream a partir de cdigo en Verilog usando slo software libre,
gracias al proyecto icestorm, liderado por Clifford Wolf. A partir de ese momento,ya tenemos
herramientas que pertenecen al patrimonio tecnolgico de la humanidad para trabajar con
FPGAs, y poder desarrollar hardware usando slo herramientas de este patrimonio

Ventajas del uso de las herramientas libres


Autonoma: Los desarrolladores de hardware pueden desarrollar sus sistemas con
independencia del fabricante. Ya no se depende de los caprichos de cada fabricante, o de sus
converted by Web2PDFConvert.com

gustos. Con las herramientas libres nos independizamos. Los diseadores decidimos qu
sistema operativo utilizar. O qu entorno usar. Ya no estamos obligados a hacer lo que nos diga
el fabricante.

Acceso al conocimiento: Estas herramientas las podemos usar normalmente, igual que las
privativas. Sin embargo, si tenemos curiosidad, tenemos acceso al conocimiento de cmo estn
programadas, qu algoritmos se usan, cmo se implementa la sntesis... Esto fomenta el espritu
cientfico de comprender cmo funcionan las cosas... para luego mejorarlas. Ahora es posible
que investigadores de cualquier parte del mundo analicen los algoritmos, los comprendan y los
mejoren. Antes slo los fabricantes lo podan hacer

Nuevas aplicaciones: Se abre el camino a probar nuevos usos de la FPGA no previstos por
los fabricantes. Desde el comienzo de las FPGAs han surgido las ideas de usar hardware bajo
demanda, de codiseo hw/hw, sistemas operativos que usen tareas hw, etc. Aunque se han
escrito muchsimas tesis sobre ello, las implementaciones reales eran muy especficas para un
fabricante concreto. Y poco reproducibles por la comunidad. Ahora ya es viable hacer
implementaciones que corran por ejemplo en una raspberry pi, y que se sintetice el hardware
bajo demanda. Con las herramientas privativas era imposible, porque no estaba previsto por los
fabricantes

Participacin de la comunidad: Ahora TODOS podemos participar en la evolucin de las


FPGAs, no slo limitndonos a usarlas, sino haciendo crecer y mejorando las propias
herramientas.

Repositorios de Hardware libre reconfigurable: Lleg el momento de "reinventar la rueda


libre". Ya es posible crear repositorios de diseos de hw libre que nos pertenezcan a todos y
que los podamos hacer evolucionar entre todos. Compartirlos. Mejorarlos. Estos diseos se
podrn sintetizar con las herramientas libres. Y es un conocimiento que perdurar en el tiempo

Limitaciones
Ninguna herramientas recin nacida tiene todo lo que deseamos. Pero al ser libre, potencialmente
cualquier caracterstica se puede implementar. Por eso todos los sistemas de software/hardware
libres, evolucionan y maduran con el tiempo. Einstein tambin fue beb, y con esa edad no poda
crear sus teoras. Lo importante es el potencial.
Las herramientas del proyecto icestorm acaban de nacer. Y tienen todava que madurar y
desarrollarse. Algunas limitaciones son:
Slo sirven para las FPGAs de Lattice, modelos: HX1K-TQ144 y HX8K-CT256
Las herramientas slo cubren el bajo nivel: se usan en la lnea de comandos. No hay un
entorno grfico que permita gestionar proyectos. Hay que hacerlo a base de makefiles
El soporte a puertas triestado todava es muy limitado
No hay soporte para anlisis de tiempo post-rutado

Las herramientas del proyecto Icestorm


Las herramientas libres para trabajar con las FPGAs de lattice son las siguientes:

Sintetizador: Yosys (Repo en github) Place & route: Arachne-pnr (en github) Utilidades y
descarga en FPGA: Proyecto icestorm
En la siguiente figura se muestran las diferentes herramientas usadas en las etapas, y las
extensiones de los archivos que se van generando:

converted by Web2PDFConvert.com

Se parte de los ficheros fuente en verilog (.v). Usando el sintetizador Yosys, se generan los
ficheros netlist (.blif). El emplazado y rutado se realiza con arachne-pnr, generndose el bitstream
en formato ascii (.txt). Con icepack se crea el bitstream binario (.bin) que finalmente se enva a la
FPGA con iceprog
En la linea de comandos, los pasos a seguir para llevar el fichero test.v hasta la FPGA seran:
$ yosys -p "synth_ice40 -blif test.blif" test.v
$ arachne-pnr -d 1k -p test.pcf test.blif -o test.txt
$ icepack test.txt test.bin
$ iceprog test.bin

Herramientas libres para simulacin


Para disear los circuitos es fundamental disponer de un simulador de verilog. Las herramientas
libres que usaremos son:

Simulador de Verilog: carus Verilog


Visualizador de seales: Gtkwave
Icarus verilog crea un fichero ejecutable a partir del cdigo Verilog. Al ejecutarlo se realiza la
simulacin. Los resultados se vuelcan a un fichero .vcd que se visualiza con la herramienta
Gtkwave. Esto nos permite inspeccionar las seales para comprobar su correcto funcionamiento

Instalacin
Ubuntu 14.04, 15.10
Instalacin automtica, con instalador
David Cuartielles ha creado este instalador que realiza todo el proceso automticamente: se baja
todas las herramientas del github, las compila y las instalada, asi como todas las dependencias
necesarias. La forma de usarlo es:
git clone https://github.com/dcuartielles/open-fpga-install.git
cd open-fpga-install
sudo bash install.sh

converted by Web2PDFConvert.com

Instalacin Manual
Instalacin de dependencias:
sudo apt-get install build-essential clang bison flex libreadline-dev gawk tcl-dev libffi-dev git mercurial graphviz xdot pkg-config python python3 libftdi-dev

Instalacin de IceStorm Tools (icepack, icebox, iceprog):


git clone https://github.com/cliffordwolf/icestorm.git icestorm
cd icestorm
make -j$(nproc)
sudo make install

Instalacin de Arachne-PNR (the place&route tool):


git clone https://github.com/cseed/arachne-pnr.git arachne-pnr
cd arachne-pnr
make -j$(nproc)
sudo make install

Instalacin de Yosys (Verilog synthesis):


git clone https://github.com/cliffordwolf/yosys.git yosys
cd yosys
make -j$(nproc)
sudo make install

Instalacin de Icarus Verilog y GTKwave


sudo apt-get install gtkwave iverilog

Fedora 22
Instalacin de dependencias:
sudo dnf install libftdi-devel tcl-devel readline-devel flex clang bison gawk libffi-devel git mercurial graphviz python python3

Instalacin de IceStorm Tools (icepack, icebox, iceprog):


git clone https://github.com/cliffordwolf/icestorm.git icestorm
cd icestorm
make -j$(nproc)
sudo make install
cd ..

NOTA: si aparecen errores relacionados con "ftdi.h" puede ser necesario enlazar la librera FTDI de
este modo:
sudo ln -s /usr/lib64/libftdi1.so /usr/local/lib/libftdi.so
sudo ln -s /usr/include/libftdi1/ftdi.h /usr/local/include/ftdi.h

Instalacin de Arachne-PNR (the place&route tool):

converted by Web2PDFConvert.com

git clone https://github.com/cseed/arachne-pnr.git arachne-pnr


cd arachne-pnr
make -j$(nproc)
sudo make install
cd ..

Instalacin de Yosys (Verilog synthesis):


git clone https://github.com/cliffordwolf/yosys.git yosys
cd yosys
make -j$(nproc)
sudo make install
cd ..

Instalacin de Icarus Verilog y GTKwave


sudo dnf install iverilog gtkwave

Adicionalmente, para poder ejecutar "sudo iceprog" hay que enlazar:


sudo ln -s /usr/local/bin/iceprog /usr/bin/iceprog

Si lo que quieres es actualizar las herramientas, puedes re-utilizar los repositorios que clonaste
durante la instalacin, usando el comando "git reset --hard & git pull" (revertir cambios locales y
descargar la ltima versin):
cd icestorm
git reset --hard & git pull
make -j$(nproc)
sudo make install
cd ../arachne-pnr
git reset --hard & git pull
make -j$(nproc)
sudo make install
cd ../yosys
git reset --hard & git pull
make -j$(nproc)
sudo make install

Placa ICEStick
La placa que usaremos en estos tutoriales es la IceStrick Si no dispones de ella (o de otra similar),
No problem! Tambin simularemos todos los diseos con icarus verilog y gtkwave

Configuracin
La descarga del bitstream a la placa icestick se hace directamente por USB, usndose la
biblioteca libftdi. Para ello es necesario tener permisos de acceso.
Si intentamos cargar en la icestick sin permisos, obtendremos el siguiente mensaje de error:

converted by Web2PDFConvert.com

$ iceprog scicad1.bin
init..
Can't find iCE FTDI USB device (vedor_id 0x0403, device_id 0x6010).
ABORT.

Una manera de solucionarlo es utilizar sudo al ejecutar iceprog, descargando con el comando:
$ sudo icprog bitstream.com

Esto tiene el inconveniente de que hay que estar metiendo la clave cada cierto tiempo.
La otra forma es configurar el sistema udev para que al conectar la icestick al USB el usuario
tenga permisos. Para ello hay que hacer lo siguiente:
Crear el archivo /etc/udev/rules.d/80-icestick.rules con el siguiente contenido
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0403",
ATTRS{idProduct}=="6010", OWNER="user", GROUP="dialout",
MODE="0777"

Ejecutar este comando para relanzar el administrador de udev y cargue la nueva regla:
$ sudo udevadm control --reload-rules && sudo udevadm trigger

Ahora ya se puede hacer la descarga directamente ejecutando:


$ iceprog bitstream.bin

En ubuntu es necesario reiniciar la mquina para que funcione correctamente

Cmo hacer los tutoriales


Para realizar estos tutoriales, y poder probar todos los ejemplos, hay que seguir los siguientes
pasos:
1. Clona el repo de los tutoriales, para tener en tu ordenador todos los ficheros:
$ git clone https://github.com/Obijuan/open-fpga-verilog-tutorial.git

2. Entra en el directorio de trabajo del tutorial que toca. Por ejemplo, para el 1 sera:
$ cd open-fpga-verilog-tutorial/tutorial/ICESTICK/T01-setbit/

3. Simula y sintetiza
En cada tutorial se irn indicando los comandos a ejecutar. En el caso del primero, para realizar la
simulacin hay que ejecutar:
make sim

Para sintetizar:
make sint

y finalmente para configurar la FPGA:


converted by Web2PDFConvert.com

$ iceprog setbit.bin

Documentacin
Manual de la ICEstick(PDF)
Hoja de datos FPGA iCE40LPHXF(PDF)

Pinout de la Icestick

Enlaces
converted by Web2PDFConvert.com

Proyecto Icestorm (Github)


Pgina personal de Clifford Wolf
Sintetizador Yosys (Github)
Emplazamiento y enrutado: arachne-pnr
Gtkwave
Icarus Verilog (Github)

Crditos
"AND ANSI" by jjbeard - Own Drawing, made in Inkscape 0.43. Licensed under Public Domain
via Commons https://commons.wikimedia.org/wiki/File:AND_ANSI.svg#/media/File:AND_ANSI.svg
"OR ANSI" by jjbeard - Own Drawing, made in Inkscape 0.43. Licensed under Public Domain via
Commons - https://commons.wikimedia.org/wiki/File:OR_ANSI.svg#/media/File:OR_ANSI.svg
"NOT ANSI" by jjbeard - Own Drawing, made in Inkscape 0.43. Licensed under Public Domain
via Commons https://commons.wikimedia.org/wiki/File:NOT_ANSI.svg#/media/File:NOT_ANSI.svg
"XOR ANSI" by jjbeard - Own Drawing, made in Inkscape 0.43. Licensed under Public Domain
via Commons https://commons.wikimedia.org/wiki/File:XOR_ANSI.svg#/media/File:XOR_ANSI.svg
"D-Type Flip-flop" by Inductiveload - Own Drawing in Inkscape 0.43. Licensed under Public
Domain via Commons - https://commons.wikimedia.org/wiki/File:D-Type_Flipflop.svg#/media/File:D-Type_Flip-flop.svg

FPGA Libres: [Wiki] [Repo]

2016 GitHub, Inc. Terms Privacy Security Contact Help

Status API Training Shop Blog About

converted by Web2PDFConvert.com

S-ar putea să vă placă și