Tabla de contenido:

Arduino como una placa de pruebas barata FPGA: 5 pasos (con imágenes)
Arduino como una placa de pruebas barata FPGA: 5 pasos (con imágenes)

Video: Arduino como una placa de pruebas barata FPGA: 5 pasos (con imágenes)

Video: Arduino como una placa de pruebas barata FPGA: 5 pasos (con imágenes)
Video: ✅ Mejoramos el Arduino UNO !!!! Mira lo que le ... (PCBWay) 2024, Noviembre
Anonim
Arduino como una placa de pruebas barata FPGA
Arduino como una placa de pruebas barata FPGA

Diseñar circuitos lógicos de hardware puede ser divertido. La forma de la vieja escuela de hacer esto era con puertas NAND, en una placa de pruebas, conectadas con cables de puente. Esto todavía es posible, pero no se necesita mucho antes de que el número de puertas se salga de control. Una opción más nueva es utilizar una FPGA (matriz de puerta programable en campo). Estos chips pueden volver a cablearse para convertirse en cualquier circuito lógico digital que pueda diseñar, pero no son baratos ni están fácilmente disponibles. Mostraré cómo esta FPGA se puede reemplazar con un chip Atmega barato de un Arduino UNO, poniendo efectivamente el circuito digital en un paquete DIP, que es muy amigable con la placa de pruebas.

Paso 1: Diseñe el circuito que representará el "FPGA"

Diseñe el circuito que el
Diseñe el circuito que el
Diseñe el circuito que el
Diseñe el circuito que el
Diseñe el circuito que el
Diseñe el circuito que el

Construiré un sumador de 2 bits + 2 bits. Toma dos pares de pines de entrada lógica y genera un triplete de pines de salida.

Para hacer esto con puertas NAND, vea el esquema en la imagen. Necesita 14 puertas NAND. Usé 4 chips TTL de puerta NAND cuádruple y los conecté a la placa de pruebas.

Agregué algunos LED (no olvides las resistencias limitadoras de corriente) para mostrar cuándo los pines de entrada y salida estaban encendidos (alto) y cuando estaban apagados (bajo). Para impulsar los pines de entrada, los conecté al riel de tierra o al riel de alimentación positivo.

Este circuito funciona, pero ya ocupa 4 chips TTL y es un nido de cables. Si se necesitaran más bits, habría más tablas de pan y más puentes. Muy rápidamente, el tamaño del circuito se salía de control.

En una nota al margen, cuando se trabaja con puertas TTL, no emiten exactamente 0 V o 5 V como cabría esperar. Suelen emitir alrededor de 3 V para "alto", pero el voltaje exacto está en un rango muy amplio. El mismo circuito que usa los chips equivalentes CMOS tendría mejor oscilaciones de exactamente 0 V a exactamente 5 V.

Paso 2: Ingrese a la FPGA

Entra en la FPGA
Entra en la FPGA
Entra en la FPGA
Entra en la FPGA

Un FPGA es un chip fantástico, que literalmente puede convertirse en cualquier combinación de puertas lógicas, conectadas juntas en cualquier combinación. Uno diseña el "circuito" en un lenguaje de diseño de hardware (HDL). Existen varios lenguajes de este tipo, uno de los cuales se llama Verilog. El archivo.v de la imagen es el equivalente Verilog del sumador de dos bits. El archivo.pch a continuación también es necesario para asignar los pines de entrada y salida nombrados en el archivo verilog a pines de hardware reales en el chip.

En este caso, estoy usando una placa de desarrollo iCEstick de Lattice Semiconductors (https://www.latticesemi.com/icestick). El chip FPGA real es un iCE40HX-1k, con un poco más de 1000 puertas, cada una de las cuales puede convertirse en cualquier puerta lógica. Eso significa que cada puerta puede ser una puerta NAND, o una puerta OR, NO una puerta, NOR, XOR, etc. Además, cada puerta puede manejar más de dos entradas. Esto es específico de cada fabricante, pero en el iCE40 cada puerta puede manejar 4 entradas. Por lo tanto, cada puerta es mucho más capaz que las puertas NAND de 2 entradas.

Tuve que asignar los 4 pines de entrada y los 3 pines de salida a los pines físicos 91, 90, 88, 87, 81, 80 y 79 respectivamente. Esto es específico para el chip fpga y la placa de ruptura en la que se encuentra, y cómo esos pines están conectados al puerto PMOD. Esto está disponible en las hojas de datos de esta placa FPGA.

Lattice proporciona su propia cadena de herramientas para sintetizar (el FPGA equivalente a la compilación para CPU) circuitos de Verilog, pero yo usé la cadena de herramientas de código abierto libre icestorm (https://www.clifford.at/icestorm/). Las instrucciones de instalación están disponibles en ese sitio. Con icestorm instalado y el archivo verilog y pcf, los comandos para cargar este circuito en la FPGA son:

yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif

arachne-pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc

icepack twoBitAdder.asc twoBitAdder.bin

iceprog twoBitAdder.bin

Esto funciona muy bien, pero incluir el envío de este iCEstick costará alrededor de $ 30. Esta no es la forma más barata de construir un circuito digital, pero es poderosa. Tiene más de 1000 puertas y para este pequeño circuito solo usa 3 de ellas. El equivalente de la puerta NAND utilizó 14 puertas. Esto se debe al hecho de que cada puerta puede convertirse en cualquier tipo de puerta, y cada puerta es en realidad una puerta de 4 entradas. Cada puerta puede hacer más. Si necesita más puertas, el iCEstick tiene un hermano mayor con 8000 puertas, que cuesta aproximadamente el doble. Otros fabricantes tienen otras ofertas, pero el precio puede ser bastante elevado.

Paso 3: de FPGA a Arduino

De FPGA a Arduino
De FPGA a Arduino

Los FPGA son geniales, pero pueden ser costosos, difíciles de conseguir y no son muy amigables con las tablas de pan. Un chip económico y amigable con la placa de pruebas es el Atmega 328 P, que viene en un paquete DIP ordenado, perfecto para la placa de pruebas. También se puede conseguir por alrededor de $ 4. Este es el corazón de Arduino UNO. Por supuesto, podría usar todo el UNO, pero sea barato, podemos sacar el Atmega 328 P del UNO y usarlo solo. Sin embargo, usé la placa UNO como programador para Atmega.

En este punto necesitarás

1. Un Arduino UNO, con la CPU Atmega 328P extraíble.

2. Otro Atmega 328P con el bootloader Arduino pregrabado, para reemplazar el que estamos a punto de sacar del UNO. (Opcional asumiendo que aún desea tener un UNO utilizable).

El objetivo es convertir el archivo verilog en un proyecto arduino que se puede cargar en el 328P. Arduino está basado en C ++. Convenientemente, hay un traductor de Verilog a C ++, llamado Verilator (https://www.veripool.org/wiki/verilator). Verilator está diseñado para que lo utilicen diseñadores de hardware que necesiten simular sus diseños antes de comprometer esos diseños con hardware costoso. Verilator compila el verilog en C ++, luego el usuario proporciona un arnés de prueba para proporcionar señales de entrada simuladas y registrar las señales de salida. Lo usaremos para meter el diseño de Verilog en el Atmega 328P usando la cadena de herramientas Arduino.

Primero instale Verilator. Siga las instrucciones en

También instale el IDE de Arduino y pruebe que se puede conectar al Arduino UNO a través de USB.

Usaremos el mismo archivo verilog que para la FPGA, excepto que es necesario cambiar los nombres de los pines. Agregué un guión bajo (_) al comienzo de cada uno. Esto es necesario porque las bibliotecas de arduino incluyen un archivo de encabezado que traduce cosas como B0, B001, etc. a números binarios. Los otros nombres de los pines de entrada habrían estado bien tal como están, pero B0 y B1 habrían provocado que la compilación fallara.

En el directorio que contiene twoBitAdder.v y iCEstick.pcf, ejecute lo siguiente:

verilator -Wall --cc twoBitAdder.v

Esto creará un subdirectorio llamado obj_dir que contiene varios archivos nuevos. Solo necesitamos los archivos de encabezado y cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h y VtwoBitAdder_Syms.cpp.

En el IDE de Arduino, cree un nuevo boceto llamado twoBitAdder.ino. Esto creará el archivo ino en un nuevo directorio también llamado twoBitAdder, dentro de su directorio de cuaderno de bocetos Arduino. Copie sus archivos VtwoBitAdder.hy VtwoBitAdder.cpp a esta carpeta twoBitAdder en su carpeta Arduino.

Ahora copie los archivos de encabezado de la instalación del verificador.

cp / usr / local / share / verilator / include / verilated *.

finalmente copie en la biblioteca std c ++ desde https://github.com/maniacbug/StandardCplusplus. Según sus instrucciones de instalación Esto se instala como una biblioteca Arduino normal. Descomprime el contenido de la distribución en la carpeta 'bibliotecas' debajo de tu cuaderno de bocetos. Por ejemplo, mi cuaderno de bocetos está en / home / maniacbug / Source / Arduino, por lo que esta biblioteca está en / home / maniacbug / Source / Arduino / libraries / StandardCplusplus.

Asegúrese de restablecer su IDE de Arduino después de instalarlo.

Ahora reemplace el contenido de twoBitAdder.ino con el proporcionado en este paso. Este es un arnés de prueba que espera verilator, que configura los pines de entrada / salida, luego en el bucle, lee los pines de entrada, los alimenta al VtwoBitAdder (la versión traducida de nuestro circuito), luego lee las salidas de VtwoBitAdder y aplica a los pines de salida.

Este programa debería compilarse y ejecutarse en Arduino UNO.

Paso 4: De Arduino a DIP Chip en una placa de pan

De Arduino a DIP Chip en una placa de pan
De Arduino a DIP Chip en una placa de pan

Ahora que el programa se está ejecutando en Arduino, ya no necesitamos la placa Arduino en sí. Todo lo que necesitamos es la CPU.

Retire el Atmega 328P con cuidado del zócalo Arduino UNO y, opcionalmente, inserte su reemplazo.

Coloque el Atmega 328P en la placa de pruebas. Coloque el extremo con el divot apuntando hacia arriba en la tabla de pan. El pin 1 es el pin superior izquierdo. El pin 2 es el siguiente hacia abajo, y así sucesivamente hasta el pin 14 que está en la parte inferior izquierda. Luego, el pin 15 está en la parte inferior derecha, y los pines del 16 al 28 cuentan hacia atrás en el lado derecho del chip.

Conecte los pines 8 y 22 a tierra.

Conecte el pin 7 a VCC (+ 5V).

Conecte un cristal de cuarzo de 16Mhz entre los pines 9 y 10. También un pequeño condensador (22pF) entre el pin 9 y tierra, y entre el pin 10 y tierra. Esto le da al Atmega 328P la velocidad de reloj de 16Mhz. Hay instrucciones en otros lugares sobre cómo enseñar al 328P a usar su reloj interno de 8Mhz, lo que ahorraría un par de partes, pero ralentizaría el procesador.

Los puertos Arduino GPIO 5, 6, 7 y 8, que usamos para los pines de entrada, son en realidad los pines físicos 11, 12, 13, 14 en el Atmega 328P. Serían los cuatro pines inferiores de la izquierda.

Los puertos Arduino GPIO 11, 10 y 9, que usamos para los pines de salida, son en realidad los pines físicos 17, 16, 15 en el Atmega 328P. Serían los tres pines inferiores a la derecha.

Conecté los LED a estos pines como antes.

Paso 5: Conclusión

Conclusión
Conclusión

Los chips TTL funcionan, pero se necesitan muchos para construir cualquier cosa. Los FPGA funcionan muy bien, pero no son baratos. Si puede vivir con menos pines IO y menor velocidad, entonces un Atmega 328P puede ser el chip para usted.

Algunas cosas para tener en mente:

FPGA:

Pro

- Puede manejar señales de alta velocidad. Debido a que no hay CPU para bloquear el procesamiento de una instrucción a la vez, el factor limitante es el retardo de propagación a través de las puertas en el circuito dado. En muchos casos, esto puede ser mucho más rápido que el reloj provisto con el chip. Para mi diseño, el retardo calculado habría permitido que twoBitAdder respondiera a alrededor de 100 millones de cambios en los valores de entrada por segundo (100Mhz) a pesar de que el reloj integrado es solo un cristal de 12Mhz.

- A medida que el diseño se vuelve más complejo, el rendimiento de los circuitos existentes no se degrada (mucho). Debido a que agregar circuitos a la estructura es simplemente poner algo nuevo en un espacio no utilizado, no afecta los circuitos existentes.

- Dependiendo de la FPGA, la cantidad de pines IO disponibles puede ser muy alta y, por lo general, no están bloqueados para ningún propósito en particular.

Estafa

- Puede ser caro y / o difícil de conseguir.

- Por lo general, viene en un paquete BGA que requiere algún tipo de placa de conexión para trabajar con el chip en cualquier proyecto amateur. Si lo está construyendo en un diseño con una PCB SMT multicapa personalizada, esto no es un problema.

- La mayoría de los fabricantes de FPGA proporcionan su propio software de diseño de código cerrado, que en algunos casos puede costar dinero o tener una fecha de vencimiento de la licencia.

Arduino como FPGA:

Pro

- Barato y fácil de conseguir. Simplemente busque atmega328p-pu en Amazon. Deberían costar alrededor de $ 4 / pieza. Varios vendedores los venden en lotes de 3 o 4.

- Este es un paquete DIP, lo que significa que encaja perfectamente en una placa de pruebas con sus pines externos.

- Este es un dispositivo de 5V, que puede facilitar la interfaz con otros dispositivos de 5V.

Estafa

- El ATMEGA328P tiene un número limitado de pines IO (23), y varios de ellos están reservados para tareas específicas.

- A medida que aumenta la complejidad del circuito, aumenta la cantidad de código que se ejecuta en el método de bucle Arduino, lo que significa que la duración de cada ciclo es más larga.

- Incluso si la complejidad del circuito es baja, cada ciclo requiere muchas instrucciones de la CPU para obtener los valores de los pines de entrada, escribir los valores de los pines de salida y volver a la parte superior del bucle. Con un cristal de 16 Mhz, incluso con una instrucción por ciclo de reloj, el bucle no se ejecutará más de 1 millón de veces por segundo (1 Mhz). Sin embargo, para la mayoría de los proyectos de electrónica de aficionados, eso es mucho más rápido de lo necesario.

Recomendado: