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

11

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 evitan que tenga que reescribir todas las cosas de bajo nivel desde cero.

Las bibliotecas estándar de IEEE parecen cubrir solo los conceptos básicos, como los tipos de datos (algo parecido a las bibliotecas estándar de C).

Parece que en VHDL, puede comprar / encontrar algunos "núcleos IP" que resolverán un problema, en lugar de utilizar una biblioteca de código abierto. En Python, si quiero hablar con un dispositivo en serie, simplemente, import serialy básicamente he terminado. En VHDL, estaría atascado escribiendo un protocolo en serie desde cero, o tendría que buscar en Google en los diversos repositorios hasta que encuentre a alguien que haya producido algo que funcione. Entonces estaría parcheando fragmentos de código en mi proyecto, en lugar de simplemente incluir algo y llamarlo. 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.

¿Hay alguna biblioteca completa de código abierto disponible que pueda importar en mis proyectos? ¿Por qué todos parecen lanzar su propio código para tantas de las mismas cosas?

Sam
fuente
2
¿Has buscado en opencores.org?
MarkU
3
Para ver las bibliotecas de verificación de VHDL, consulte osvvm.org
Jim Lewis,
Opencores, también puedes comprar bibliotecas de varias fuentes. Pasará algún tiempo con la mayoría de los núcleos de núcleos abiertos, ya que la mayoría no están bien documentados.
Voltaje pico

Respuestas:

14

Soy desarrollador y mantenedor en ' The PoC Library '. Intentamos proporcionar dicha biblioteca compuesta de paquetes (colección de nuevos tipos y funciones) y módulos. Viene con componentes 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:

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

Nuestra biblioteca tiene un mecanismo de configuración interna (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 síntesis y código de simulación en algunos puntos.

Por ejemplo, PoC.fifo_cc_gotes 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 una RAM basada en LUT o un tipo de implementación 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 del puntero mediante una instanciación explícita de la cadena de transporte (Xilinx XST no encuentra la solución óptima, por lo que se hace manualmente).

Hay otros 2 tipos de fifo con interfaz de 'reloj dependiente' (dc) e 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 compilan en diferentes herramientas (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).

Además de PoC, hay otras bibliotecas de código abierto:


Los "Descubrir código abierto y libre de silicona" ( FOSSI proyectos) en GitHub ofrece una base de datos navegable de todos los proyectos de GitHub que utilizan principalmente , , , o cualquier otro lenguaje de descripción de hardware importantes ( ).

Ver también:

Paebbels
fuente
+1 por mostrar lo que has hecho y también lo que otros han hecho. Buena lista larga.
Señor Mystère
3

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 la forma en que implementa una función determinada puede variar mucho según lo que intente hacer. El código que es bueno y FPGA probablemente no sea tan bueno para un ASIC y viceversa.

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

Por último, observe el tamaño de su archivo ejecutable cuando incluye 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 de las veces), pero es muy importante 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 existen tales bibliotecas, y su enfoque actual es sólido.

crgrace
fuente
Los generadores de núcleos alternativos (IP) también proporcionan los riesgos de Scylla y Chabydris de bloqueo del proveedor y la hinchazón resultante. Las capacidades de FPGA y ASIC han crecido lo suficiente como para soportar la hinchazón, el problema luego el costo y las pruebas, ayudado por la estandarización de la hinchazón (por ejemplo, AMBA AXI4). El intercambio entre Time To Market y "gastos generales que no necesita" ya realizado por industrias enteras. Diseño del sistema utilizando bloques de construcción en lugar de diseño de hardware, este último el bailiwick de VHDL.
user8352
Su tercer párrafo ignora bastante bien cómo funcionan los compiladores y las herramientas de síntesis: las herramientas deberían descartar las cosas que no se necesitan y los resultados no utilizados, probablemente incluso más en una configuración de lógica digital que en una biblioteca de idiomas de alto nivel, donde puede haber algo local variables y asignaciones de memoria que son gastos generales de la abstracción de la biblioteca, especialmente si está vinculada dinámicamente.
Chris Stratton
2

VHDL y Verilog son lenguajes descriptivos y describen bloques de hardware. Un controlador en serie en C ++ podría traducirse en una IP en serie 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 usar esta interfaz moderna:

http://freerangefactory.org/cores.html

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

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

y directamente salta al código en GitHub. Allí verá que puede crear instancias del módulo serie con bastante facilidad y conectar su propio circuito y comenzar a enviar y recibir datos. Esto es tan simple como las bibliotecas en serie en C ++.

Espero que esto ayude.

Fabrizio
fuente
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".

Spehro Pefhany
fuente
eso no es lo que pide el OP. Él o ella sabe acerca de mirar opencores.org Un motor FFT parametrizado está muy lejos de importar una biblioteca matemática estándar en Python y usarla. No existe el "middleware" en el hardware debido a la sobrecarga.
Crgrace 01 de
0

Para la verificación, hay una metodología de verificación de código abierto VHDL (OSVVM).
OSVVM es una metodología de verificación VHDL completa y avanzada que simplifica la implementación de cobertura funcional, aleatorización restringida y aleatorización 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 están en http://osvvm.org . Los paquetes también están disponibles en github en: https://github.com/JimLewis/OSVVM

Jim Lewis
fuente