Una pregunta sobre la creación de instancias de un módulo con un parámetro en systemverilog

0

Ahora estoy escribiendo un banco de pruebas. En mi banco de pruebas, quiero leer la longitud de un archivo de texto y pasarlo a otro módulo mientras se crea una instancia. La idea es así:

module TB();
integer text_len;

ABC #(.text_len(text_len)) ABC_1(//some input/output arguments here);

task read_text(output integer text_len);
//read text file and get the text length
endtask

initial 
begin
read_text(text_len);
end

endmodule

Cuando lo compilo utilizando Questasim, sigue diciendo que la expresión para un parámetro real asociado con el nombre de parámetro text_len para la instancia del módulo ABC_1 debe ser constante. ¿Alguien sabe cómo lidiar con eso?

    
pregunta hk56740

1 respuesta

2

El problema es que la creación de instancias del módulo ocurre en la elaboración del código antes de la simulación de cualquier bloque initial . Por lo tanto, no puede utilizar una variable para anular un parámetro de módulo.

Lo que puedes hacer es analizar el archivo externamente a Verilog y crear una definición 'define con la que compilas el código fuente, o Questa permite anulaciones de parámetros a través de la línea de comandos (busca los interruptores vopt -g/-G en el usuario manual)

El archivo define.vh se vería como

'define TEXT_LEN 5

Y su archivo de módulo se vería como

module TB();
'include "defines.vh"

ABC #(.text_len('TEXT_LEN)) ABC_1(//some input/output arguments here);
    
respondido por el dave_59

Lea otras preguntas en las etiquetas