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 + | 
