diff options
Diffstat (limited to 'fpga/xilinx/programmer/bit2svf/templates/README.es')
-rw-r--r-- | fpga/xilinx/programmer/bit2svf/templates/README.es | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/fpga/xilinx/programmer/bit2svf/templates/README.es b/fpga/xilinx/programmer/bit2svf/templates/README.es new file mode 100644 index 0000000..58f47b5 --- /dev/null +++ b/fpga/xilinx/programmer/bit2svf/templates/README.es @@ -0,0 +1,241 @@ +Copyright (c) 2005 Juan Pablo D. Borgna <jpborgna en inti gov ar> +Copyright (c) 2006-2007 Salvador E. Tropea <salvador en inti gov ar> +Copyright (c) 2005-2007 Instituto Nacional de Tecnología Industrial + +Comandos y bloques: + Los archivos de template tienen comandos de bloque y + comandos de operacion. Los comandos de bloque comienzan con + dos signos menos "--" y los de operacion van encerrados entre + signos pesos "$". Los comandos de bloque indican la ejecucion + de un bloque y el fin de bloque debe ser indicado con la + instruccion "--END". + + +Variables internas: + Se proporcionan las siguientes variables internas que pueden + ser utilizadas invocando su nombre entre signos pesos "$" o + modificados si ademas se les asigna un valor entre + parentesis. Ej. $ADDRESS(0x0000)$ le asignara a esta variable + el valor 0x0000. + +$ADDRESS$ : + Acumulador que es util al momento de incrementar la direccion de una + memoria, por ejemplo. + +$STEP$ : + Valor con el cual se incrementara la variable $ADDRESS$. + +$SBYTES$ : + Cantidad de bytes que posee el bitstream del bitfile. + +$SBITES$ : + Cantidad de bits que posee el bitstream del bitfile. + +$MSIZE$ : + Obtenido del campo msize de la definicion del dispositivo en el + archivo DEVICES. + Expresa la ultima posicion de memoria de un dispositivo con memoria. + +$ID$ : + Obtenido del campo id de la definicion del dispositivo en el archivo + DEVICES. + Expresa el IDCODE del dispositivo actual. + +$IDMASK$ : + Obtenido del campo idmask de la definicion del dispositivo en el + archivo DEVICES. + Expresa la mascara que se usara en la comprobacion del IDCODE. + +$BSIZE$ : + Obtenido del campo BSIZE de la definicion del dispositivo en el + archivo DEVICES. + Es el "block size" (cantidad de bits) a transferir expresando + en bits. + Nota: El valor BSIZE y el valor STEP no son cosas separadas. + BSIZE es el tamaño en bits de la cache que tiene el dispositivo + para almacenar los datos antes de transferirlos a la flash. + Cada dirección de memoria direcciona una cantidad de bits (64 + o 128 es lo común), el STEP es el número de posiciones de memoria + que entran en la cache, luego BSIZE=STEP*bits_por_dirección. + Esto es en las XC18V: 32*64=2048 o 32*128=4096. + +$BSIZEB$ : + Obtenido del campo BSIZE de la definicion del dispositivo en el + archivo DEVICES. + Es el "block size" (cantidad de bits) a transferir expresando + en bytes. + +$BSIZEB2$ : + $BSIZEB$ multiplicado por 2. + +Comandos de bloque: + + +--LITERAL START : + Indica que se debe copiar en el archivo de salida el contenido + de este bloque y hasta el final del mismo tal y como esta. + Si se encuentra un comando de operacion entre medio este es + ejecutado. + +--REPEAT START : + Indica que se repetira de principio a fin el contenido de este + bloque mientras que haya informacion que leer en el bitfile + de entrada. + Este comando de bloque debe tener en su interior algun comando + de operacion que lea informacion del bitfile de entrada, si no + este nunca llegara a su fin y el programa se quedara + repitiendo el bloque hasta agotar el espacio en disco. + Con cada iteracion del bloque se incrementa la variable + $ADDRESS$ en $STEP$. + +--REPEAT UNTIL valor : + Indica que se repetira de principio a fin el contenido de + este bloque hasta que la variable $ADDRESS$ tome el valor + pasado como parametro. Con cada iteracion del bloque se + incrementara la variable $ADDRESS$ en $STEP$. + El valor pasado como parametro debe ser multiplo de + $STEP$, si no la condicion de salida del bloque nunca se + conseguira y el programa se quedara repitiendo el bloque + hasta agotar el espacio en disco. + En lugar de valor se puede utilizar una variable: + Ej.: --REPEAT UNTIL MSIZE + + +--END : + Indica el final de un bloque LITERAL, REPEAT o REPEAT UNTIL. + + +Comandos de operacion: + Los comandos de operacion pueden recibir como argumento + el nombre de una variable en lugar de una constante: + Ej.: $FILL(0xFF,BSIZE)$ + +$DATA(ndatabytes)$ : + Escribe en el archivo de salida una cantidad ndatabytes de + bytes del bitfile de entrada expresados en hexadecimal. + +$DATA_INV(ndatabytes)$ : + Escribe en el archivo de salida una cantidad ndatabytes + de bytes del bitfile de entrada, invirtiendo el orden + de los bits del bloque, expresados en hexadecimal. + +$FILL(VAL,TIMES)$ : + Escribe TIMES veces el valor VAL expresado en hexadecimal en + el archivo de salida. + +$REWIND$ : + Vuelve a poner el archivo de bits en la posicion del primer byte del + stream para poder realizar otra pasada completa con un comando de + bloque. + +$CUTLINES(n): + Con 0 deja de cortar las líneas largas, con 1 vuelve a cortarlas. + Otros valores: reservados. + +------------------------------------------------------------------------------- + +Como crear un template para una FPGA: +------------------------------------- + +Autor: Salvador E. Tropea + +A) Crear un .SVF válido para esa FPGA: + +1) Obtener un .bit para la FPGA en cuestión. +2) Abrir el impact: +$ . /usr/local/ISEWb/settings.sh +$ impact +3) Elegir "I want to (*) Create a new project", Ok. (Darle un nombre si se +quiere). +4) Elegir "(*) Prepare a boundary-scan file [SVF]", Finish. +5) Elegir un nombre para el SVF. +6) Elegir el .bit. +7) Presionar el botón derecho sobre la FPGA y elegir "Program", Ok. +8) Salir del impact + +Automáticamente es: + +setPreference -pref AutoSignature:FALSE +setPreference -pref KeepSVF:FALSE +setPreference -pref ConcurrentMode:FALSE +setPreference -pref UseHighz:FALSE +setPreference -pref UserLevel:NOVICE +setPreference -pref svfUseTime:FALSE +setMode -bs +setMode -bs +setCable -port svf -file "salida.svf" +addDevice -p 1 -file "archivo.bit" +Program -p 1 -s -defaultVersion 0 + +B) Crear un nuevo template (ej: alg_Virtex_4.svft) + +1) Abrir un template que ya exista para usarlo de guía. +2) Borrar "FREQUENCY 1E6 HZ;" +3) Reemplazar: $ID$ y $IDMASK$ en la parte que dice "Loading device with +'idcode' instruction.". (f167c093) +4) Reemplazar la megalínea del bitstream por: +SDR $SBITS$ TDI ($DATA_INV(-1)$) SMASK ($FILL(0xFF,-1)$); + +C) Probar su funcionamiento + +1) Colocar el nuevo template en /usr/share/bit2svf/ +2) Editar /usr/share/bit2svf/DEVICES agregando el ID de la FPGA y el algoritmo +a usar: + +// Virtex 4 family (10 bits IR) +XC4VLX25, f167c093, 0fffffff, alg_Virtex_4, VOID, 0l + +3) Probar el template: + +$ bit2svf display_test_lx25.bit v4-b2s.svf XC4VLX25 + +Esto genera v4-b2s.svf que debería ser practicamente idéntico al generado por +impact. +Nota: En este caso observé que el impact agrega 32 bits en 0 extra al +bitstream. Esto no parece ser indispensable y sospecho que sirve para +"limpiar/vaciar" la cadena. +4) Si todo fue OK se puede probar con el dispositivo: + +$ jbit display_test_lx25.bit XC4VLX25 + + +------------------------------------------------------------------------------- + +Como crear un template para una PROM: +------------------------------------- + +Autor: Salvador E. Tropea + +A) Crear un archivo de PROM válido. + +1) Obtener un .bit para la FPGA en cuestión. +2) Abrir el impact: +$ . /usr/local/ISEWb/settings.sh +$ impact +3) Elegir "I want to (*) Prepare a ROM file", Ok. (Darle un nombre si se +quiere). +4) Elegir "I want to target a (*) Xilinx PROM", "PROM File name" darle un +nombre. Next. (Ojo con el path). +5) Elegir la PROM y Add, luego Next. +6) Agregar el .bit +7) Elegir "Generate File ..." dentro de las acciones disponibles (la única). +8) Esto genera un .MCS con el contenido para la PROM. + +B) Crear un .SVF válido para esa PROM. Esto es similar a la FPGA, la única +diferencia es que le especificamos el .MCS en lugar de un .bit. En este caso +nos preguntará cual es el dispositivo haciendo un guess de cual se trata. Esto +es porque el .mcs es un bitstream crudo y no dice para que dispositivo se +hizo. +Durante este proceso se pueden elegir opciones como si la PROM se conecta en +paralelo y si se incluye verificación. Además hay que elegir que primero la +borre. + +B) Crear un nuevo template o usar uno ya hecho. Esto es como con la FPGA. + +C) Probar su funcionamiento. Esto es más o menos lo mismo que con la FPGA. La +principal diferencia con las PROMs es que acá es necesario configurar su tamaño +y el tamaño de la caché o página donde se guardarán temporalmente los datos: + +// XCFxxP memories +XCF08P , f5057093, 0fffffff, alg_XCFP ,8192 , 0x100000 + |