Cómo obtener un diseño de procesador en FPGA

20

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.

Rory O'Hare
fuente
¿En qué programa hiciste tu diseño? Puede haber convertidores de terceros por ahí.
Connor Wolf

Respuestas:

17

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.

stevenvh
fuente
Usé Logisim, que es fantástico para los esquemas, pero carece de un método para generar cualquier cosa que no sean imágenes (png, jpeg, etc.). Sobre las confusiones de FPGA que tengo, es en parte una cuestión de la gran variedad de dispositivos, pero tampoco encuentro recursos que expliquen los conceptos básicos y fundamentales. Si pongo mi CPU allí, ¿cómo interactúa con el mundo exterior? ¿Qué equipo necesito? ¿Puedo reprogramar el FPGA repetidamente? etc. etc. etc. Es realmente una falta total de familiaridad con el tema. Supongo que necesito una guía de inicio, pero no la encuentro en ningún lado.
Rory O'Hare
2
Sus preguntas, en orden: 1) Los FPGA interactúan con el mundo exterior a través de pines de E / S. La diferencia es que puede elegir los pines, a diferencia de los chips dedicados. 2) Puede comenzar con un kit de inicio, kit de desarrollo o similar. Esto tendrá el FPGA, algunos conectores para E / S y fuentes de alimentación a bordo. La mayoría también incluye al programador; si uno no se olvida de conseguir uno. 3) Sí, puedes reprogramar el FPGA. El programa se almacena en chip en lo que es esencialmente un registro de desplazamiento gigante. En el inicio, una máquina de estado dedicada o una fuente externa lo carga en el chip.
Mike DeSimone
9

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 #5que 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í:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

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, Qsolo cambia si hay un flanco ascendente RESETo CLK(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 ninguno posedgeo negedgemodificadores 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:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Tenga en cuenta que las señales en la lista de sensibilidad están separadas por comas. Esto se debe a que orera confuso ya andque no podía funcionar allí. También tenga en cuenta la sustitución de 1'b0(un solo 0bit) con '0(un símbolo que se expande a la cantidad de 0bits necesarios según lo que se le asigne; mucho más flexible con los módulos parametrizados). Finalmente, observe el reemplazo de always(que podría usarse para cualquier cosa; lógica combinacional, pestillos y flip flops) con el always_ffque se requiere que el contenido se sintetice en flip-flops. También hay una always_combque 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!

Mike DeSimone
fuente
Genial, esto muy útil. Sin embargo, solo para verificar una cosa, he oído hablar de la captura esquemática. ¿Es una alternativa factible para aprender verilog? Lo aprenderé si es necesario, pero si no es 100% necesario, prefiero no agregarlo a la enorme lista de cosas que ya necesito resolver. Muchas gracias.
Rory O'Hare
Honestamente, no realmente. Un gran problema es que estás a merced del programa de captura de esquemas: si toma tu esquema y genera un Verilog incorrecto, ¿qué puedes hacer? Mientras que escribir Verilog le dará la autoridad necesaria para corregir todos los errores. Sin embargo, la gran razón es que hay cosas que la captura esquemática nunca hará tan bien como Verilog: los módulos parametrizados y la división y fusión de buses son los que inmediatamente se me ocurren.
Mike DeSimone
1
¿Hay alguna herramienta que pueda convertir un lenguaje un poco más "descriptivo de hardware" en Verilog o VHDL (por ejemplo, si quiero que net Z sea un flip flop cuya entrada de datos sea una combinación de A, B y C, que se restablece asincrónicamente mientras C y D son ciertas, sería bueno poder decir algo así Z:= A & (B # C); Z.ar = C & D;sin tener que preocuparnos por las listas de sensibilidad y demás).
supercat
Altera Quartus le permite ingresar su diseño como un esquema o AHDL (versión de VHDL de Altera), o cualquier combinación de los mismos, probablemente incluyendo otros HDL. (siendo anticuado, usé principalmente una entrada esquemática para mis proyectos de CPLD y FPGA, con un poco de AHDL)
Peter Bennett,
Para ser claros, AHDL no es una versión de VHDL. Tanto VHDL como Verilog son lenguajes de inferencia , donde su código describe el comportamiento del circuito deseado, y el compilador tiene que inferir la implementación a partir de esa descripción de comportamiento. Este es un legado del hecho de que ambos comenzaron como lenguajes de simulación y se reutilizaron para síntesis. AHDL es un lenguaje declarativo , donde declaras primitivas (por ejemplo, flip-flops, tablas de verdad) y cómo están conectadas, por lo que el compilador no tiene que adivinar. AHDL se remonta a los años 80 y está mucho más cerca de ABEL.
Mike DeSimone
5

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

  1. los vendedores de herramientas FPGA no los apoyan realmente
  2. No es portátil

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.

Martin Thompson
fuente
3

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.

Leon Heller
fuente
1

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.

dext0rb
fuente
0

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.

billt
fuente
0

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.

LaptonSpark
fuente