¿Existen bibliotecas de código abierto para VHDL como lo hacen para C ++ o python?

10

Cuando me estoy acercando 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 existan estos recursos hace que la codificación en estos idiomas respectivos valga la pena, ya que las bibliotecas le impiden tener que volver a escribir todas las cosas de bajo nivel desde cero.

Las bibliotecas estándar de IEEE parecen cubrir solo lo más básico, como los tipos de datos (algo parecido a las librerías de estándares 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 serial, acabo de import serial y básicamente he terminado. En VHDL, o bien me quedaría atascado escribiendo un protocolo serial desde cero, o tendría que buscar en los distintos repositorios hasta encontrar a alguien que hubiera producido algo que funcionara. Entonces estaría parchando bits de código en mi proyecto, en lugar de simplemente incluir algo y llamar a eso. De manera similar, si quiero realizar una FFT, puedo encontrar ejemplos de FFT en VHDL a través de Google, pero no hay algo tan simple como FFTW que pueda encontrar.

¿Hay bibliotecas completas de código abierto disponibles que pueda importar a mis proyectos? ¿Por qué parece que todos lanzan su propio código para tantas de las mismas cosas?

    
pregunta Sam

5 respuestas

14

Soy desarrollador y mantenedor en ' The PoC Library '. Intentamos proporcionar dicha biblioteca compuesta de paquetes (recopilación de nuevos tipos y funciones) y módulos. Viene con quince comunes, componentes aritméticos, componentes de reloj cruzado, componentes de E / S de baja velocidad y una pila Ethernet / IP / UDP (próxima versión).

Como se describe en @crgrace, es bastante complicado diseñar módulos, que:

  • trabajar en muchas plataformas
  • admite la mayoría de las cadenas de herramientas de proveedores
  • no agregar / menos gastos generales

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 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 de poner / obtener para controlar el fifo. El fifo se puede configurar 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 RAM en chip (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 la ejemplificación explícita de cadena de cadenas (Xilinx XST no encuentra la solución óptima, por lo que se realiza manualmente).

Hay otros 2 tipos de fifo con interfaz de 'reloj dependiente' (dc) y reloj independiente (ic). Entonces, si se requiere cambiar de un fifo normal a un fifo cruzado (PoC.fifo_ic_got), cambie el nombre de la entidad y agregue un reloj y reinicie para el segundo dominio del 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, hay 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 , , , o cualquier otro lenguaje de descripción de hardware importante ().

Ver también:

respondido por el Paebbels
3

Las bibliotecas de código abierto que 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 implementas una función determinada puede hacer mucho dependiendo de lo que estés tratando de hacer. Código para el cual es bueno y FPGA probablemente no sea tan bueno para un ASIC y viceversa.

Además, dado que estamos describiendo hardware, una función que realiza una FFT requeriría detalles como el ancho de palabra y la estrategia de reinicio y reloj que ataría sus manos y limitaría todo su diseño. Si hicieras la función muy flexible, tendría una sobrecarga enorme.

Por último, observe el tamaño de su ejecutable cuando incluya muchas bibliotecas en C, por ejemplo. Hay un montón de hinchazón allí. Eso no importa para el desarrollo de software (la mayoría del tiempo) pero sí mucho para FPGA y especialmente para el desarrollo de ASIC. No tiene sentido sintetizar un montón de gastos generales que no necesita.

Entonces, la conclusión es que no hay tales bibliotecas, y su enfoque actual es sólido.

    
respondido por el crgrace
2

VHDL y Verilog son lenguajes descriptivos y describen bloques de hardware. Un controlador en serie en C ++ podría traducirse en una Serial IP en VHDL / Verilog.

opencores.org es la base de datos de código abierto más grande hasta la fecha.

Para facilitar el proceso de búsqueda, descarga y navegación de código (a través de Github) puede utilizar esta interfaz moderna:

enlace

Si, por ejemplo, busca una serie, puede terminar aquí:

enlace

y salta directamente al código en GitHub. Allí verá que puede crear una instancia bastante sencilla del módulo serie y conectar 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.

    
respondido por el Fabrizio
0

El primer sitio al que voy para este tipo de cosas (como mencionó @MarkU) es opencores.org.

Por ejemplo, hay un motor FFT parametrizado , escrito en VHDL, publicado bajo la licencia BSD. El estado es "beta".

    
respondido por el Spehro Pefhany
0

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 VHDL avanzada y completa que simplifica la implementación de la cobertura funcional, la asignación aleatoria restringida y la asignación aleatoria inteligente de cobertura (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 se encuentran en enlace . Los paquetes también están disponibles en github en: enlace

    
respondido por el Jim Lewis

Lea otras preguntas en las etiquetas