$ 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:
- elegir un componente en la jerarquía
- elegir un pin o bus en las señales
- 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