Creé un banco de pruebas para un diseño VHDL que incluye modelos de circuitos integrados para verificar los requisitos de temporización de la interfaz. Dentro de cada modelo, instalo un paquete genérico ( genpkg ) para imprimir los errores detectados en la consola o los archivos. El genpkg se crea una instancia en el área de declaración de arquitectura del modelo, después de architecture
, pero antes de begin
(ver bloque de código 1). Esto coloca los genéricos de la entidad modelo en el alcance que se pasará a los genéricos del genpkg . El nivel superior de mi banco de pruebas tiene genéricos que configuré a través de las macros TCL, usando el comando vsim
con -g
, y estos se pasan al generic map
de cada modelo. De esta manera, puedo establecer etiquetas / ID únicas, nombres de archivos de salida, etc. cuando hay modelos duplicados / múltiples en el banco de pruebas y / o para ejecutar diferentes pruebas.
Bloque de código 1
entity ads8698 is
generic(
DEV_NAME : string := "ADC";
DEV_ID : integer := 0;
TIMING_INFO : boolean := TRUE;
OUTPUT_TO_FILE : boolean := TRUE;
OUTPUT_FILE : string := ".\outfile.txt";
MODE : file_open_kind := write_mode
);
port(
...
);
end ads8698;
architecture arch of ads8698 is
package perr is new work.print_err_pack
generic map (
DEV_NAME => DEV_NAME,
DEV_ID => DEV_ID,
TIMING_INFO => TIMING_INFO,
OUTPUT_TO_FILE => OUTPUT_TO_FILE,
OUTPUT_FILE => OUTPUT_FILE,
MODE => MODE
);
...
begin
Esto funciona como se esperaba con QuestaSim 10.5c para simulación estándar. Sin embargo, cuando ejecuto una simulación de ajuste posterior, esto ya no funciona.
Los archivos VHDL y SDF posteriores al ajuste utilizados son generados por LiberoSoC 11.7, ya que el diseño apunta a un dispositivo Microsemi. La única diferencia que veo en la configuración de la simulación es el comando post-fit vsim
, donde uso -sdfmax
para anotar celdas VITAL de Microsemi con valores máximos de tiempo, y uso -noglitch
para deshabilitar los fallos de VITAL.
Al ejecutar el ajuste posterior, el genpkgs no se imprime como se esperaba. Por un lado, los genéricos que configuré con vsim -g ...
en TCL ya no se reducen a las instancias de genpkg . Por otro lado, los procedimientos de impresión en mi genpkgs no se están imprimiendo, aunque se producen condiciones de simulación que deberían hacer que se impriman.
En mi nivel de prueba estándar superior, tengo un genpkg instanciado de la misma manera que en los modelos (bloque de código 1). Esto no funcionó como se esperaba con el banco de pruebas post-fit de nivel superior. Para que la impresión de errores funcionara en el nivel superior posterior al ajuste, tuve que crear una instancia del genpkg como en el bloque de código 2.
Bloque de código 2
package p is new work.print_err_pack
generic map (
DEV_NAME => "FTLU2_POSTFIT",
DEV_ID => 0,
TIMING_INFO => TRUE,
OUTPUT_TO_FILE => TRUE,
OUTPUT_FILE => "./FTLU2_postfit.txt",
MODE => append_mode
);
use work.p;
architecture arch of tb_post is
...
begin
En esta ubicación, necesitaba la línea use work.p;
por alguna razón. El problema con la creación de instancias de genpkg aquí (antes de architecture
) es que los genéricos de testbench ya no están en el alcance de la instanciación, por lo que no pueden pasarse a genpkg . La creación de instancias aquí anula el propósito de mi caso de uso genpkg .
Entonces, mi pregunta , ¿alguien tiene una idea de por qué el uso de genéricos para crear instancias de paquetes genéricos no funcionaría para una simulación posterior al ajuste en QuestaSim / ModelSim 10.5 cuando funciona como se espera para la simulación estándar?
Gracias de antemano.