Cómo

Blog

HogarHogar / Blog / Cómo

Aug 10, 2023

Cómo

Los dispositivos lógicos programables complejos (CPLD) contienen los componentes básicos de cientos de circuitos integrados lógicos de la serie 7400. Se pueden diseñar circuitos completos en una PC y luego cargarlos en un CPLD al instante.

Los dispositivos lógicos programables complejos (CPLD) contienen los componentes básicos de cientos de circuitos integrados lógicos de la serie 7400. Se pueden diseñar circuitos completos en una PC y luego cargarlos en un CPLD para una implementación instantánea. Un microcontrolador conectado a un CPLD es como un microcontrolador emparejado con una placa de circuito reprogramable y una tienda de electrónica completamente equipada.

Al principio no estábamos seguros del amplio atractivo y aplicación de los CPLD en proyectos de aficionados, pero estamos convencidos. Un dispositivo lógico personalizado puede eliminar días de lectura de hojas de datos, encontrar la combinación de circuitos integrados lógicos ideal y luego esperar a que lleguen los chips. Las placas de circuito son más simples con CPLD porque un solo chip con ubicación de pines programables puede reemplazar cientos de circuitos integrados lógicos individuales. Los errores del circuito se pueden corregir cargando un nuevo diseño, en lugar de grabar y rellenar una nueva placa de circuito. Los CPLD son rápidos, con tiempos de reacción a partir de 100 MHz. A pesar de su extrema versatilidad, los CPLD son una tecnología madura con chips a partir de 1 dólar.

Tenemos una placa de desarrollo de autoprogramación que se puede grabar en casa para que pueda comenzar. No se preocupe, esta placa tiene una interfaz de puerto serie para trabajar con CPLD y no requiere un programador JTAG separado (generalmente de puerto paralelo).

Introducción a los CPLD

Cuándo utilizar un CPLD

Considere utilizar un CPLD cuando un diseño requiera más de un circuito integrado lógico de la serie 7400. Un CPLD será más económico, más rápido y podrá programarse con su configuración de distribución de pines ideal para PCB más simples.

Utilice un CPLD en diseños complicados que puedan requerir varias iteraciones. Es más fácil diseñar un nuevo circuito en software y cargarlo en el CPLD que diseñar, grabar y rellenar una nueva placa de circuito.

Para máxima velocidad y respuesta instantánea, elija un CPLD. La diferencia de velocidad es asombrosa; Los CPLD comienzan a 100 MHz, mientras que los microcontroladores responden a interrupciones a unos pocos MHz. Los diseños de CPLD forman circuitos que reaccionan a estímulos externos; las reacciones ocurren casi instantáneamente. Un microcontrolador ejecuta código para reaccionar ante eventos, incluso las rutinas de interrupción tienen una latencia comparativamente alta.

CPLD frente a FPGA

Los FPGA son más conocidos que los CPLD, pero comparten muchas características. Esta analogía no es perfecta, pero nos gusta: mientras que los FPGA son un núcleo de procesador reprogramable, un CPLD es una placa de circuito o placa de pruebas reprogramable. Los FPGA reemplazan a los microcontroladores, la memoria y otros componentes. Los CPLD absorben circuitos integrados lógicos y funcionan bien con un microcontrolador.

Fabricantes

Altera y Xilinx, los mayores fabricantes de CPLD, son más conocidos por sus FPGA. Lattice Semiconductor es otro gran fabricante de CPLD con menos seguidores en la comunidad. Atmel fabrica versiones compatibles con pines de CPLD antiguos estándar de la industria.

Si planeas trabajar a 5 voltios, tus opciones son limitadas. Los CPLD Xilinx XC9500 todavía están disponibles como nuevos y antiguos, pero cuestan cuatro veces más que los equivalentes más nuevos de 3,3 voltios. La serie ATF1502 de Atmel funciona a 5 voltios, pero no ofrece un entorno de desarrollo gratuito.

A 3,3 voltios hay más opciones, pero los nuevos CPLD tienen cada vez más un núcleo que funciona a 2,5 voltios, 1,8 voltios o menos. Las series Altera MAXII y Xilinx XC9500XL son probablemente los CPLD de 3,3 voltios más populares. Xilinx también fabrica el CPLD CoolrunnerII, pero solo viene en un paquete TQFP y requiere un suministro separado de 1,8 voltios para el núcleo.

Paquetes

La mayoría de los fabricantes ofrecen uno o dos CPLD en un paquete PLCC 44 apto para aficionados, aunque esto está empezando a desaparecer. PLCC es un chip de montaje superficial de tamaño SOIC con pines en los cuatro lados. Los enchufes PLCC44 suelen estar disponibles en versiones SMD y de orificio pasante. Desafortunadamente, las familias CPLD más nuevas están comenzando a eliminar el paquete PLCC y ofrecen solo chips TQFP de 44 pines y más grandes, como el CoolrunnerII de Xilinx.

Entornos de desarrollo

La mayoría de los fabricantes ofrecen un entorno de desarrollo gratuito que admite la entrada de diseños mediante esquemas simples, así como Verilog o VHDL. Muchos no admitirán los últimos FPGA en la versión gratuita, pero de todos modos solo necesitamos las piezas CPLD. Altera tiene Quartus, Xilinx tiene ISE y Lattice tiene ispLever. Atmel tiene ProChip Designer para la serie ATF15xx, pero solo ofrece una licencia de prueba de 6 meses, que en realidad no nos darían.

Programadores

La placa de desarrollo que presentamos no necesita un programador JTAG aparte porque el microcontrolador PIC ya programa el CPLD. Si quieres un programador externo, los más baratos son los programadores de puerto paralelo: Parallel Cable III para Xilinx y BytleBlaster para Altera. En SparkFun hay clones y esquemas económicos disponibles. OpenOCD es un programador USB JTAG genérico que funcionará con muchos CPLD, FPGA y ARM.

Nuestra eleccion

Finalmente nos decidimos por la serie Xilinx XC9500XL porque tenía un kit de desarrollo económico que podíamos usar para probar nuestro programador JTAG antes de implementar un diseño completo.

El DO-CPLD-DK de Digilent incluye un XC9572XL, un CoolrunnerII y un programador de puerto paralelo. Nu Horizons tiene algunos modelos antiguos sin ROHS por $40, pero debido al manejo descuidado de tipos variables en sus scripts de procesamiento de tarjetas de crédito, no pudimos completar un pedido en línea. Intentamos hacerlo por teléfono, pero se negaron a aceptar un pedido tan pequeño por teléfono, incluso durante un mal funcionamiento del sitio web. Al final, resultó más barato pagar el precio completo en Digikey (#122-1512-ND) después de incluir los exorbitantes gastos de envío de New Horizon. Normalmente no mencionaríamos esto, pero con solo dos lugares para comprar la placa, probablemente valga la pena mencionar nuestra experiencia.

Junta de desarrollo CPLD

Haga clic aquí para obtener una imagen esquemática de tamaño completo (PNG). El circuito y la PCB se diseñan utilizando la versión gratuita de Cadsoft Eagle. Todos los archivos de este proyecto están incluidos en el archivo del proyecto vinculado al final del artículo.

Circuito

Un microcontrolador PIC 24FJ64GA002 (IC1) proporciona la interfaz de programación y de usuario para el CPLD. Usamos este PIC de $4 en muchos proyectos porque la función de selección de pines periféricos hace que el enrutamiento de la placa sea realmente fácil. Consulte nuestra introducción al PIC24F para obtener más detalles. El PIC necesita comunicarse con un puerto serie de PC, por lo que agregamos un transceptor MAX3232 RS232 económico. La interfaz serial debería funcionar con un adaptador USB->serie.

Nuestra elección de CPLD (IC3), un Xilinx XC9572XL (PDF), está conectado entre el PIC y varios otros componentes. Podemos crear una variedad infinita de circuitos entre el PIC y otros chips utilizando la lógica reprogramable dentro del CPLD. El PIC programará el CPLD con el código enviado desde el puerto serie de una PC, pero aun así llevamos los pines JTAG a un encabezado para facilitar la depuración externa.

Un oscilador digital programable (IC4) DS1085 genera frecuencias de reloj entre 8 KHz y 133 MHz, en incrementos de 10 KHz. Es muy similar al DS1077 que cubrimos anteriormente, pero tiene pasos uniformes entre todas las frecuencias. El DS1085 requiere un suministro de 5 voltios (VR2). La interfaz I2C también funciona a 5 voltios, por lo que la conectamos a pines PIC tolerantes a 5 voltios. Es posible utilizar el 1085L de 3,3 voltios y 66 MHz en su lugar y retirar el suministro de 5 voltios.

Usamos un regulador de voltaje SOT223 (VR1) económico de 3,3 voltios para alimentar la mayor parte del circuito. El suministro de 5 voltios (VR2) se puede excluir si utiliza un oscilador 1085L de 3,3 voltios más lento.

Los CPLD se utilizan comúnmente como controladores de memoria, por lo que incluimos 32 K de SRAM (IC5) en la placa de desarrollo. Un pestillo de 3,3 voltios con entradas tolerantes de 5 voltios conecta las entradas de memoria con una amplia gama de voltajes externos (IC6). Las entradas del pestillo se mantienen bajas con una red de resistencia de 1 Mohm (RN1). Discutiremos esta sección ampliamente en un próximo artículo.

tarjeta de circuito impreso

El tablero tiene un diseño casi unilateral. Hicimos varios compromisos para poder crear nosotros mismos un prototipo de este PCB altamente experimental. Presentamos el tablero "tal cual" para otros fanáticos que quieran grabar este tablero en casa. Si envía la PCB a una casa de placas, intente corregir estos problemas antes de producir una placa de doble cara "real".

A un pin de alimentación del CPLD le falta por completo un condensador de desacoplamiento; No había forma de poner un condensador en esa zona. Un condensador de desacoplamiento CPLD y el condensador de desacoplamiento SRAM son piezas de orificio pasante. El uso de estas piezas de orificio pasante eliminó algunos cables de puente.

Los cables de puente en la parte posterior de la placa están optimizados para la producción de una sola cara, en lugar de buenas prácticas de diseño. Simulamos una placa de doble cara soldando el bus de alimentación en la parte posterior. Un diseño real de placa de doble cara debería encaminar el bus de alimentación para evitar cruzar rutas de señal e incluir los condensadores de desacoplamiento que faltan.

Usamos un zócalo de chip PLCC de montaje en superficie, pero una versión con orificio pasante es definitivamente una mejor idea. Pensamos que la versión SMD sería fácil de soldar, pero resultó ser una pesadilla. Realmente queríamos que el CPLD estuviera al frente del tablero para la presentación más genial posible. Una placa de dos caras adecuada con orificios pasantes chapados puede tener un orificio pasante en el frente, pero esto no era posible con nuestro prototipo de placa de una cara.

Lista de partes

Haga clic aquí para obtener un diagrama de ubicación de tamaño completo (PNG).

firmware

El firmware está escrito en C utilizando la versión de demostración gratuita del compilador PIC C30. Aprenda todo sobre cómo trabajar con este PIC en nuestra introducción a la serie PIC 24F. El firmware se incluye en el archivo del proyecto al final del artículo.

Queríamos una manera súper fácil de interactuar con el hardware en la placa sin ciclos interminables de compilación, programa y prueba. Creamos una versión personalizada del firmware Bus Pirate que proporciona una interfaz de terminal ASCII simple para el chip de reloj DS1085 (I2C), la interfaz de programación CPLD (JTAG) y una interfaz de 3 cables (SPI) para el CPLD. Consulte el tutorial de Bus Pirate para conocer información detallada sobre la sintaxis simple utilizada con el firmware.

El firmware original de Bus Pirate maneja varios protocolos que comparten los mismos pines. Para la versión CPLD, cambiamos las asignaciones de pines para que se ajusten a las conexiones en la placa de desarrollo. También eliminamos módulos y opciones no utilizados.

Ejemplos de LED parpadeantes de CPLD

Preparamos varios diseños en el entorno de desarrollo ISE de Xilinx. Los esquemas, los archivos de ubicación de pines y los diseños compilados (XSVF) se incluyen en el archivo del proyecto vinculado al final del artículo. Una explicación completa de ISE está fuera del alcance de este artículo; Los archivos de ayuda nos parecieron lo suficientemente útiles como para realizar estos ejemplos.

El primer diseño simplemente enciende el LED conectado al pin 8 del CPLD.

Prepare el archivo XSVF

XSVF es un formato de programación JTAG comprimido, como lo describe Xilinx en esta nota de aplicación (PDF). XSVF no se limita a programar dispositivos Xilinx y puede prepararse para cualquier chip que proporcione un archivo de definición BSDL JTAG común.

Abra la herramienta de programación iMPACT desde el panel de proyecto de ISE Design Suite en Configurar dispositivo de destino->iMPACT.

Haga clic en el dispositivo y elija el programa; iMPACT grabará las secuencias de programación en un archivo XSVF.

Con el archivo XSVF en mano, es hora de abrir una terminal y programar el CPLD. Nos gustan Tera Term y Hercules en Windows. Debe habilitar el control de flujo XON/XOFF en el cliente para utilizar la interfaz JTAG. La configuración predeterminada del lado de la PC para el terminal de la placa de desarrollo es 115200bps, 8N1.

Hola>m<–seleccionar modo 1. HiZ2. I2C3. JTAG4. MODO DE CABLE RAW3>3<–JTAG900 MODO AJUSTAR602 JTAG LISTOJTAG>(2)<–sonda macro de cadena JTAGxxx JTAG INIT CHAINxxx JTAGSM: RESETxxx JTAGSM: RESET->IDLExxx JTAGSM: IDLE->Registro de instrucciones (RETRASO DE UN BIT PARA TMS)xxx JTAGSM: IR->IDLExxx JTAGSM: IDLE->Registro de datosxxx JTAGSM: DR->IDLExxx JTAGSM: RESETxxx JTAGSM: RESET->IDLExxx JTAGSM: IDLE->Registro de datosxxx INFORME DE CADENA JTAG:0x01 DISPOSITIVO(S)#0x01: 0xC9 0x02 0x06 0x9A<–XC9572XL respondexxx JTAGSM: DR->IDLEJTAG>

En el terminal entramos en el menú modo (m), y elegimos JTAG (3). La macro 2 sondea la cadena JTAG, en nuestro caso es solo el CPLD. El informe de la cadena nos dice que el chip está conectado y respondiendo. Lea más sobre la interfaz JTAG.

Ahora podemos ejecutar el programador XSVF, macro (3), y cargar el archivo XSVF desde la terminal en modo binario. El primer ejemplo simplemente enciende el LED en el pin 8. Si el LED se enciende, podemos verificar que la programación fue exitosa. Si su LED no se enciende, no se desespere; A veces, el programador JTAG se bloquea y una macro de reinicio (1) activa el chip.

LED a pleno brillo.

74LS32/4071 Puerta OR, parpadea a la mitad (/2)

Un componente importante de la placa de desarrollo CPLD es el sintetizador de frecuencia 1085(L) conectado al pin 7 del CPLD. El siguiente ejemplo utiliza una puerta lógica OR, como un IC 74LS32 o 4071, para hacer parpadear el LED cada vez que la señal del reloj es alta. Incluso a la velocidad de reloj más lenta, el parpadeo será demasiado rápido para verlo, pero deberíamos obtener un agradable efecto de atenuación PWM en comparación con el primer ejemplo.

JTAG>m<–seleccionar modo 1. HiZ2. I2C3. JTAG4. MODO DE CABLE RAW3>2<–Interfaz I2C a DS1085900 MODO SET202 I2C LISTOI2C>(1)<–macro de búsqueda de direccionesxxx Buscando espacio de direcciones I2C de 7 bits. Dispositivos encontrados en: 0xB0 0xB1<–encontré la dirección DS1085I2C>

Programe el CPLD como antes y luego cambie al modo I2C para acceder al reloj DS1085. Podríamos buscar la dirección del dispositivo en la hoja de datos, pero ahorramos unos segundos ejecutando la macro de búsqueda de direcciones; el informe nos dice que el chip responde a 0xb0 (escritura) y 0xb1 (lectura).

I2C>{0xb0 0x02 0b00011111 0b10000000}<–preescalador máximo210 CONDICIÓN DE INICIO DE I2C220 ESCRITURA DE I2C: 0xB0 RECIBIDO RECONOCIMIENTO: SÍ220 ESCRITURA DE I2C: 0x02 RECIBIDO RECONOCIMIENTO: SÍ220 ESCRITURA DE I2C: 0x1F RECIBIDO RECONOCIMIENTO: SÍ220 ESCRITURA DE I2C: 0x80 RECIBIDO RECONOCIMIENTO: SÍ240 CONDICIÓN DE DETENCIÓN DE I2CI2C>{0xb0 1 0b11111111 0b11000000}<–divisor máximo210 CONDICIÓN DE INICIO DE I2C220 ESCRITURA DE I2C: 0xB0 RECIBIDO RECONOCIMIENTO: SÍ220 ESCRITURA DE I2C: 0x01 RECIBIDO RECONOCIMIENTO: SÍ220 ESCRITURA DE I2C: 0xFF RECIBIDO RECONOCIMIENTO: SÍ220 ESCRITURA DE I2C: 0xC0 RECIBIDO RECONOCIMIENTO: SÍ240 CONDICIÓN DE DETENCIÓN DE I2CI2C>

El DS1085 es casi exactamente igual al DS1077 que cubrimos anteriormente, pero tiene un oscilador controlado por DAC para pasos uniformes entre todas las frecuencias. Programamos el reloj a la frecuencia más lenta usando los comandos que se muestran arriba. El LED se atenúa mediante el efecto de modulación de ancho de pulso de la señal de reloj.

LED a media luminosidad.

74F269 Contador síncrono de 16 bits, parpadea lentamente (/65535)

Acabamos de programar el CPLD con una puerta lógica O similar a un 74LS32. Ahora vamos a reprogramar el chip con un contador de 16 bits como dos 74F269 en cascada. A $1,15 cada uno, dos Ics 74F269 son más caros que el CPLD XC9572XL. Un contador de 16 bits se activa una vez cada 65535 tics, por lo que un LED conectado al último bit alternará una vez cada 65535/2 tics.

Ahora podemos ver la parte interesante de los CPLD. El CPLD es como una placa de pruebas programable; simplemente sacamos el 74LS32 y colocamos un 74F269, sin comprar piezas, leer hojas de datos, grabar, cablear, etc. Un microcontrolador conectado a un CPLD puede reconfigurar su propia placa de circuito para corregir errores, agregar funciones o reutilizarla para aplicaciones completamente diferentes.

Subimos el nuevo diseño como antes, pero ahora el reloj está dividido por 65535 y el LED cambia aproximadamente una vez por segundo.

Llevándolo más lejosLa próxima vez veremos chips lógicos discretos de la serie 7400 e implementaremos muchos de ellos en el CPLD para crear un rastreador de bus y un analizador lógico de alta velocidad.

Descargar:bitclone.v1.zip

Introducción a los CPLDJunta de desarrollo CPLDParteValorEjemplos de LED parpadeantes de CPLD<–seleccionar modo<–JTAG<–sonda macro de cadena JTAG<–XC9572XL responde<–seleccionar modo<–Interfaz I2C a DS1085<–macro de búsqueda de direcciones<–encontré la dirección DS1085<–preescalador máximo<–divisor máximoLlevándolo más lejosDescargar: