Recientemente realicé un largo viaje de diseño de lógica autodidacta. El producto final de esto es una CPU funcional de 16 bits que funciona exactamente como está diseñado en un simulador . Ahora acabo de comenzar a estudiar la posibilidad de ponerlo en silicio a través de un FPGA. Sé que tendré que hacer muchos ajustes en el campo de entrada / salida (el mundo real es diferente al entorno de simulación) y descubrí que hice mi diseño completamente en un programa que no exporta netlists o código HDL entonces todo lo que realmente tengo es un esquema.
Pero, suponiendo que de alguna manera llego a un punto en el que tengo una lista de red o un código HDL de mi diseño, ¿cuál es mi próximo paso para incorporarlo al silicio? Hasta ahora, lo que he leído parece que los FPGA son mi solución, pero mirar los sitios web de Xilinx y Altera me da vueltas. ¿Estoy ladrando el árbol equivocado? Básicamente, estoy buscando una descripción sencilla en inglés de cuál es el siguiente paso para un chico con un esquema funcional de una CPU. Una vez que sepa en qué dirección ir, puedo descifrar los libros y descubrir todo lo que necesito saber sobre cómo llegar allí. También una nota, estoy en Mac OS X pero tengo una caja de Windows XP que puedo conectar si es necesario.
Respuestas:
Felicidades por el diseño de tu CPU. Sí, el FPGA es definitivamente tu próximo paso. Pero no tienes muy claro qué es lo que hace girar la cabeza. Supongo que es la gran cantidad de dispositivos diferentes que se ofrecen. Tampoco dices qué simulador estás usando.
Cuando sintetiza un diseño, el sintetizador debe proporcionarle un informe sobre los recursos utilizados , como el número de compuertas y RAM. Esto debería darle una idea de qué partes son adecuadas para su diseño. Asegúrate de tener suficiente espacio libre . Elija una parte que tenga RAM adicional , que necesitará para ejecutar programas en su CPU.
editar (re su comentario)
Necesita un sistema de desarrollo para un fabricante específico. Altera y Xilinx son los grandes jugadores, y ambos tienen sus creyentes. El que elija no es tan importante, ambos tienen suficientes partes diferentes para satisfacer sus necesidades.
Si elige Xilinx, tiene su software de diseño ISE WebPACK , que es gratis (descarga grande a 3.4GB). Las limitaciones en comparación con las versiones más avanzadas del software no deberían molestarlo en este momento.
Luego necesitas una placa de desarrollo. Debe tener una idea de qué FPGA necesitará para seleccionar uno. Si vas por Xilinx, elegiría un espartano, tal vez un Spartan-6, el Virtex ya es una IMO demasiado alta. Todavía hay muchos para elegir, principalmente diferentes en los extras en el tablero. Querrá una placa con un poco más que unos pocos interruptores y LED. Buscaría un conector de teclado y un módulo de pantalla.
Xilinx tiene varias placas, y para los FPGA de Xilinx también hay Digilent , Avnet , Xess y muchos otros.
Así que compare varias placas (supongo que el precio también influirá) y descargue el software de desarrollo para el FPGA que planea usar. Sintetice su diseño para verificar que se ajuste al FPGA elegido, y luego estará listo para comprar una placa alrededor de este FPGA.
Olvidé contar un poco sobre los FPGA. Un FPGA es básicamente una gran colección de puertas con conexiones programables entre ellas, de modo que puede crear casi cualquier función / sistema lógico con ellas. Durante varias generaciones, los FPGA se hicieron más avanzados y ahora tienen bloques optimizados para crear funciones de manera eficiente como la RAM. El sintetizador de su software de desarrollo crea el diagrama de conexión entre las puertas. Esto no se almacena permanentemente en el FPGA, pero debe cargarse al encenderlo desde una memoria Flash de configuración externa. Ahí es donde se almacenará su diseño. Como cualquier otra memoria Flash, puede borrarse y reescribirse una gran cantidad de veces.
fuente
No estoy familiarizado con las herramientas de Xilinx, pero sí con las de Altera, así que te contaré sobre las suyas. Xilinx y otros no deberían ser muy diferentes.
Verilog
Lo primero que deberá hacer es aprender Verilog . Esto hará que te duela la cabeza porque Verilog (y el VHDL algo similar) se diseñó por primera vez como un lenguaje de simulación , y muchas construcciones (como lo
#5
que significa "esperar 5 pasos de tiempo", un paso de tiempo generalmente es un nanosegundo). Por lo tanto, hay muchas restricciones que debe tener en cuenta para que su código Verilog sea sintetizable , es decir, compilable en un flujo de bits para un FPGA.Sin embargo, la mayor sorpresa es que lo que escribe en Verilog (y VHDL) es el comportamiento que espera del sistema , y el compilador infiere la lógica adecuada de su descripción. Si no tienes cuidado, puedes obtener muchos errores desagradables de esto.
Por ejemplo, un flip-flop D se ve así:
Esto describe cómo funciona un DFF, y el compilador tiene que analizarlo y descubrir que desea un DFF. Se
@(...)
llama una lista de sensibilidad , que es una lista de señales que desencadenan una reevaluación del bloque de código; por lo tanto, en este bloque,Q
solo cambia si hay un flanco ascendenteRESET
oCLK
(esto es para un reinicio activo-alto). Si olvida algo en la lista de sensibilidad (que debe contener todas las variables del lado derecho sin ningunoposedge
onegedge
modificadores para un bloque lógico combinacional) el compilador sintetizará los bloqueos según sea necesario en lugar de llamar a un error. Loco, pero es así, porque Verilog era originalmente un lenguaje de simulación que ocultaba (y por lo tanto no requería) detalles de implementación. VHDL es igual pero mucho más detallado.Finalmente, hace unos años se lanzó una nueva versión de Verilog llamada SystemVerilog que hace que escribir código sintetizable sea mucho, mucho más fácil . Si es posible, aprenda este idioma, ya que Xilinx ISE y Altera Quartus II lo admiten. El principal problema es la falta total de buen material de referencia.
La versión SystemVerilog de un DFF limpia un par de cosas pequeñas:
Tenga en cuenta que las señales en la lista de sensibilidad están separadas por comas. Esto se debe a que
or
era confuso yaand
que no podía funcionar allí. También tenga en cuenta la sustitución de1'b0
(un solo0
bit) con'0
(un símbolo que se expande a la cantidad de0
bits necesarios según lo que se le asigne; mucho más flexible con los módulos parametrizados). Finalmente, observe el reemplazo dealways
(que podría usarse para cualquier cosa; lógica combinacional, pestillos y flip flops) con elalways_ff
que se requiere que el contenido se sintetice en flip-flops. También hay unaalways_comb
que elimina la lista de sensibilidad, ya que solo resuelve las sensibilidades de las entradas al bloque.El software de diseño de Altera se llama Quartus II, y estará buscando la Edición Web . (Las ediciones de suscripción son bastante caras y solo se necesitan para los modelos FPGA más rápidos o más recientes).
La parte triste es que no he encontrado un buen libro sobre el tema. Lo que aprendí lo obtuve juntando cosas de múltiples fuentes, como los libros de Verilog que no hacen un buen trabajo al decirle qué es sintetizable y qué no, y el código de ejemplo. Quartus II tiene un comando "insertar plantilla" que inserta código de plantilla para varias estructuras comunes, desde flip-flops D hasta máquinas de estado.
Hardware de demostración
Una vez que haya implementado su procesador en Verilog, debe compilarlo. Por el momento, deje que Quartus elija el chip (debe elegir la familia; recomendaría el Cyclone IV) y los pinouts. Una vez que se agiliza, sabrás cuánto chip necesitas. Le dirá cuántos elementos lógicos, flip flops, bits de RAM, etc., utilizó. Asegúrese de no tener más del 50% en ninguno de esos; si es así, mire el chip que eligió el compilador y seleccione manualmente el siguiente chip más grande (en elementos lógicos) que tenga al menos tantos pines, y repita hasta obtener una utilización por debajo del 50%.
Luego, compre una placa de demostración que tenga un chip al menos tan grande como el que finalmente construyó. Verifique que tenga los periféricos y / o conectores de E / S que necesitará. No es raro construir una tarjeta secundaria que se conecte a un conector de expansión para proporcionar el hardware que falta.
Ahora que ha elegido su hardware, descubra los pines reales y use el Planificador de pines para colocar las señales correctas en los pines correctos. La placa de demostración tendrá una guía del usuario que le indica qué pines están conectados a qué dispositivos o pines de conector en la placa de demostración.
Una vez que establezca los pinouts, compílelo nuevamente para que use los pin que desee. Tenga en cuenta que algunas señales como los relojes del sistema necesitarán pines de entrada dedicados (por lo que se dirigen directamente a los PLL internos).
Use el programador para descargar su diseño directamente en el FPGA (ese registro de desplazamiento que mencioné hace un tiempo). Ahora estás en el ciclo familiar de depuración de edición, compilación y ejecución. Golpea hasta que funcione.
Una vez que funciona, puede usar el programador para descargar el código en el dispositivo de configuración integrado para que su programa se cargue y se ejecute al encenderlo.
Esto fue bastante largo, y espero que haya ayudado un poco. Hay mucho que aprender; no es como aprender un nuevo lenguaje de programación tanto como es aprender un nuevo paradigma de programación, por ejemplo, pasar de lenguajes procesales a funcionales. Verilog es un lenguaje simultáneo; la mayor parte del código siempre se está ejecutando.
¡Buena suerte!
fuente
Z:= A & (B # C); Z.ar = C & D;
sin tener que preocuparnos por las listas de sensibilidad y demás).Sí, ¡los FPGA son sin duda su solución!
Es casi seguro que necesitará usar uno de los lenguajes de descripción de hardware o volver a ingresar sus esquemas en una herramienta diferente. Recomiendo contra el enfoque esquemático como
Una vez que haya escrito HDL, siempre y cuando no esté insertando directamente cosas de la biblioteca de proveedores utilizando sus diversos "asistentes de IP" o pegando directamente componentes de sus bibliotecas, tendrá un código que puede transferir a otros chips de manera justa fácilmente (mucho más que, por ejemplo, portar C IME incorporado)
Además, tiene un entorno de prueba y validación mucho mejor, ya que puede escribir pruebas que "entiendan" su funcionalidad y puedan verificar los resultados por usted, en lugar de mirar las formas de onda para ver si todo se ve bien.
Los 2 grandes HDL son VHDL y Verilog. Es posible que desee leer esta respuesta sobre cómo difieren ...
VHDL o Verilog?
También diría que vale la pena echarle un vistazo a MyHDL si ya conoces Python: te ofrece una gran capacidad de verificación, pero aún así la mayor parte del control de bajo nivel que proporciona un HDL "normal".
Una vez que elija un HDL y luego lo haga funcionar (¡otra vez, lo siento!) En una simulación, entonces estará en un estado en el que puede impulsarlo a través de las herramientas del proveedor y aprender la próxima gran parte de la tarea, una vez que simule correctamente, siempre hay más esfuerzo de lo que piensas para que se sintetice :)
Si está casado con los esquemas y puede obtener una licencia, LabviewFPGA puede ser adecuado para usted.
fuente
Obtenga una copia de Rapid Prototyping of Digital Systems de Hamblen et al:
http://users.ece.gatech.edu/~hamblen/book/bookte.htm
Utiliza principalmente VHDL, que prefiero a Verilog.
Incluye una CPU muy simple de 8 bits, la uP3, que implementé en mi propio hardware Altera FLEX 10K hace algunos años, usando una edición anterior del libro. Lo portaré a esta placa Cyclone II de $ 25 cuando haga mi PCB del "panel frontal". También incluye un procesador MIPS y Altera NIOS II. Podría realizar los ejercicios de uP3 en el libro con las herramientas gratuitas Altera Quartus II, reescribir el código de su CPU en VHDL y hacerlo funcionar en una placa Cyclone II. Alternativamente, Quartus II tiene una entrada esquemática, y debería poder ingresar su esquema directamente, simularlo y ejecutarlo en el Cyclone II.
fuente
Si la dificultad es una curva de aprendizaje empinada con habilidades de herramientas, entonces siga el camino más fácil. Actel (ahora Microsemi) tiene Libero , el paquete de herramientas FPGA que requieren cero lecturas y son fáciles de usar: inmediatamente después de que lo tenga instalado. En realidad, puede crear esquemas allí a mano y, con unos pocos clics, cargarlo en FPGA físico, las pantallas en el camino para hacerlo se explican por sí mismas.
fuente
Si elige aprender un HDL, el lugar donde se encuentre puede influir en cuál es el mejor idioma. En Europa, VHDL es más popular. En EE. UU., Verilog es más popular, a excepción de la industria de defensa que es VHDL. (El Departamento de Defensa de EE. UU. Creó originalmente VHDL) Eso solo significa que las personas cercanas a usted pueden ayudarlo mejor en un idioma u otro. Pero si está buscando ayuda en línea, eso puede ser irrelevante.
Otros libros a considerar son Rapid Prototyping of Digital Systems: SOPC Edition, que se refiere a las placas Altera DE1 y DE2. Ya hay varias computadoras diferentes portadas a DE1 y DE2, para darle ideas sobre cómo funcionan. Minimigtg68 (Amiga), FpgaGen (Sega Genesis), etc. se portan a esta placa para ver ejemplos.
Si vas a Xilinx, hay dos libros en los que estoy ahora. FPGA Prototyping By Verilog Ejemplos: Xilinx Spartan-3 Version FPGA Prototyping by VHDL Ejemplos: Xilinx Spartan-3 Version Aunque no conozco una placa en particular para recomendar con estos. Estoy entusiasmado con la llegada de una placa, FPGA Arcade, pero olvido si tendrá un Xilinx o algo más.
fuente
Encontré esta variante que sigue desarrollando Logisim, ahora llamada Logisim Evolution. Implementaron una función para exportar a VHDL desde los esquemas de un circuito lógico integrado en logisim.
Se puede encontrar aquí: https://github.com/reds-heig/logisim-evolution
Sé que esta pregunta es antigua, pero me ayudó mucho, y espero que ayude a alguien más.
fuente