# Dudas novato con CPLD y FPGA



## Antoniovilla (Jul 9, 2011)

Hola a todos:



Después de llevar bastantes años programando microcontroladores, he decidido meterme con la lógica programable, creo que hay cosas que no se pueden hacer con micros, pero con FPGA y CPLD resultan posibles y muy rápidas.

He empezado comprando un kit de desarrollo Spartan 3A de Xilinx, y por otra parte necesito programar unos CPLD para los que tengo el binario (si es que se le llama así).

Mi duda sobre el CPLD, es que cable necesito para programarlo, en concreto es una Altera EPM3128ATC100. He estado mirando el USB-Blaster, pero no estoy seguro si me sirve, ni tampoco si el cable incluye el software para programar el CPLD o necesito algún software adicional. En principio, para los CPLD, no quiero desarrollar programas, solo necesito programarle el binario que ya tengo. Por otra parte, me he descargado el Quartus II, no se si será necesario, solo para programar el CPLD. Tal vez más adelante compre también un kit de desarrollo.


Mi duda sobre los FPGA, es relativa a donde se almacena el programa. He empezado a realizar las primeras prácticas con el Spartan 3A, y para mi sorpresa, veo que lo programo y todo OK, ejecuta el programa, pero que al apagarlo el programa se pierde. Entiendo pués que el programa se almacena en alguna memoria volátil (RAM supongo). Busco informaciòn por Google, y parece ser que el FPGA debe de cargar el programa de una memoria externa, aunque parece que las Spartan 3AN si que tienen memoria flash interna.

La cuestión:
Si el programa se carga en la FPGA desde una memoria externa, ¿ no queda a la vista para que cualquiera lo pueda copiar ?. Yo creo que cuando uno crea un diseño, sobre todo para aplicaciones comerciales, no quiere que el código objeto lo puede leer y copiar cualquiera, por lo que no entiendo como el código objeto del FPGA se carga en una memoria externa, perfectamente accesible a cualquiera.



Saludos.


----------



## Ferny (Jul 9, 2011)

Para la primera pregunta, con un USB Blaster sí puedes hacerlo, también con un ByteBlaster que funciona con puerto paralelo, ambos son compatibles. Si lo necesitas y viendo que eres de España te podría conseguir un ByteBlaster, sólo dímelo si es así.

Como no vas a desarrollar "programas" (no me gusta llamarlos así porque no lo son XD), en principio el Quartus II no lo necesitas. Te sirve únicamente con el Quartus II Programmer, el cual te puedes bajar gratuitamente de la página de Altera: https://www.altera.com/download/software/prog-software/11.0sp1 (La versión 11 SP1 es una versión muy nueva, no la he probado pero imagino que será como las antiguas). El Programmer viene incluido con el Quartus II, pero también vienen todas las herramientas de desarrollo que no necesitas ahora, es decir sería matar moscas a cañonazos...

En cuanto a lo de Xilinx, las FPGA, al contrario que las CPLD, almacenan la configuración en memoria volátil, la cual se borra al apagar y encender. Para que mantengan la configuración, el "programa" se tiene que grabar en una memoria flash externa a la cual la FPGA accede automáticamente durante el arranque, volviendo a configurarse entonces como estaba al apagar.

En tu caso, una vez compiles el .bit, con el iMPACT tienes que usar el PROM File Formatter para convertir el .bit en un .mcs típicamente, que es el archivo que se guarda en la memoria Flash. Hay que darle algún parámetro de configuración, por ejemplo qué tipo de memoria Flash es, pero nada complicado, aun así te recomiendo que mires algún tutorial de cómo hacerlo, o de todas formas si lo intentas y no lo consigues, te podría echar una mano.

Desde el mismo programador accediendo por JTAG te debería aparecer tanto la FPGA como la Flash, por lo que únicamente tendrías que dejar la FPGA vacía y poner el .mcs en la Flash, con eso queda grabada y se mantendrá la configuración al rearrancar. Luego en concreto la placa de Xilinx Spartan 3 tiene unos jumpers que permiten seleccionar la Flash de arranque para la FPGA, eso puede ser una fuente de error si no están bien seleccionados, consulta el manual por si acaso...

Sobre las copias, es posible encriptar el código que va en la memoria Flash y que luego la propia FPGA lo desencripte internamente cuando acceda a la Flash para leer ese código, nunca lo he hecho pero sí sé que existe tal opción, es una protección del código para evitar las copias. Evidentemente en productos industriales donde exista la competencia sí que se usa...

Un saludo


----------



## Antoniovilla (Jul 9, 2011)

Gracias Ferny, me has aclarado bastantes dudas que tenía.

Sobre el programador, creo que será mejor la versión por USB, el puerto paralelo creo que ya no lo instalan los portátiles, y probablemente pronto desaparezca definitivamente, incluso en los PC de sobremesa.

Creo que pediré el USB Blaster a Amidata o Farnell.


Sobre el tema de los FPGA, esto de que el código tenga que ir cargado en una memoria externa, me parece bastante incómodo, sobre todo porque complica innecesariamente el diseño del PCB, teníendo que añadir un chip más. Creo, corrígeme si me equivoco, que las Spartan 3AN si que llevan flash interna para almacenar el código.

En cuanto a las CPLD, ¿ si que almacenan el código en flash interna siempre ?.

He creido entender, por lo que llevo leído, que las FPGA tiene muchas más puertas que las CPLD, pero sin embargo son más lentas. Lo de cargar, las CPLD, el código en flash interna, me parece una ventaja importante sobre las FPGA, y simplifica el ruteo del PCB.

Me descargué el Quartus II, lo he arrrancado, y me ha parecido muy similar al ISE de Xilinx, veo que el VHDL también se utiliza en las CPLD, y la entrada como esquemas.

Ahora mismo estoy indeciso, si seguir con las FPGA, o meterme antes con las CPLD, el lenguaje de programación supongo que sería el mismo, el VHDL.


El proyecto que estoy diseñando actualmente, consiste en un circuito que recibe a través de varias lineas, una serie de datos en serie. El circuito original alimenta unos shift register que terminan visualizando unas animaciones sobre una pantalla con matrices de LED.

La idea es reemplazar esa tecnología, por un panel TFT, controlado por LVDS. Mi diseño actual, que aún no tengo probado, usa un PIC32, pero tengo muchas dudas, sobre si tendrá la velocidad suficiente para manejar el panel, sacando imágenes estables, sin que parpadeen. Segun el datasheet del controlador LVDS y del panel, hay que enviar toda la información con una señal de reloj mínima de 30MHZ, o las imágenes parpadearán.  Aunque la placa ya la tengo, no la he montado todavía, ni he programado el PIC. No se si funcionará, y por si acaso, ya me voy preparando con los FPGA, para hacer un nuevo diseño.


Por cierto, una duda más que tengo, a ver si lo sabes.
El entorno de Xilinx, instala unos cuantos aplicativos, entre ellos el ISE, el resto creo que son de pago, y aunque todos los iconos aparecen en el escritorio, cuando trato de ejecutarlos me piden una licencia, que supongo hay que comprar.

¿ solo el ISE es gratuito ?

Leyendo, he encontrado algo que me ha parecido muy interesante, me refiero al Microblaze, un procesador que iría dentro del FPGA, para hacer desarrollos como se programaría un microcontrolador, por ejemplo en C. Pero creo que también es de pago, ¿ me lo puedes confirmar y que precio tiene ?.



salu2.


----------



## Ferny (Jul 9, 2011)

> Gracias Ferny, me has aclarado bastantes dudas que tenía.
> 
> Sobre el programador, creo que será mejor la versión por USB, el puerto paralelo creo que ya no lo instalan los portátiles, y probablemente pronto desaparezca definitivamente, incluso en los PC de sobremesa.
> 
> Creo que pediré el USB Blaster a Amidata o Farnell.


Te recomendaría comprarlo por Ebay, te saldrá muchísimo más barato. Te hablo de que los USB Blaster originales que compramos hace un tiempo en mi trabajo nos salieron cerca de 200 euros la unidad, cuando en Ebay los puedes conseguir fácilmente por 20€ y funcionan igual...



> Sobre el tema de los FPGA, esto de que el código tenga que ir cargado en una memoria externa, me parece bastante incómodo, sobre todo porque complica innecesariamente el diseño del PCB, teníendo que añadir un chip más. Creo, corrígeme si me equivoco, que las Spartan 3AN si que llevan flash interna para almacenar el código.


Falso, no llevan flash interna, la configuración se guarda en memoria externa. La tarjeta que tú tienes lleva incluidas varias memorias Flash, si no recuerdo mal lleva una por JTAG y dos por SPI, que las usas para guardar el "programa".

No sé si habrá algún modelo de FPGA que sí tenga flash interna, supongo que en este mundo habrá de todo, pero al menos yo no conozco ni he trabajado nunca con una FPGA que tenga memoria no volátil... Ciertamente sería una ventaja no depender de una flash externa, pero no sé, algún motivo habrá para que se hayan diseñado así.



> En cuanto a las CPLD, ¿ si que almacenan el código en flash interna siempre ?


Creo que es memoria EEPROM, no flash, pero en definitiva sí, es una memoria no volátil.



> He creido entender, por lo que llevo leído, que las FPGA tiene muchas más puertas que las CPLD, pero sin embargo son más lentas. Lo de cargar, las CPLD, el código en flash interna, me parece una ventaja importante sobre las FPGA, y simplifica el ruteo del PCB.


Más o menos, una CPLD suele ser mucho más pequeña que una FPGA, tienen menos componentes internos (flip-flops, memoria RAM, multiplicadores...) pero a cambio se pueden conseguir mayores velocidades. De todas formas, las FPGA las he manejado a 100MHz sin problemas y yendo más que sobradas, depende de para qué aplicación es más que suficiente. Ten en cuenta además que las FPGA tienen ciertas ventajas sobre los CPLD, como la presencia de multiplicadores internos, cosa que un CPLD no suele tener y que consume muchísima lógica interna cuando le pones uno...



> Me descargué el Quartus II, lo he arrrancado, y me ha parecido muy similar al ISE de Xilinx, veo que el VHDL también se utiliza en las CPLD, y la entrada como esquemas.


A mi no me parecen tan iguales, el Quartus II me parece muchísimo más intuitivo y amigable que el ISE, he usado los dos y siempre recomiendo Altera sólo por su entorno de desarrollo. Quizá para alguien que empieza la diferencia no sea mucha, pero cuando haces cosas más de experto, a veces el Xilinx te desespera... Eso sí, considero a Xilinx como una herramienta más potente, pero si esa "potencia" no la saben poner fácilmente a disposición del usuario, no me sirve...



> Ahora mismo estoy indeciso, si seguir con las FPGA, o meterme antes con las CPLD, el lenguaje de programación supongo que sería el mismo, el VHDL.


Es lo mismo, programas en VHDL o Verilog, el compilador ya se encarga de interpretarlo y generarte el código para el dispositivo... Si trabajas con CPLD no te costará nada pasar a FPGA, y viceversa.



> El proyecto que estoy diseñando actualmente, consiste en un circuito que recibe a través de varias lineas, una serie de datos en serie. El circuito original alimenta unos shift register que terminan visualizando unas animaciones sobre una pantalla con matrices de LED.
> 
> La idea es reemplazar esa tecnología, por un panel TFT, controlado por LVDS. Mi diseño actual, que aún no tengo probado, usa un PIC32, pero tengo muchas dudas, sobre si tendrá la velocidad suficiente para manejar el panel, sacando imágenes estables, sin que parpadeen. Segun el datasheet del controlador LVDS y del panel, hay que enviar toda la información con una señal de reloj mínima de 30MHZ, o las imágenes parpadearán.  Aunque la placa ya la tengo, no la he montado todavía, ni he programado el PIC. No se si funcionará, y por si acaso, ya me voy preparando con los FPGA, para hacer un nuevo diseño.


Vete pensando en FPGA y olvida un CPLD para eso. Los CPLD están más para hacer funciones lógicas con puertas AND, OR, NOT, etc... y no para circuitos síncronos complejos como el que parece que quieres hacer. Si tienes que poner algo de RAM o un multiplicador, directo a FPGA. Los circuitos que puedes implementar en una CPLD están mucho más limitados.



> Por cierto, una duda más que tengo, a ver si lo sabes.
> El entorno de Xilinx, instala unos cuantos aplicativos, entre ellos el ISE, el resto creo que son de pago, y aunque todos los iconos aparecen en el escritorio, cuando trato de ejecutarlos me piden una licencia, que supongo hay que comprar.
> 
> ¿ solo el ISE es gratuito ?


Tanto Xilinx como Altera tienen una versión gratuita de sus "suites" de programación, éstas te permiten generar código para una serie de dispositivos de "gama baja". Es sobre todo para estudiantes, que no necesitan las funciones más complejas de esas "suites" y por eso las hacen de pago. Cuando te quieres meter con una FPGA/CPLD potente, ya no valen y necesitas la versión de pago.



> Leyendo, he encontrado algo que me ha parecido muy interesante, me refiero al Microblaze, un procesador que iría dentro del FPGA, para hacer desarrollos como se programaría un microcontrolador, por ejemplo en C. Pero creo que también es de pago, ¿ me lo puedes confirmar y que precio tiene ?.


Es de pago, el precio no lo sé pero seguro que con tu sueldo de varios meses no lo pagas. Tienes el Microblaze en Xilinx y el Nios en Altera, son microprocesadores "soft", es decir modificables a través del código (les puedes cambiar el tamaño de caché, pipeline, etc. desde la propia aplicación). Xilinx también tiene FPGAs que traen microprocesadores powerpc "hard" dentro de la FPGA, éstos no son modificables (son microprocesadores ya grabados en el propio silicio, que los puedes usar o no). Ahora mismo no sé si Altera tiene algún equivalente a estos últimos...

Saludos


----------



## Antoniovilla (Jul 10, 2011)

Ferny dijo:


> Te recomendaría comprarlo por Ebay, te saldrá muchísimo más barato. Te hablo de que los USB Blaster originales que compramos hace un tiempo en mi trabajo nos salieron cerca de 200 euros la unidad, cuando en Ebay los puedes conseguir fácilmente por 20€ y funcionan igual...




Gracias, no sabía que estas cosas estuvieran en Ebay.
Lo he localizado, por 11 dólares en Ebay, de los chinos, vaya ganga de precio, en Amidata me pedían 260 euros. Supongo que viniendo de los chinos, serán clónicos, pero bueno si funcionan igual, vale la pena, el ahorro es brutal.

Ya de paso he estado mirando en estos vendedores chinos, y tienen bastantes cosas interesantes, algunas placas con CPLDs y FPGAs, en plan arduino, muy interesantes y baratas, me voy a traer unas cuantas para prácticas, un programador JTAG para las Spartan, unos conversores DC-DC conmutados de 3A... vamos el paraiso del electrónico a precio de piruleta.




> Falso, no llevan flash interna, la configuración se guarda en memoria externa. La tarjeta que tú tienes lleva incluidas varias memorias Flash, si no recuerdo mal lleva una por JTAG y dos por SPI, que las usas para guardar el "programa".



¿ La Spartan 3AN no lleva memoria interna para cargar el programa ?, yo tengo la 3A, creo que la diferencia entre ellas está en esa memoria. En la página de Xilinx, hay un comparativo de características de 3A, 3AN y 3E, en la 3AN pone "Integrated Flash memory --	11Mb". Lo que me extraña es que la 3E, que entiendo es superior, no lleve esa memoria.




> Es de pago, el precio no lo sé pero seguro que con tu sueldo de varios meses no lo pagas. Tienes el Microblaze en Xilinx y el Nios en Altera, son microprocesadores "soft", es decir modificables a través del código (les puedes cambiar el tamaño de caché, pipeline, etc. desde la propia aplicación). Xilinx también tiene FPGAs que traen microprocesadores powerpc "hard" dentro de la FPGA, éstos no son modificables (son microprocesadores ya grabados en el propio silicio, que los puedes usar o no). Ahora mismo no sé si Altera tiene algún equivalente a estos últimos...



¿ y no existe algo similar, pero gratuito ?.
Buscando por Google, en Wikipedia, ponen varios clones del Microblaze (myBlaze, SecretBlaze, Openfire), lo que no se es si son también de pago.

Al hilo de esto, aunque no estoy seguro si tiene relación, ¿ podría meter un Linux dentro de un FPGA ?, ¿ necesitaría Microblaze para hacerlo ?.


Saludos y gracias por todo, muy interesantes y de gran ayuda tus repuestas.


----------



## Ferny (Jul 10, 2011)

> ¿ La Spartan 3AN no lleva memoria interna para cargar el programa ?, yo  tengo la 3A, creo que la diferencia entre ellas está en esa memoria.


Que no, que no tienen XDD Si no te fías de mi bájate el datasheet y lo compruebas.

Tu tarjeta de evaluación Spartan 3AN sí trae integradas varias memorias Flash externas a la FPGA, como decía me parece recordar que una conectada por JTAG (la memoria principal, una XCF16S, que es la que en principio usarías para guardar el "programa") y otras dos por SPI (una de ST y otra de ATMEL), pero la FPGA en sí, el chip de Xilinx, no tiene memoria no volátil. Por eso si por ejemplo alguna vez diseñaras tu propia tarjeta, no sólo tendrías que poner la FPGA sino su Flash de configuración. En el caso de la tarjeta de evaluación, ya las trae, porque si no sería un engorro para los usuarios.



> ¿ y no existe algo, similar pero gratuito ?.
> Buscando por Google, en Wikipedia, ponen varios clones del Microblaze  (myBlaze, SecretBlaze, Openfire), lo que no se es si son también de  pago.


Claro que hay cosas gratuitas, incluso tú te podrías hacer tu propio procesador. Ten en cuenta que hablamos de código fuente, que te lo puedes hacer tú o bajar ya hecho (pagando o gratuito), y luego el compilador se encarga de interpretarlo, pero el compilador no sabe si lo has comprado, lo has pirateado, o es gratuito... para él son muchas líneas de código VHDL y nada más.

La ventaja del microblaze es que está totalmente integrado en la "suite" de Xilinx, es decir puedes hacer todo desde ella (compilar el micro, hacer el programa que va a correr en C ó C++, compilar el programa, depurarlo, etc.), sin embargo con otros micro que no sean de Xilinx tienes el problema de que te lo tienes que guisar tú todo o rezar para que el creador de ese otro micro te dé herramientas que se puedan usar con el Xilinx ISE.

Por ejemplo en mi proyecto fin de carrera utilicé un micro Leon3, basado en arquitectura Sparc, lo podrías conseguir en http://www.gaisler.com/cms/ y probablemente hasta tengan una versión para meter directamente a tu placa de evaluación. De esto hace 4 años, era gratuito entonces y no sé si lo seguirá siendo. Yo tuve suerte de que la placa que usaba para mi proyecto sí tenía una versión de Leon3 disponible en esa web, con lo cual fue todo muy sencillo ya que prácticamente me daban todo hecho.



> Al hilo de esto, aunque no estoy seguro si tiene relación, ¿ podría  meter un Linux dentro de un FPGA ?, ¿ necesitaría Microblaze para  hacerlo ?.


Claro que sí, hay miles de proyectos en la red, sólo dale una búsque da google... el uclinux es bastante utilizado y encontrarás mucha información. Y no tiene que ser necesariamente en microblaze, bastaría en este ejemplo que utilices un micro que sea tanto compatible con uclinux como que lo puedas sintetizar en la FPGA.



______________________________________________________________________




Bueno pues cuando tienes razón, la tienes, efectivamente la spartan 3AN tiene memoria flash interna, por eso me había curado yo en salud cuando dije "en este mundo tiene que haber de todo" XDDD No sabía que la N significaba que tiene flash interna, mira una cosa que aprendo hoy!!

Pero vamos, que lo normal es que no tengan Flash interna


----------



## Americo (Jul 10, 2011)

Ya se que no viene al tema pero, muchas gracias ferny es una grandiosa informacion la que brindas.

tubiera una pequeña consulta compañero, algo ingenua y muy torpe

utilizo quatusII 9.1 para programar una tarjeta de estudio de altera y el ise web pack12.1 para una xilinx spartan 3an.   ¿Necesariamente tengo que utilizar estos 2 programas para cada tarjeta por separado?, no hay un programa  que "programe" ambas tarjetas.


----------



## Ferny (Jul 10, 2011)

Cada fabricante tiene el suyo y vale sólo para sus propios dispositivos, el Quartus es para Altera y el Ise para Xilinx.

Si existe algún programa que sirva para ambos, lo desconozco.


----------



## Sidecar940 (Ene 4, 2013)

Hola, estoy haciendo un "invento" y necesito un CPLD, para ser mas exactos un XC9536XL, mis preguntas son:

1- Donde puedo comprar 1? (Soy de España)

2- Que programador puedo usar para programarlo? (El archivo con el "programa" esta en formato JDEC)

3- Donde puedo comprar dicho programador?

No se si puedo poner un link a otra pagina, si puedo os pongo el link del "invento que quiero hacer y me decís mejor que necesito.

Muchas gracias a todos.


----------



## chclau (Ene 5, 2013)

Bueno, me parece que lo mejor que podrias hacer es buscar distribuidores o representantes de Xilinx en Espania, ya sea en guias tecnicas locales o en el mismo sitio de Xilinx:

Avnet Iberia S.A.
C/Chile,10, plta. 2ª, ofic 229
Edificio Madrid 92
E-28290 Las Matas (Madrid)
Phone: +34 91 372 71 00
Fax: +34 91 636 97 88
madrid@silica.com

Avnet Iberia S.A.
C/Mallorca, 1 al 23, 2ª plta.1A
E-08014 Barcelona
Phone: +34 93 327 85 30
Fax: +34 93 425 05 44
barcelona@silica.com

Avnet Iberia S.A.
Plaza Zabalgane, 12, Bajo Izqda.
E-48960 Galdàcano (Vizcaya)
Phone: +34 944 57 27 77
Fax: +34 944 56 88 55
bilbao@silica.com


----------

