Gracias a la cuarentena tenía algunos días de vacaciones sin tomar, aproveché para tomar un sorpresivo curso, bastante extenso, cinco días de seis horas y tres de cinco, 45 horas en total, de diseño digital básico con Verilog, en el marco del evento EAMTA 2021, a cargo de Ariel Pola y Federico Zacchigna.
Pese a lo "básico" del curso, se vislumbran "situaciones extremas", donde se muestra el eterno conflico entre La Potencia, La Velocidad y El Área. No es algo a lo que
alguien como yo pueda estar expuesto siquiera con baja frecuencia. Pero
para mí que ya sabía algo de antes por haber cursado CLP, estudiado unos
libros, hecho algunos moocs y practicado en mis experimentos, me
resultó excelente. No sé para alguien que viene de cero FPGA o a alguien
con conocimientos previos como yo pero que le moleste reforzar, cómo le habrá resultado.
Es
como si estuvieras viendo en un curso introductorio de C como usar
assembly, escenario que podría corresponder al de sistemas embebidos de
muy bajos recursos.
A diferencia de los otras actividades similares que he transitado, esta implica un conocimiento mayor
de técnicas digitales, pues estamos hablando de por ejemplo comprender que en el caso
de implementar un multiplicador de una variable por una constante,
se puede eliminar el hardware necesario para los ceros de la constante.
Los detalles finos de estos conceptos vistos superficialmente se ven exhaustivamente en otro curso o materia que se debe llamar algo así como "Digital Advanced Digital Design", que parece ser mucho más difícil, ya veremos si me quedan días de vacaciones y neuronas para cuando llegue.
Aprendí, recordé, reforcé y completé cosas que vengo viendo de algún modo desde hace más de 30 años.
El último día lo sobreviví comiendo exclusivamente chocolate blanco...
Si la medida objetiva de mi satisfacción con un curso está dada por mi grado de participación, en este caso ha sido tan grande que debo incluso haber molestado a los docentes y compañeros de cursada.
Trabajo Práctico
El trabajo práctico es una extensión de los laboratorios desarrollados como tarea durante la cursada, en el momento que escribo esto estoy considerando proponer mi propio trabajo práctico para optimizar mi esfuerzo, pero tengo cierta reticencia en parte para no generarles a los docentes trabajo extra, en parte por que es más difícil y por que el tema que resuelve no coincide con el tema protagonista del curso, que es procesamiento de señales. Ese mismo tema es que me induce a proponer mi propio TP, pues mi ingnorancia del mismo produce que no termine de entender lo que estoy haciendo aunque si cómo lo estoy haciendo.
Logística
Algunos tips de cómo lidiar con algunas fallas.
Para el uso de classroom
- Los archivos que tienen preview como txt y pdf, hay que pedirle abrir en otra ventana y ahí recién ofrece download.
- Hubiese sido más cómodo que un zip con todos los archivos para bajar de un solo tiro
Vivado
Falla al inicio
Tras invocar vivado, este se cierra diciendo que:
Caused by: java.lang.IllegalArgumentException: Window must not be zero
Primero pensé que era por haber estado jugando al Dune2 desde unas semanas antes, no como una especie de castigo divino, es que estaba en un brote procrastinador nulo y en algún momento puse en full screen a dosbox me rompió el multihead y lo restauré.
Luego, encontré referencias a las versiones de java, independientes de la versión de Xilinx, relacionadas a multihead. Hay que desactivar las pantallas adicionales, arrancar vivado, reactivar las pantallas y listo. Igual muy raro porque no me había ocurrido antes con las otras versiones y ahora si me ocurre hasta donde probé.
ILA
Al incorporar el ILA (luego veremos que es eso) fallaba diciendo que ....
WARNING: [Vivado 12-818] No files matched '/home/projects/ej01_ila_vio_v2/ej01_ila_vio_v2.srcs/sources_1/ip/ila_0_1/ila_v6_2/constraints/ila_impl.xdc'
ERROR: [Common 17-55] 'set_property' expects at least one object.
El problema es que ese archivo si existe. Supuse un problema de concurrencia, pero con un solo core también falló.
No se arregló:
- haciendo source de settings64.sh
- iniciando del iconito
- usando un solo core
- primero VIO, luego ILA
- ILA solita
Viendo con más detalle, dice en la consola que ejecutó:
source ila_0.tcl -notrace
tuve que hacer cd hasta el proyecto y ejecutar:
source ./ej01_ila_vio_v3.runs/ila_0_synth_1/ila_0.tcl -notrace
identifiqué dos menciones a ila_impl.xdc, puse un
puts "antes del primer get files"
y obtuve:
source ./ej01_ila_vio_v3.runs/ila_0_synth_1/ila_0.tcl -notrace
INFO: [IP_Flow 19-234] Refreshing IP repositories
INFO: [IP_Flow 19-1704] No user IP repositories specified
INFO: [IP_Flow 19-2313] Loaded Vivado IP repository '/home/user/Xilinx/Vivado/2019.2/data/ip'.
antes del primer get files
WARNING: [Vivado 12-818] No files matched '/home/carlos/Desktop/digital_design/projects/ej01_ila_vio_v3/ej01_ila_vio_v3.srcs/sources_1/ip/ila_0_1/ila_v6_2/constraints/ila_impl.xdc'
ERROR: [Common 17-55] 'set_property' expects at least one object.
Resolution: If [get_<value>] was used to populate the object, check to make sure this command returns at least one valid object.
current_project ej01_ila_vio_v3
Si era un camino muerto, no llegué a enterarme, Federico me pasó esta receta, parece ser que por el locale debe estar cambiando la interpretación de algún caracter, quién sabe:
cd ~/Xilinx/Vivado/2019.2/bin
export LANG=en_US.utf8
export LC_ALL=en_US.utf8
./vivado
Para corregir el launcher, lo editás y ponés en command:
env LANG="en_US.utf8" LC_ALL="en_US.utf8" /opt/Xilinx/Vivado/2019.2/bin/vivado
Quizás alcance sólo con LC_ALL, pero ya se me acabó el tiempo para esa prueba.
Resumen
- Configure display settings
- Disable extra monitors
- Start vivado
- Reenable extra monitors
Algunos aprendizajes
No deseo spoilear el curso, tomalo, pero algunas cositas voy a comentar.
VIO e ILA
Son unos IP Cores que permiten hacer control y monitoréo desde la PC. En lugar de conectarles botones y leds, le conectás VIO y podés prender y apagar y ver los resultados. Con ILA podés obtener muestras de salidas, quizás no logra capturar todo pero medio que alcanza para saber si más o menos está haciendo lo que querés.
Si no tenés la placa y alguien te la presta de modo remoto, como ocurrió en este curso que nos habilitaron varias Arty-A7-35, es obvia la utilidad de este recuros.
¿Para qué querrías hacer esto si tenés la placa?Esto lo exploraré mejor uno de estos días, es parte de mi TP.
No son gratis, ocupan un montón de espacio. Si mal no recuerdo ese manchón no estaba antes de desplegarlos.
VIO-ILA footprint |
Vivado tiene la opción de marcar con distintos colores los distintos componentes pero estoy muy cansado, ¿ya lo dije? Cuándo haga el TP probablemente lo muestre mejor.
Z
Otra cosa que aprendí es que internamente Z es mala palabra, me hubiese venido muy bien saberlo cuando quise hacer la cpu para el bit supervisor.
Notas relacionadas
- Basic Digital Design EAMTA 2021
- Refactorizaciones de MD5 en FPGA: 1 simulación
- Refactorizaciones de MD5 en FPGA: 2 VIO
- Refactorizaciones de MD5 en FPGA: 3 VIO total
- Refactorizaciones de MD5 en FPGA: 4 algunos arreglitos
No hay comentarios:
Publicar un comentario