El binario que muere es:
/home/jesus/lscc/iCEcube2.2017.01/sbt_backend/bin/linux/opt/edifparser
En mi sistema el MD5 es "aa62b2fa787ee7ca4a922325b38b7693" (md5sum)
La descripción de la FPGA es:
/home/jesus/lscc/iCEcube2.2017.01/sbt_backend/devices/ICE40P04.dev
MD5: 5b423429ac3eb54dc21d69d58e65e8f0
El resultado de la síntesis es: Target_Implmnt/Target.edf
Esto está en el directorio gen. Adjunto lo que tengo yo.
El directorio de salida es: Target_Implmnt/sbt/netlist
Esto veo que el makefile tuyo lo está creando, ya que encontré:
mkdir gen/Target_Implmnt/sbt/netlist
Verificá que este directorio exista y se pueda escribir ahí, si no está
la herramienta muere miserablemente.
Los constraints son: ../lattuino_1.pcf
Adjunto mi copia.
Antes que me olvide, actualicé xiltools, nueva versión 1.3.8-1
Y también hice algunos retoques en los Makefiles, hay que actualizar del
repo.
Hola Jesús:
El 11/05/17 a las 16:37, Jesús Arroyo escribió:
> El jueves, 11 de mayo de 2017, 20:53:00 (UTC+2), Salvador Eduardo
> Tropea escribió:
>
> Antes que me olvide, actualicé xiltools, nueva versión 1.3.8-1
> Y también hice algunos retoques en los Makefiles, hay que
> actualizar del
> repo.
>
>
> Instalando y actualizando...OK
>
> Sugerencia: podrías añadir los directorios /gen al .gitignore para no
> tener que eliminarlos cada vez que haga pull.
Ok, ya lo agregué.
> En caso del lattuino_stick genera un fichero ".cvsignore" que creo que
> no es necesario.
En realidad si, yo uso CVS ;-)
Un usuario de git puede renombrarlo a ".gitignore"
> He visto también que se modifican los Makefiles en caliente. Quizá
> estaría bien que se pasaran como variables de entorno en vez de
> modificar el fichero.
No termino de entender la propuesta.
Los Makefiles se modifican cada vez que se cambia algo que los afecte,
por ejemplo se agrega un archivo al proyecto.
> Lattuino_1 ha generado el bitstream correctamente :) (eso sí, ha
> tardado bastante).
Si, tarda. La síntesis es un proceso lento, en FPGAs grandes puede tomar
horas, más de un día incluso.
> Lattuino_stick no cabe según mi configuración:
>
> Phase 3
> :0: error Unable to fit the design into the selected device. Number of
> PLBs in design = 166, available in device = 160 (E2070)
¡Qué raro! ¿seguro que está actualizado a lo último que está en el repo?
Con el iCEcube2 2016.02 entraba si se le pedía 24 MHz como frecuencia de
target, aún cuando el stick usa 12 MHz. Esto es porque optimizaba más
cosas para lograr los 24 MHz. Con el iCEcube2 2017.01 no entra con 24
MHz, y si con 12 MHz, que es más intuitivo. En lattuino_stick.prj tiene
que decir "set_option -frequency 12". Acabo de hacer una síntesis desde
0 y entró.
Dio lo mismo que figura en lattuino_stick.txt (al final).
[snip]
> Pero lo bueno que ya funciona el mecanismo de sintetizar :), vamos
> avanzando!
:-)
Saludos, Salvador
¿Tengo que configurar algo más?¿Qué programador debo utilizar?
Gracias.
Un saludo.
Hola Jesús!
El 13/05/17 a las 08:10, Jesús Arroyo escribió:
> Buenas!
>
> Le he vuelto a dedicar un ratito al proyecto. En este caso he
> intentado descargar firmdare desde Arduino:
>
> 1. He configurado la placa Lattuino
> 2. He seleccionado Lattuino Stick (2k)
> 3. He seleccionado el puerto /dev/ttyUSB1, que lo detecta como
> Lattuino Kefir I (8K) (quizá esto habría que cambiarlo en la
> configuración)
>
Creo que esto no es una verdadera detección, simplemente le asigna el
primer dispositivo que encuentra, no es que consulte a la CPU.
Lo que creo que hace es ver que hay un FTDI 2232H (por el ID) y se lo
asigna a la primer placa que se comunica usando uno.
> 1. El ejemplo compila bien, pero al hacer upload sale este error:
> avrdude: AVR Part "attiny22" not found.
>
Necesito un poco más de información. En Archivo|Preferencias "Mostrar
salida detallada mientras:" tildá Compilación y Subir.
Enviame todo lo que muestre.
¿Qué versión de la IDE es?
> fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com
> <mailto:fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com>.
> Para publicar en este grupo, envía un correo electrónico a
> fpga-wars-explorando-el-lado-li...@googlegroups.com
> <mailto:fpga-wars-explorando-el-lad...@googlegroups.com>.
Hola Jesús!
El 15/05/17 a las 10:16, Jesús Arroyo escribió:
*
avrdude: AVR Part "attiny22" not found.*
Ahora me acuerdo!!! por este problema es que usé los ATtiny25/45/85 para el Lattuino 1.
Editá tu archivo: /home/jesus/Downloads/arduino-1.8.2/hardware/tools/avr/etc/avrdude.conf
Y agregale esto:
<-- Comienzo agregado
#------------------------------------------------------------
# ATtiny22
#------------------------------------------------------------
part
id = "t22";
desc = "ATtiny22";
has_debugwire = yes;
flash_instr = 0xB4, 0x02, 0x12;
eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
0x99, 0xE1, 0xBB, 0xAC;
stk500_devcode = 0x20;
## avr910_devcode = ?;
## Try the AT90S2313 devcode:
avr910_devcode = 0x20;
signature = 0x1e 0x91 0x06;
reset = io;
chip_erase_delay = 4500;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 1;
hvsp_controlstack =
0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
hvspcmdexedelay = 0;
synchcycles = 6;
latchcycles = 1;
togglevtg = 1;
poweroffdelay = 25;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 100;
resetdelay = 25;
chiperasepolltimeout = 40;
chiperasetime = 0;
programfusepolltimeout = 25;
programlockpolltimeout = 25;
ocdrev = 1;
memory "eeprom"
size = 256;
page_size = 4;
min_write_delay = 4000;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
"a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
"a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x x x x x",
" a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 4;
readsize = 256;
;
memory "flash"
paged = yes;
size = 2048;
page_size = 64;
num_pages = 32;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
" 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
" x x x a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
" x x x a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 32;
readsize = 256;
;
# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!)
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
memory "lock"
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"0 0 0 0 0 0 0 0 o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "lfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x x x x i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "calibration"
size = 1;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 a0 o o o o o o o o";
;
;
<-- Fin agregado
Es una descripción incompleta, pero le dice cuál es el ID.
[snip]
El problema básicamente es que en las versiones recientes del AVRDUDE no existe el MCU attiny22 para descargar, ya que especifica en la documentación:
(*) The AT90S2323 and ATtiny22 use the same algorithm.
En referencia al 2343. Pero al seleccionar el 2343 para hacer el upload me dice que no coincide la firma:
$ /home/jesus/Downloads/arduino-1.8.2/hardware/tools/avr/bin/avrdude -C/home/jesus/Downloads/arduino-1.8.2/hardware/tools/avr/etc/avrdude.conf -v -p2343 -carduino -P/dev/ttyUSB1 -b115200 -D -Uflash:w:/tmp/arduino_build_533023/sketch_may13a.ino.hex:i
[snip]
avrdude: Device signature = 0x1e9106
avrdude: Expected signature for AT90S2343 is 1E 91 03
Double check chip, or use -F to override this check.
avrdude done. Thank you.
Voy a ver que diferencias hay entre el tiny22 y este.
Saludos, Salvador
El 15/05/17 a las 11:07, Jesús Arroyo escribió:
> Buenas Salvador:
>
> Añadiendo a mano la configuración del ATtiny22 puedo descargar
> firmware en el Lattuino Stick :D
Buenísimo!!
>
> Es una pasada compilar C y descargarlo en un "AVR" en la iCEstick!!
Es aún más loco, Sketch es C++ ... clases, miembros, polimorfismo, etc.
>
> PD: creo que sería interesante "migrarlo" al 2343 para que sea
> compatible con las versiones nuevas de avrdude.
Estuve investigando un poco y parece que el 2343 tiene un mecanismo de
memoria flash no paginado. Por lo que habría que cambiar el código del
bootloader. Para evitarlo estoy usando el ATtiny26 que tiene el set de
instrucciones 2.0 y la flash paginada.
Ahora subo los cambios necesarios.
Saludos, Salvador
El 15/05/17 a las 13:30, Jesús Arroyo escribió:
> >
>
> > PD: creo que sería interesante "migrarlo" al 2343 para que sea
> > compatible con las versiones nuevas de avrdude.
>
> Estuve investigando un poco y parece que el 2343 tiene un
> mecanismo de
> memoria flash no paginado. Por lo que habría que cambiar el código
> del
> bootloader. Para evitarlo estoy usando el ATtiny26 que tiene el
> set de
> instrucciones 2.0 y la flash paginada.
> Ahora subo los cambios necesarios.
>
>
> Me parece bien. En cuanto lo actualices dímelo para probar que todo
> funciona OK sin configurar a mano el t22.
Ya está. Hay que actualizar de GitHub y el plug-in desde la IDE.
>
> Saludos, Salvador
>
>
> Por cierto, he probado a utilizar Serial para las comunicaciones con
> el procesador, pero no parece funcionar. Dónde podría ver cómo se hace
> a bajo nivel sin utilizar Serial?
En el bootloader se usa el puerto serie a bajo nivel
(lattuino/bootloader/lattuino_1_bl/bootloader.c)
Hola Jesús:
El 15/05/17 a las 17:24, Jesús Arroyo escribió:
> Buenas de nuevo:
>
> Lo de la licencia no funcionaba porque se renombró automáticamente la
> interfaz eth0 a enp0s25. Para que esto no sea así le paso
> "net.ifnames=0 biosdevname=0" al Kernel en el grub y deja el nombre
> por defecto a eth0. Así puede iCEcube2 detectar la MAC de eth0.
Buen dato. Agregué muchos de tus detalles a:
http://fpgalibre.sourceforge.net/ice40.html#tp14
> He actualizado el Lattuino Stick (t26) y también el paquete del
> Arduino IDE de Lattuino al 1.0.3, eliminando también el parche para
> ATtiny22.
>
> Al sintetizar el bitstream no cambiaba la firma del chip, es decir, lo
> seguía detectacdo como un attiny22:
>
> avrdude: Device signature = 0x1e9106
> avrdude: Expected signature for ATtiny26 is 1E 91 09
> Double check chip, or use -F to override this check.
>
> Luego he eliminado los ficheros del directorio Work ya que me he
> fijado que la firma cambia en el .elf.
Ok, ya subí al repo una versión actualizada.
> Y ha sintetizado correctamente la versión t26!!
> PD: make clean elimina ficheros necesarios para la síntesis,
Es por el uso forzado.
> pero no los de Work.
Los de Work los elimina el Makefile principal.
>
> Por último he probado el ejemplo del Serial. Con la versión anterior
> sólo me enviaba "Ho". Pero he probado de nuevo y ya envía todo el
> string correctamente :D
El problema es que al seleccionar 2 kiB de flash también se selecciona
128 B de RAM. Esto es demasiado poco, en cuanto se usa un poco el lugar
que queda para el stack es muy pequeño y cosas que hagan varias llamadas
a funciones y demás pueden fallar.