2019/11/05

Para estudiar Free Range VHDL

Estas son los recursos de los que me he servido para estudiar y practicar el fantástico libro Free Range VHDL, que se puede comprar, se puede bajar mediante un formulario que no me anduvo o se puede generar el pdf a partir del latex:

$ sudo apt get latex-full
$ git clone https://github.com/fabriziotappero/Free-Range-VHDL-book.git 
$ cd Free-Range-VHDL-book
$ chmod 755 clean compile
$ ./compile

latex-full es un poco drástico y son 3.5 GB, seguro que hay una opción más óptima o sudo apt remove latex-full al terminar.


El libro no explica como sintetizar ni simular ni generar el bitstream ni programar el dispositivo.

Sintetizar


Probé primero con gvhdl pues está en los repos de la distribución, pero no andaban bien y el Colo me señaló esta conversación y me recomendó ghdl:




$ sudo apt install gnat-5                    ;# 100 MB

$ git clone https://github.com/ghdl/ghdl.git ;# 110 MB
$ cd ghdl
$ git checkout -b v0.36

$ mkdir build
$ cd build
$ ../configure
$ make
$ sudo make install


<nota de color>

El tener que crear el directorio build es medio chancho y se debe a que no está versionado. Hay al menos dos maneras de versionar una carpeta "vacía" en git:


$ touch build/.gitkeep 
$ git add build

o esta un poco más retorcida pero indudablemente más completa, pues si te olvidás de hacer un clean lo que haya adentro no te aparece. Un .gitignore dentro de la carpeta con este contenido:

*
!.gitignore


</nota de color>



Luego es tan sencillo como


$ ghdl -a hello_world.vhdl
$ ghdl -e hello_world
$ ghdl -r hello_world


Que en nada se va a manifestar a menos que usés std.textio o generés waveforms.

Con respecto a los nombres, -e y -r usan el nombre de la entity que haya dentro del vhdl.


Las manifestaciones pueden ser por stdout o volcar las señales a un archivo que entienda gtkwave.

STDOUT

Hay que usar una libreria llamada textio. Luego, se escriben en una variable valores con formato y eventualmente se vuelcan en stdout:


Mensajes a stdout



Además de write() existen hwrite(), owrite() y brite() que imprimen en hexa, octal y binario pero no me los entiende mi ghdl, pese a que están en el código. Son los que hacen falta para imprimir los vectores.

Tambien se puede imprimir a archivos, pero ni lo probé, no sé si intentaré solucionarlo, lo veré cuando explore más a fondo el tema de simulación.

Lo mejor que hallé es https://lauri.võsandi.com/hdl/ghdl.html

Cuidado que --help no dá todas las opciones que si están en las migajas de más abajo.



Waveform


$ sudo apt install gtkwave

Luego, en teoría, si tomás el ejemplo del lauri:

$ ghdl -a full_adder.vhd full_adder_testbench.vhd

$ ghdl -e full_adder_testbench
$ ghdl -r full_adder_testbench \
               --vcd=out.vcd \
               --fst=out.fst \
               --wave=out.wave

deberías poder usar gtkwave, pero pese a lo que dice la documentación, gtkwave no entiende out.wave. Además, los otros dos archivos, aunque son válidos y proveen información de los pines, no hay datos. O eso pensé, luego miré http://enos.itcollege.ee/~vpesonen/lisa/lab_example.html
y aunque no lo dice, logré deducir que hay que pedirle:


  1. elegir un componente en la jerarquía
  2. elegir un pin o bus en las señales
  3. append/insert/replace



Había pensado subir mis resultados de los ejercicios del libro y mis propios ejercicios a github, pero me distraje con otro libro, asi que lo que está es algo muy incompleto.

Lamentablemente no sólo me distraje con ese libro si no con todo mi proyecto de Forzando Brutalmente MD5 y perdí contacto con VHDL, en algún  momento cuando necesite, retomaré.

Para poder hacer todo esto tuve que seguir las migajas:

https://ghdl.readthedocs.io/en/latest/
https://ghdl.readthedocs.io/en/latest/building/Building.html
https://ghdl.readthedocs.io/en/latest/building/mcode/GNULinux-GNAT.html
https://ghdl.readthedocs.io/en/latest/using/Simulation.html
https://vhdlguide.wordpress.com/2017/09/22/textio/

La conversación previamente mencionada me llevó a este interesante documento, http://qucs.sourceforge.net/docs/tutorial/digital.pdf

No hay comentarios:

Publicar un comentario