Un dispositivo lógico programable complejo (CPLD) es un componente esencial en tu repertorio de hardware. Como su nombre indica, puedes programar estos chips para que proporcionen las funciones lógicas que necesitas. Esto puede servir para reemplazar chips obsoletos o simplemente para aprender y experimentar con diferentes tecnologías. ¿Qué mejor manera de aprender que usando un CPLD y poniendo a prueba sus capacidades?
Creé un módulo CPLD para poder conectarlo a muchos dispositivos, incluyendo placas de prototipos sin soldadura, pero metí la pata. Parece que el espacio disponible para conectar en la placa de prototipos sin soldadura es de 1,1 pulgadas. He hecho la huella de 1 pulgada de ancho, sin dejar espacio para una fila de cables a ambos lados. Vaya.
Pero permítanme retroceder un poco y explicarles más sobre lo que estoy haciendo. Quiero crear una lógica programable que se pueda construir como un kit, que se pueda soldar fácilmente en casa, que se pueda programar en un circuito y que funcione a 3,3 o 5 voltios.
Para crear un kit fácil de soldar, utilicé un componente CPLD antiguo, disponible también en versiones de 3,3 V y 5 V, que conserva su programación independientemente de la fuente de alimentación. La lógica en sí es un circuito integrado CPLD de la serie Altera Max, disponible en dos versiones, aptas para placas de circuito impreso con 32 o 64 macroceldas. Las macroceldas son los bloques lógicos básicos que se programan mediante "términos" lógicos y se interconectan con otras macroceldas a través de interconexiones programables.
Si observamos el esquema, podemos ver que no tiene mucho contenido: básicamente el CPLD, el circuito de programación en circuito y el oscilador que controla la lógica del CPLD.
Este componente se denomina EPM7032 y EPM7064, y utiliza un encapsulado PLCC (Plastic Lead Chip Carrier) de 44 pines, a veces llamado encapsulado J debido a la forma de J de sus terminales. Este encapsulado se puede insertar en un zócalo pasante o soldar directamente a la placa de circuito impreso (PCB).
Contiene un oscilador integrado, lo que permite al CPLD realizar operaciones con estado y generar contadores rápidos de forma autónoma, sin necesidad de un reloj externo. Si se dispone de un reloj externo, el reloj de alta velocidad del módulo puede utilizarse para generar un evento de reloj en cada flanco ascendente o descendente del reloj externo, siguiendo las directrices del CPLD/FPGA. Es decir, se recomienda utilizar la red de reloj global interna en lugar de la entrada de reloj asíncrona. La tensión de alimentación nominal de este oscilador oscila entre 1,8 y 5,5 voltios.
Si ven el video, verán que hablo sobre mi preferencia personal respecto a cómo manejar el pin "INH" del oscilador; en pocas palabras, después de comprobar que la hoja de especificaciones es válida, tiendo a dejarlo sin conectar.
Al trabajar con este tipo de funciones, entre las razones que me vinieron a la mente estaba mi aversión a conectar los pines de entrada directamente a las líneas de alimentación (si fuera posible). Es decir, prefiero usar resistencias en serie para limitar la corriente durante los transitorios, aunque no sea necesario.
A lo largo de los años, he observado algunos problemas en la producción (lotes grandes), y ocasionalmente, ciclos de encendido y apagado provocaban que los pines conectados directamente a la línea de alimentación tuvieran un voltaje superior al del propio chip, lo cual es perjudicial. Finalmente, conecta el pin a la línea de alimentación mediante una resistencia (ya sea de alimentación o de tierra), y así se puede cambiar de opinión y utilizar el pin posteriormente. Esto es especialmente cierto en mi experiencia con puertas sin usar; probablemente sepas que estas puertas nunca deben dejarse flotando o desconectadas. Mediante una resistencia pull-up, puedes conectar la señal y utilizar la puerta sin cortar las pistas de cobre.
El conector de 10 pines y algunas resistencias forman el circuito de programación. Si todas las resistencias fueran de polarización positiva, usaría una red de resistencias, pero lamentablemente, una está conectada a tierra.
Para programar un CPLD independiente de este tipo, se requiere un programador especializado. Esto me resulta fácil de decir, ya que suelo tener varios a mano, pero si no dispones de uno, no será demasiado complicado empezar. El programador "Altera USB Blaster" homologado cuesta 50 dólares y se puede adquirir en Digikey y otros sitios. Tengo varios clones de eBay, uno de los cuales es compatible con Altera, Xilinx y Lattice simultáneamente. Existe un proyecto y código en internet que puedes usar para crear tu propio clon; lo incluiré en mi lista de posibles vídeos para el proyecto de creación de clones de programadores. También mostraré un diseño de shield en el que se puede programar la placa base, Arduino, PIC, etc.
El software necesario para compilar y programar el CPLD está disponible gratuitamente en Altera, pero este componente antiguo requiere la versión 9.1. Lo bueno es que era mi versión antigua favorita. Tenía un analizador de temporización intuitivo, pero lo eliminaron en una versión posterior.
La placa de circuito impreso (PCB) tiene un diseño sencillo de doble cara; siempre que la placa de circuito impreso quepa, suelo usar cobre para la conexión a tierra y, a veces, para la alimentación. En ocasiones, el proceso de fundición se deforma tanto que puede causar problemas o resultados finales deficientes, por lo que volver a utilizar cobre es una herramienta útil, pero requiere un manejo cuidadoso.
Hoy en día, muchos (si no la mayoría) de los programas CAD incluyen vistas 3D del producto final, aunque la precisión de las imágenes depende de la precisión de los modelos 3D utilizados para representar las piezas. Aquí se puede ver dónde elegí el modelo 3D para el zócalo de 44 pines, el conector de programación y el oscilador. Estos son algunos programas 3D que me gusta usar:
Muchas empresas también cuentan con modelos 3D de sus componentes. Molex es solo un ejemplo de una empresa que ha hecho un buen trabajo en este ámbito.
El error que cometí no afecta la funcionalidad como la estética, y no es el problema principal, es decir, no es adecuado para una placa de prototipos sin soldadura.
Cuando pensé en compartir el diseño, me decepcionaron de inmediato los símbolos del esquema del CPLD y la distribución de pines del conector de 40 pines, que es su huella general. Tomé un símbolo de conector de doble fila de 40 pines y lo ajusté a una huella de 1 pulgada, pero los números de los pines no son 1, 2, 3, 4... sino que aparecen numerados del 1 al 3, 5, 7... como en un encapsulado DIP, al igual que los conectores de cable plano. Por lo tanto, la huella resulta poco intuitiva para determinar cómo conectar el módulo y solucionar problemas.
De forma similar, la asignación de pines del CPLD es algo confusa, así que utilicé un conjunto de utilidades basadas en el lenguaje de descripción de escaneo de límites (BSDL) para crear símbolos. La mayoría de los principales fabricantes ofrecen archivos BSDL para sus componentes más comunes, lo que permite crear símbolos y encapsulados de forma (semi)automática. Como cualquier automatización, debe considerarse una herramienta y puede requerir ajustes adicionales para obtener los mejores resultados. En este caso, dejé que listara los pines en orden alfabético, lo cual es casi aleatorio al rastrear los pines en la placa. Solo puedo decir que estaba muy nervioso ese día.
Estos atajos se pagan caros en algún momento. Cuando modifique este módulo, determinaré y asignaré una ubicación de pines que coincida con la pieza en sí, de modo que saber dónde colocar la sonda del osciloscopio sea tan sencillo como echar un vistazo al símbolo del esquema.
Al usar placas de circuitos impresos, existen otras mejoras, principalmente estéticas o prácticas. El indicador del pin 1 debería ser más común en varios encapsulados, y siempre prefiero un punto de tierra simple para conectar la tierra del osciloscopio o el cable del voltímetro. Podría añadir esto agregando un conector de dos pines para que la alimentación y la tierra se apliquen directamente a la placa en lugar de estar sujetas a los pines inferiores.
Antes de modificar la placa de circuito, quiero asegurarme de que funcione correctamente, tanto física como estéticamente. Tras encenderla y confirmar que el oscilador funciona correctamente, conecté el programador. Aunque la versión de 3,3 V es más reciente que el software de programación, detectó el CPLD y lo mostró como un dispositivo "desconocido".
A continuación, creé un contador en Quartus y le asigné números de pin. La rápida compilación y descarga, así como el funcionamiento del contador observado en el osciloscopio, verifican la viabilidad del diseño.
El circuito de prueba rápido en Verilog es muy sencillo. El código se muestra a continuación. Puede descargar un archivo ZIP que contiene el esquema y el circuito de prueba Verilog como proyecto de Quartus II (requiere la versión 9.1).
Como mencioné, haré una segunda revisión de la placa de circuito para prestar más atención a los detalles necesarios al compartir el diseño o realizar cualquier tipo de solución de problemas. Dado que necesito establecer el ancho del conector inferior a 0,9 pulgadas o menos, puedo seguir configurándolo a 0,6 pulgadas, que es un paquete DIP "ancho" estándar. Hacer esto significa dejar que los pines inferiores sobresalgan de la huella del zócalo CPLD. No haría esto en una situación de producción porque en ese momento se ensambló a mano, pero uno de los objetivos era crear un kit de soldadura manual. La desventaja de la soldadura manual es que el oscilador debe estar en una carcasa SMD de montaje superficial; la versión de orificio pasante es muy grande y generalmente no admite el rango de voltaje que necesito.
¿Es posible usar estos módulos para construir una computadora simple completa? Creo que necesito agregar memoria.
Jaja... sí, depende del tipo de computadora. Sin embargo, los microcontroladores/microcomputadoras "reales" se ven afectados por la "conexión de pines" del módulo, lo que significa que no se puede obtener suficiente información del módulo para hacer algo realmente útil.
He creado un controlador completo de temporización y modo para cámaras NTSC con un tamaño de 64, por lo que no se requiere procesador.
El Verilog estructural y el HDL utilizados en el libro Nand to Tetris son más o menos los mismos.
¿Por qué son importantes las piezas de orificio pasante? ¡Soldar 0805 es fácil! Ahora es el momento para que todo aficionado al bricolaje aprenda esta técnica.
Si hago que el zócalo superior se superponga a los pines soldados desde abajo, entonces puedo usar "6 centros (simulando un chip de 40 pines) o diagonal, etc. Esto será estrictamente soldadura manual de componentes para soldar los cables inferiores del zócalo superior detrás de las patas.
Pero para los principiantes es difícil soldarlo desde abajo. Cuando sueldo los conectores para la PCB de la placa de pruebas (estas placas adaptadoras SMD baratas que se pueden usar en eBay sirven para prototipar), inserto los conectores en la placa de pruebas, luego coloco la PCB encima y así puedo soldar fácilmente. Es muy adecuado para placas de pruebas. Si necesitas soldarlo desde abajo, es aún más difícil.
Si el CPLD está en el centro (puede ser más fácil de cablear), se puede instalar en diagonal sin superponerse, hay 4 filas, o el CPLD puede estar en un lado:
Gracias por el consejo de insertar el conector en la placa de pruebas antes de soldar. El mío es un poco inestable.
¿Qué tal si usamos pines de protoboard en formato DIP en un extremo y el zócalo del chip tipo "dongle" en el otro? El chip se puede colgar en el extremo de la protoboard. El enrutamiento será ajustado.
|####### ******************** |. Sí, decidí usar la versión gratuita de Altera, al igual que Xilinx y Lattice. Necesito terminar el ciclo con Al Williams para entender qué admite el soporte de código abierto, lo cual debe incluir los atributos específicos de la serie de dispositivos. Dicho esto, he hecho mucho con la versión gratuita.
Sí, creo que estás mostrando que el CPLD se superpone con los pines. Si lo entiendo bien, esto podría parecer la revisión 2. Al diseñar para producción (en masa), siempre me da reparo el paso de "ensamblaje de soldadura manual" porque se superponen (en realidad, los pines de soldadura del lado que no es el componente). (Ya es un componente soldado a mano), pero esto es solo un kit pequeño, no un diseño orientado a la producción. Simplemente tengo algunos hábitos que me cuesta dejar a mi edad. 
Creo que una placa de circuito impreso en forma de T con CPLD y componentes pasivos, con una sección ancha en forma de T, será muy útil al colgarla en el borde de la placa de prototipos. Algo similar al Adafruit RasPi T-Cobbler (http://www.adafruit.com/products/2028). Esto permitirá aprovechar al máximo el espacio de la placa de prototipos.
Lamentablemente, su descontinuación limitará severamente su uso en proyectos paralelos, al igual que todos aquellos generadores de funciones basados en XR2206 e ICL8038.
Una idea interesante. Me gustan estos dos chips. El CPLD no está obsoleto, simplemente es una forma más económica de adquirirlo a 3,3 V.
Respecto a tu "tontería"... en realidad no hiciste un nuevo diseño para montarlo en la placa de pruebas. Simplemente coloca primero el cable en la placa de pruebas y luego el cable CPLD sobre el cable. O, si puedes quitar las tiras de alimentación y tierra de una de ellas, usa dos placas de pruebas.
Sobre Altium y Eagle. ¿Has considerado KiCad? No tiene limitaciones que justifiquen tu preferencia por Altium sobre Eagle, y por defecto genera errores DRC para todos los pines no conectados. Si realmente quieres abrir un pin, tienes que indicárselo. (Quizás solo para entrada, no para salida, y aún no se ha comprobado). Otra gran ventaja es su facilidad de aprendizaje. Me llevó solo una tarde, y el excelente manual introductorio me ayudó a empezar.
Prefiero los componentes SMD (de mayor tamaño) a los de orificio pasante. Son más fáciles de usar. No es necesario girar la PCB constantemente (se cometieron algunos errores tontos por el efecto espejo...). Además, no es necesario cortar el terminal de la resistencia. Al compartir un diseño, se pueden colocar varios encapsulados en una PCB o en un solo componente. Resistencia SMD de orificio pasante (aunque esto complica un poco el diseño).
Utilicé el manual "KiCad Getting Started" en formato PDF. La versión antigua que usé tiene 29 páginas, y la última versión tiene 52. Puedes encontrarlo en otros tutoriales (incluidos enlaces a vídeos): http://kicad-pcb.org/help/tutorials/
Sé que [Chris Gemmell] de Hackaday y The Amp Hour hizo una serie sobre KiCad http://kicad-pcb.org/help/tutorials/
KiCad podría ser útil; veamos qué sucede en la versión 2. Gracias por sus sugerencias. Las entradas no conectadas son beneficiosas para la verificación de reglas de diseño (ERC), y para los conectores y otros elementos que las mantienen activas o de entrada/salida, generalmente se pueden evitar la mayoría de los mensajes de desconexión de CAD.
Realicé una prueba rápida y coloqué el conector en una tabla vacía, ejecuté las anotaciones y la verificación de reglas de diseño (DRC). Me dio errores de DRC para cada pin. Sin embargo, marcar los pines que se sabe que no están conectados es muy sencillo.
Configurado en pasivo. Tengo que buscar (Editar componente -> Editar con editor de biblioteca. El editor de biblioteca abre y carga tu componente en una ventana separada, puedes revisar o cambiar cualquier parte del componente. El componente cambiado se puede guardar o actualizar en tu esquema. Esto hace que sea muy fácil cambiar componentes. No me importa mucho la biblioteca. Por ejemplo, si usas cpld, quieres asignar nombres significativos a los pines. Más importante aún, hay una buena interfaz para diseñar tus propios componentes.
En el ERC de KiCad, los pines "no conectados" son un tipo de pin diferente a los "pines pasivos", y todos los pines "no conectados" generarán errores. El funcionamiento del ERC se puede ajustar fácilmente a sus preferencias: Herramientas -> Comprobador de reglas eléctricas -> Opciones.
Fecha de publicación: 18 de noviembre de 2021





