¿Hay alguna forma de suprimir la salida al compilar varios archivos vhd excepto por errores?

0

Tengo un script de compilación que ejecuto antes de simular en QuestaSim 10.7:

vcom -vhdl -2008 my_lib -check_synthesis src/mux.vhd
vcom -vhdl -2008 my_lib -check_snythesis src/clockdivdeby2.vhd
...

Recibo una salida en el terminal de la siguiente manera:

vcom -vhdl -2008 my_lib -check_synthesis src/mux.vhd
-- Loading package STANDARD
-- Loading package TEXTIO
-- Loading package std_logic_1164
-- Loading package std_logic_arith
-- Loading package STD_LOGIC_UNSIGNED
-- Compiling entity eop_counter_tb
-- Compiling architecture rtl of eop_counter_tb
-- Loading entity eop_counter
End time: HH:MM:SS on Mon, DY, YEAR, Elapsed time: 0:00:00
Errors: 0, Warnings: 0
vcom -vhdl -2008 my_lib -check_synthesis src/mux2.vhd
-- Loading package STANDARD
-- Loading package TEXTIO
-- Loading package std_logic_1164
-- Loading package std_logic_arith
-- Loading package STD_LOGIC_UNSIGNED
-- Compiling entity eop_counter_tb
-- Compiling architecture rtl of eop_counter_tb
-- Loading entity eop_counter
** Error: src/mux2.vhd (LINE NUMBER): something something, bad syntax
End time: HH:MM:SS on Mon, DY, YEAR, Elapsed time: 0:00:00
Errors: 1, Warnings: 0

Me preguntaba, ¿es posible suprimir el mensaje de salida de carga, compilación y temporización? Me gustaría saber los errores y advertencias sin embargo. Algo como esto:

vcom -vhdl -2008 my_lib -check_synthesis src/mux.vhd
Errrors: 0, Warnings: 0
vcom -vhdl -2008 my_lib -check_synthesis src/badfile.vhd
** Error: src/badfile.vhd(LINE NUMBER): something something, bad synthax
Errrors: 1, Warnings: 0

Sé que se puede registrar toda la salida. Sin embargo, quería saber de inmediato si hay algún error en lugar de abrir el archivo y buscarlo en el archivo de registro.

    
pregunta DeadSupra

1 respuesta

1

Primero verifica si hay opciones para vcom que cumplan con lo que quieres.

Luego vea (al menos en un sistema similar a Unix) si está segregando la salida entre stdout y stderr de alguna manera útil.

En la desesperación, en un sistema similar a Unix, una técnica que puede utilizar para resolver este tipo de problema para casi cualquier herramienta de línea de comandos es combinar los dos flujos de salida y canalizarlos a través de uno ( o más) instancias de grep instruidas para pasar o ignorar un conjunto personalizado de cosas.

Por ejemplo,

vcom -whatever 2>&1 | grep 'Error\|Something Else You Want to See'

Pasaría solo las líneas que contienen uno de esos dos patrones.

  • 2>&1 es la sintaxis de bash para combinar stderr con stdout , otros shells lo harán de manera diferente.

  • La barra vertical de escape es un "o"

  • lógico
  • Tenga en cuenta que los patrones son expresiones regulares no simples cadenas. Ciertos personajes tendrán significados especiales a menos que se escapen. Si se siente perezoso, también puede reemplazar los que no esté seguro con el carácter comodín de un solo carácter .

También puedes hacer una coincidencia negativa para rechazar cosas

vcom -whatever 2>&1 | grep -v 'Loading package'

Y puede enlazar varias instancias de grep , o incluso usar sed para alterar los mensajes, por ejemplo, para obtener errores en un formato en el que el controlador de algunos IDE puede reconocer números de línea y hacer que se puedan hacer clic. Sin embargo, vale la pena tener en cuenta que si se agrupan las instancias (por lo que la salida de las etapas anteriores ya no es un terminal) en un trabajo de ejecución más larga, es posible que desee utilizar la opción --line-buffered para grep para que produzca resultados continuos en lugar de bloquear el búfer.

Finalmente, el programa tee puede ser útil para brindarte tanto la salida en vivo como la captura en un archivo.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas