Cómo compartir definiciones de registro y campo de bits entre un controlador de dispositivo y el FPGA que controla

StackOverflow https://stackoverflow.com/questions/1585751

Pregunta

¿Hay alguna buena herramienta de software existente disponible para ayudar a generar archivos de encabezado C con #defines apropiados para compensaciones de registro, así como definiciones de bits de VHDL? Si existen tales herramientas, ¿qué restricciones se encuentran en el VHDL y cómo se designan las cosas que deben exportarse?

Hasta ahora, he encontrado estas herramientas, pero no son exactamente lo que estoy buscando:

Según estas herramientas, también me interesan si el flujo de trabajo adecuado es generar tanto el C como el VHDL en lugar de tratar de ir directamente de VHDL (tal vez con etiquetas adicionales en los comentarios) a C.

¿Fue útil?

Solución

Creo que esa final, aunque te estaba molestando, te está enviando en la dirección correcta. Y estaría de acuerdo con Redglyph en que debería considerar cambiar un poco su flujo de trabajo.

¿Ha pensado en tener un 'documento maestro' para su información de registro de control y generó todo automáticamente a partir de esto: RTL, código TestBench, encabezados de software del controlador y documentación?

He trabajado en proyectos donde la información de control se mantuvo en una hoja de cálculo maestra y todo lo que necesitábamos generar a partir de esto. En una familia de chips, había escrito algunos scripts de Python para generar estas cosas a partir de archivos CSV exportados desde la hoja de cálculo. En otro proyecto, la hoja de cálculo contenía macros para generar los archivos RTL, etc. que necesitábamos.

Escribir scripts internos está bien y bueno, ya que tienes un control total sobre ellos y sabes cómo funcionan en detalle. Pero recuerde que debe pasar tiempo apoyando estos scripts y actualizarlos para hacer cosas nuevas. Y considere lo que pasaría si quien escribiera estos guiones decidiera ir a conseguir un nuevo trabajo: ¿alguien más estaría lo suficientemente familiarizado con los guiones para modificarlos? Estamos considerando comprar en una herramienta de terceros por las razones mencionadas anteriormente.

También he trabajado en proyectos donde la documentación y los archivos de encabezado estaban en el puerto posterior del RTL, era una pesadilla. La documentación generalmente se retrasó detrás del diseño, y a menudo los campos de control "desaparecían". Prefiero no estar involucrado en ese proyecto nuevamente;)

Otros consejos

Podrías echar un vistazo a doxígeno, admite el lenguaje VHDL y, al usar archivos intermedios, puede extraer la información más o menos fácilmente. Un subproducto sería su documentación de código RTL.

Otra opción es construir un analizador C a partir de las definiciones YACC/LEX, puede encontrar varias otras. aquí. A partir de ahí, puede analizar el VHDL, extraer la información (deberá determinar cómo recuperar la definición de sus registros) y producir un archivo de encabezado C. Probablemente sea bastante complicado.

Pero si yo fuera usted, realmente procedería de manera diferente y definiría los desplazamientos y campos de registro en un archivo separado (por ejemplo, en XML), y escribiría un pequeño script para generar encabezados C y un paquete VHDL, esto le ahorraría un mucho tiempo y sería más robusto desde el punto de vista de flujo.

Eso también ayudaría a construir cualquier documentación.

Por supuesto, podría automatizar el proceso con un archivo de making/o en un script que prepare la base de datos antes de la simulación/síntesis.

Estoy de acuerdo con Marty, crear scripts internos para hacer este tipo de cosas es divertido, pero puede ser problemático a largo plazo.

Hemos creado una herramienta llamada IDESIGNSPEC que se implementa como un complemento para editores de documentos que le permiten especificar registros en un documento y generar encabezado C, VHDL, Verilog, OVM, VMM, IP-XACT, HTML, XML, SYSTEMRDL, PDF ETC. . de eso.

Puede generar salidas personalizadas utilizando la API TCL. También puede leer en varios formatos de entrada, como XML, IP-Xact, Systemrdl, etc.

El beneficio de este enfoque es que tiene una especificación y todo se mantiene automáticamente sincronizado.

Los editores actualmente compatibles son: MS Word 2003 y 2007, OpenOffice, StarOffice y Framemaker.

Puedes obtener más detalles en http://www.agnisys.com

Aquí está la lista completa de soluciones disponibles:

Nombre de la empresa: herramientas comerciales (solución proporcionada)

  1. Agnisys: IdesignSpec (complemento para Word/Excel/OpenOffice e Interfaz de línea de comando en Linux y Windows)
  2. Atrenta: 1 de los registros de Génesis de TEA (Aplicación de escritorio)-> adquirido por Synopsys. Herramienta no disponible.
  3. Duolog: bitwise (aplicación basada en eclipse) -> adquirido por ARM, la herramienta todavía está disponible.
  4. PDTI: Spectareg (aplicación basada en la web) -> La herramienta ya no está disponible.
  5. Semifore: CSRCompiler (interfaz de línea de comandos)

Herramientas gratuitas/abiertas

  1. Veripool: Vregs
  2. Paradigmworks: spec2reg

Nuestro grupo de diseño utiliza SystemRDL para capturar las definiciones de registro para nuestro sistema programable en chip. Utilizamos Denali BluePrint con scripts personalizados para los diversos objetivos: generar el mapa de registro, la documentación PDF, la verificación, los archivos de encabezado C, etc.

Todavía no lo estamos usando para generar la fuente RTL.

http://www.spiritconsortium.org/releases/systemrdl
http://www.google.com/search?q=systemrdl

La respuesta puede llegar un poco tarde, pero usamos la biblioteca Netpp gratuita y algunas hojas de estilo XSL modificadas para generar documentación, fuente VHDL y C de una fuente XML. También hay una extensión del simulador VHDL que permite que las bibliotecas VHDL y C intercambien datos para crear un 'FPGA virtual' capaz de redes. Se llama Ghdlex, no recuerdo exactamente dónde está, pero lo encontrarás en algún lugar del http://section5.ch Sitio web en el área de descarga de Netpp. Es un poco difícil de usar, pero bueno, es gratis ...

La verdadera fuente de la información compartida es su diseño original, por lo que ingresaría el diseño original en una forma que es fácil de procesar. Aquí hay un par de ideas...


  1. Use Yaml. (O, suspiro, XML, o incluso un DSL muy simple de su diseño). Defina los datos originales. Escriba scripts para volcarlo como VHDL y C. Todos los lenguajes de secuencias de comandos admiten YAML y también está diseñado para analizar las herramientas de shell. Incluso puede usar VHDL o C simplificado, y escribir un script para convertirlo a través de una transformación de texto simple en la C o VHDL correspondiente.

  2. Hazlo todo en el preprocesador C. Podrías escribir un conjunto de macro llamadas que especifica diseños de registro. Entonces podrías tener un #if o tal vez dos separados .h Archivos que definen dos versiones diferentes de sus macros de definición, una que se expande en VHDL y otra que expande esas mismas definiciones en C.

Spectareg le permite especificar los registros en un solo lugar y crear múltiples salidas para diferentes entornos (por ejemplo, VHDL, C, Verilog)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top