Cuando me acerco a un problema en C++ o Python, existen muchas bibliotecas que hacen el trabajo pesado de mi código. Estoy pensando en GNU GSL , BOOST o FFTW para C++ y NumPy o SciPy para python. En muchos sentidos, el hecho de que estos recursos existan hace que la codificación en estos lenguajes respectivos valga la pena, ya que las bibliotecas evitan que tengas que reescribir todas las cosas de bajo nivel desde cero.
Las bibliotecas estándar IEEE parecen cubrir solo los conceptos básicos, como los tipos de datos (algo así como las bibliotecas estándar C).
Parece que en VHDL, puede comprar/encontrar algunos "núcleos IP" que resolverán un problema, en lugar de usar una biblioteca de código abierto. En python, si quiero hablar con un dispositivo en serie, solo import serial
y básicamente he terminado. En VHDL, me quedaría atrapado escribiendo un protocolo en serie desde cero, o tendría que buscar en Google en los distintos repositorios hasta encontrar a alguien que hubiera producido algo que funcionara. Entonces estaría parcheando fragmentos de código en mi proyecto, en lugar de simplemente incluir algo y llamarlo así. De manera similar, si quiero realizar una FFT, puedo encontrar ejemplos de FFT en VHDL a través de Google, pero no hay algo simple como FFTW que pueda encontrar.
¿Existen bibliotecas completas de código abierto disponibles que pueda importar a mis proyectos? ¿Por qué todos parecen crear su propio código para tantas cosas iguales?
Soy desarrollador y mantenedor en ' The PoC Library '. Intentamos proporcionar una biblioteca de este tipo compuesta por paquetes (colección de nuevos tipos y funciones) y módulos. Viene con fifos comunes, aritmética, componentes de reloj cruzado, componentes de E/S de baja velocidad y una pila Ethernet/IP/UDP (próxima versión).
Como describió @crgrace, es bastante complicado diseñar módulos, que:
Nuestra biblioteca tiene un mecanismo de configuración interno (PoC.config) para distinguir proveedores, dispositivos e incluso subfamilias de dispositivos para elegir el código correcto o una implementación optimizada. También distingue entre código de síntesis y de simulación en algunos puntos.
Por ejemplo PoC.fifo_cc_got
, es un FIFO con una interfaz de 'reloj común' (cc) y señales put/got para controlar el FIFO. El fifo es configurable en anchos, profundidades, bits de estado de relleno y tipo de implementación. Es posible elegir un tipo de implementación RAM basada en LUT o On-Chip-RAM (ocram). Si este fifo se sintetiza con la opción ocram para Altera, usa altsyncram; si se elige Xilinx, utiliza una descripción genérica de BlockRAM e implementa la aritmética de punteros mediante instanciación explícita de cadena de transporte (Xilinx XST no encuentra la solución óptima, por lo que se realiza manualmente).
Hay otros 2 tipos de fifo con 'reloj dependiente' (dc) e interfaz de reloj independiente (ic). Entonces, si es necesario cambiar de un fifo normal a un fifo de reloj cruzado (PoC.fifo_ic_got), cambie el nombre de la entidad y agregue un reloj y reinicie para el segundo dominio de reloj, eso es todo.
Creo que esto demuestra que es posible escribir módulos comunes, que funcionan en múltiples plataformas y se compilan en diferentes herramientas (Spartan->Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).
Además de PoC, existen otras bibliotecas de código abierto:
Los proyectos "Discover Free and Open Source Silicon" ( FOSSi ) en GitHub ofrecen una base de datos navegable de todos los proyectos de GitHub que utilizan principalmente vhdl , verilog , systemverilog o cualquier otro lenguaje de descripción de hardware importante ( hdl ).
Ver también:
Las bibliotecas de código abierto como usted describe no serían tan útiles para VHDL o Verilog como lo son para un lenguaje de programación de propósito general. Esto se debe a que CÓMO implementa una función determinada puede depender mucho de lo que intente hacer. El código que es bueno para y FPGA probablemente no sea tan bueno para un ASIC y viceversa.
Además, dado que estamos describiendo hardware, una función que hace una FFT requeriría detalles específicos como el ancho de palabra y el reloj y la estrategia de reinicio que le atarían las manos y limitarían todo su diseño. Si hiciera la función muy flexible, tendría una sobrecarga enorme.
Por último, mire el tamaño de su ejecutable cuando incluya muchas bibliotecas en C, por ejemplo. Hay una tonelada de hinchazón allí. Eso no importa para el desarrollo de software (la mayoría de las veces), pero importa mucho para el desarrollo de FPGA y especialmente ASIC. No tiene sentido sintetizar un montón de gastos generales que no necesita.
Entonces, la conclusión es que no existen tales bibliotecas, y su enfoque actual es sólido.
VHDL y Verilog son lenguajes descriptivos y describen bloques de hardware. Un controlador serial en C++ podría traducirse en una IP serial en VHDL/Verilog.
opencores.org es la mayor base de datos de código abierto hasta la fecha.
Para facilitar el proceso de búsqueda, descarga y exploración de código (a través de Github) puede utilizar esta moderna interfaz:
http://freerangefactory.org/cores.html
Si, por ejemplo, busca serial, puede terminar aquí:
http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html
y salta directamente al código en GitHub. Allí verá que puede crear fácilmente una instancia del módulo serial y conectarle su propio circuito y comenzar a enviar y recibir datos. Esto es tan simple como las librerías seriales en C++.
Espero que esto ayude.
El primer sitio al que voy para este tipo de cosas (como mencionó @MarkU) es opencores.org.
Por ejemplo, existe un motor FFT parametrizado , escrito en VHDL, publicado bajo la licencia BSD. El estado es "beta".
Para la verificación, existe una metodología de verificación VHDL de código abierto (OSVVM).
OSVVM es una metodología de verificación de VHDL completa y avanzada que simplifica la implementación de la cobertura funcional, aleatoria restringida y aleatorización de cobertura inteligente (una metodología de banco de pruebas inteligente). También facilita la implementación de archivos de transcripción compartidos, informes de errores, registros (impresión condicional) y modelado de memoria.
El sitio web y el blog de OSVVM están en http://osvvm.org . Los paquetes también están disponibles en github en: https://github.com/JimLewis/OSVVM
MarkU
jimen lewis
Pico de voltaje