Soy nuevo en FPGA y actualmente estoy tomando clase HDL (particularmente Verilog). Tengo suficiente conocimiento en diseño digital como circuitos combinacionales y secuenciales.
Quiero crear un proyecto similar al que se muestra en este video de YouTube .
También sé que Xilinx ISE puede procesar señales lógicas y simular formas de onda. ¿Tiene capacidad adicional como obtener las señales de entrada a través de USB, cámara, etc. y emitirlas en su computadora?
¿Es posible ejecutar este proyecto (como una simulación en computadora) sin comprar una placa FPGA real? Lo que quiero decir es, ¿puedo construir, codificar y ejecutar ese proyecto en mi computadora, y simplemente conectar mi cámara a través de USB, luego dejar que las señales de video entrantes sean procesadas por simuladores HDL como Xilinx ISE, etc. (sin realmente comprar una placa FPGA y sintetice su proyecto allí, actualmente no tengo el presupuesto para tener una)
(Lo que realmente quiero decir es conectar el diseño HDLl a fuentes del mundo real, código C, etc.)
Respuestas:
Las herramientas de Xilinx no pueden interactuar en tiempo real hasta donde yo sé, tampoco ModelSim (utilizado por Libero IDE de Actel)
No sé sobre simuladores de código abierto, hay algunos proyectos bastante exóticos, por lo que es posible que haya Algo que podría hacer esto.
Sin embargo, esta puede ser una respuesta que no solicitó (la eliminaré si no es útil), pero consideraría construir su propia placa FPGA para hacer esto o al menos comenzar en el camino hacia ella. Grabé mi primera placa FPGA y, aunque era muy simple (la placa no era el proceso ;-)), me enseñó muchísimo con bastante rapidez.
Pros:
Contras:
Entiendo que grabar su propia placa probablemente no sea necesario, solo lo hice porque tenía los FPGA allí, estaba impaciente y no quería esperar 2 semanas para que llegara un PCB. Aquí hay ofertas extremadamente baratas para tableros de 2 capas, que harían al menos para ejecutar su diseño (posiblemente a velocidades más bajas de lo deseado eventualmente; normalmente, el recuento mínimo de capas para un diseño FPGA de alta velocidad sería 4, pero estos son mucho más caro)
De todos modos, Spirit Circuits hace un acuerdo de PCB de "capas básicas" de dos capas completamente gratis (uno por mes, un diseño, sin máscara o serigrafía) que resulta útil para un diseño único.
Además, para las placas prototipo baratas de 2 y 4 capas adecuadas, ITead y Seed Studio cuestan solo $ 10 por 10 servicios de placas (o posiblemente 5 a ese precio).
fuente
El Xilinx ISE Webpack estándar (la versión gratuita que puede descargar de xilinx.com) incluye un simulador llamado iSim. No es un gran simulador, pero es completamente funcional y el precio es correcto.
Aunque no he usado las herramientas de Altera, me sorprendería si no se incluyera un simulador.
Pero ... Necesitas saber lo que un simulador puede y no puede hacer. Para empezar, no puede simular un FPGA funcionando a toda velocidad. De hecho, son bastante lentos. Dependiendo de la complejidad de la simulación de FPGA, no me sorprendería ver que toma 1 minuto simular 1 ms de "tiempo simulado". Si desea simular una hora de "tiempo simulado", requerirá 1000 horas de tiempo real.
Además, un FPGA simulado no puede comunicarse directamente con cosas como su puerto USB. El FPGA simulado se comunica con un "banco de pruebas". El banco de pruebas es un fragmento de código VHDL o Verilog que alimenta las entradas de FPGA (o partes de FPGA) y verifica la salida de su FPGA. Puede hacer algunas cosas bastante complejas en un banco de pruebas, como usar números de coma flotante, leer y escribir archivos y ejecutar una lógica que es imposible de sintetizar.
fuente
No conozco ningún simulador que interactúe directamente con las señales que llegan a un puerto USB (u otro hardware).
Al menos en teoría, sería posible escribir algún software que tomaría señales que llegaran a un puerto y traducirlas en un archivo de banco de pruebas que un simulador podría procesar. Desafortunadamente, no conozco ningún software existente para hacer esto, y escribirlo usted mismo sería decididamente no trivial.
fuente
Deberá utilizar una interfaz de co-simulación (DPI, VPI, VHPI, FLI) que le permite escribir código que se enganche en el simulador y, por lo tanto, establecer un puente entre el RTL que se ejecuta en la simulación y el hardware real de su máquina.
Los problemas importantes que encontrará (aparte de las interfaces mal documentadas) están relacionados con la sincronización y el tiempo. El RTL que se ejecuta en la simulación es mucho más lento que el hardware real: deberá poder interactuar con la interfaz externa para que coincida con la velocidad de la simulación. ¡A algunas interfaces de hardware no les gustará esto! Por ejemplo, si usa TCP, es posible que deba falsificar los temporizadores en la pila del kernel para evitar retransmisiones espurias, etc.
Icarus admite el VPI y es gratuito para que pueda experimentar sin gastar dinero en licencias. Es posible que desee examinar los marcos existentes que realizan algunos de los trabajos pesados de co-simulación y proporcionan una abstracción más limpia al simulador. Uno de esos marcos es Cocotb , una biblioteca de código abierto que proporciona una interfaz Python para el simulador. ( Descargo de responsabilidad: soy uno de los desarrolladores de cocotb).
Un ejemplo que puede ser relevante: ayer eliminé algunos RTL para responder a las solicitudes de ping y creé un banco de pruebas que abre una interfaz TUN. Luego puede hacer ping a la interfaz usando el
ping
comando y el RTL que se ejecuta en simulación recibe el ping y responde. ¡El banco de pruebas completo tiene menos de 50 líneas de Python! El código fuente para este ejemplo está en Github y se ejecuta en Icarus bajo Linux.fuente
En la gran mayoría de los casos, todo lo que haga en la simulación permanece en la simulación. No puede acceder al hardware real desde él; debe tener un modelo de simulación del hardware real.
Sin embargo, si está dispuesto a esforzarse, la mayoría de los simuladores tienen una interfaz para código arbitrario. En Verilog es una interfaz bastante estándar, según tengo entendido, por lo que el lado Verilog de las cosas se portará entre simuladores. En VHDL-land, hay una forma estándar de hacerlo, ¡pero al menos uno de los grandes vendedores tiene su propia forma de hacerlo!
También tenga en cuenta que la interacción en tiempo real (es decir, a la velocidad que lo haría el FPGA) es muy poco probable, y el resto de su simulación (HDL) tampoco se ejecutará en tiempo real. Como se señaló en los comentarios, el procesamiento simulado en tiempo real de video no es factible de esta manera.
Personalmente, nunca he tenido la necesidad de probar esto, me parece que soy más productivo escribiendo modelos del hardware y ejecutándolo todo en VHDL.
Pero no pase por alto los beneficios de hacer simulación: es una forma mucho más rápida de averiguar si las cosas funcionan (las compilaciones tardan segundos) y luego construir flujos de bits (las compilaciones tardan decenas de minutos a horas) y probarlas en hardware.
fuente