Restricción del conjunto de señales registradas en GHDL

Tengo un gran diseño VHDL con cientos de señales internas. Necesito ejecutar una simulación durante mucho tiempo en GHDL y, según una breve ejecución de prueba, el volcado de VCD resultante sería de ~ 50 GB para la ejecución completa. Sin embargo, solo estoy interesado en <10 señales.

La documentación de GHDL dice que no hay forma de restringir el conjunto de señales registradas cuando se ejecuta una simulación. Sin embargo, puedo ser bastante flexible al reorganizar mi diseño, por ejemplo, podría envolver componentes con más capas, etc. ¿Hay alguna forma de usar estos trucos para restringir el conjunto de señales grabadas?

Respuestas (1)

No es una buena respuesta, pero según esta página Wiki, ghdl puede crear una versión comprimida del archivo VCD. Espero que se comprima bastante bien: su breve prueba puede darle una idea de la relación de compresión.

Esto todavía lo deja con el volcado completo, por supuesto, pero la wiki muestra que el archivo se descomprime y se canaliza al visor de forma de onda GTKWave.

En cambio, si lo conectó a un filtro usando grep, podría extraer una versión reducida y guardarla.

Mirando el formato de archivo VCD, este será un proceso de 2 etapas:

  1. grep los nombres de las señales que le interesan. Esto proporciona las secuencias de caracteres cortos que VCD utiliza como ID de cada señal.
  2. grep para todas las líneas que comienzan con #(marcas de tiempo) y todas las líneas que terminan con los ID que le interesan.
  3. Empaquetar el resultado con el encabezado del archivo original debería ser fácil ya que cada línea de encabezado comienza con $.

Puede ser que --wavela opción de ghdl que escribe su propio formato de archivo .ghw sea más fácil de analizar para este propósito, pero no sé de antemano si ghdl puede comprimir eso, y lo anterior no se ve tan mal como script.

Una mejor respuesta, pero a más largo plazo, es pedirle a ghdl que sea capaz de seleccionar señales para volcarlas a través de la página de Tickets . Esto se ha discutido, por supuesto, pero que yo sepa no se ha llevado más lejos. Supongo que la pregunta es el formato correcto para especificar señales de interés. Tal vez se podría hacer que GHDL escriba una lista de todas las señales jerárquicas en el archivo y luego, cuando se ejecute, lea una versión editada del mismo archivo que especifique el subconjunto de señales para rastrear.

Si va a requerir piratería, también podría piratearlo horriblemente ... Terminé cambiando el Add_Signalprocedimiento translate/grt/grt-vcd.adbpara filtrar las señales por nombre (afortunadamente, todas las señales que quiero filtrar comienzan con sigporque provienen de lava de Kansas). Por supuesto, esto es todo tipo de cosas horribles y estoy de acuerdo en que una mejor solución sería algo que requiera un árbol de señales para rastrear. Es solo que el afeitado de yak ya se está saliendo de control.
Sin embargo, acepto esta respuesta ya que a, me dice que no se puede hacer limpiamente con GHDL y b, establece una hoja de ruta para agregar esta función de una manera agradable.
Creo que su respuesta es mejor: puede ser piratería, pero es un uso de ghdl que solo permitiría su naturaleza de código abierto. ¡No pensé en sugerirte que atacaras las fuentes! Me alegro de que tengas una solución.