¿Cómo puedo saber si la biblioteca ya se ha compilado en ModelSim / QuestaSim para acelerar los scripts de simulación?

1

¿Cómo puedo saber si la biblioteca ya se ha compilado en ModelSim / QuestaSim para acelerar los scripts de simulación?

Tengo algunos archivos que contienen varios comandos vlog para compilar varias bibliotecas y un comando vsim para iniciar la simulación más adelante, agregar las señales a la ventana de la onda y los cursores y ejecutar la simulación. Hay ciertos archivos de biblioteca que contienen los primitivos que deben compilarse y tomarse un tiempo. ¿Hay alguna forma de usar 'if statement' con alguna función para ver si ya existe una biblioteca, ya que ya se ha compilado, y que esta biblioteca se compiló utilizando archivos de una determinada ubicación? Estoy realizando muchas simulaciones diferentes y, a menudo, las bibliotecas pueden ser las mismas (según el orden que se esté utilizando).

De lo contrario, ¿hay una manera de compilarlos en una biblioteca en ModelSim / QuestaSim en el inicio de forma predeterminada?

    
pregunta quantum231

1 respuesta

2

Si se ha compilado un módulo con un nombre dado, habrá un subdirectorio en el directorio "de trabajo" de la biblioteca que tiene el mismo nombre que el módulo. Además, habrá un archivo en ese subdirectorio llamado _primary.dat . Para compilar módulos para una simulación, uso una o más reglas de creación de GNU similares a esta, una para cada directorio fuente posible:

WORK = work

$(WORK)/%/_primary.dat: ../rtl/uwb_top/v/%.v
    vlog $+

Esto me permite escribir vlib work; make en mi directorio de simulación, y solo se recompilarán los módulos que se han actualizado.

Sin embargo, si los nombres de sus módulos de biblioteca no son únicos, no conozco ninguna forma de decirle a qué archivo fuente se usó para crear un módulo de trabajo en particular.

EDITAR

Este es un ejemplo de un Makefile completo que muestra cómo normalmente especifico mis módulos de destino. Esto utiliza características específicas de GNU make.

# Modules for the actual device
DUT_MODULES = dut_top dut_module1 dut_module2

# Modules for the simulation testbench
TB_MODULES = tb_top tb_module1 tb_module2 tb_module3

# Convert module names into full target paths
DUT_TARGETS = $(foreach mod, $(DUT_MODULES), $(WORK)/$(mod)/_primary.dat)
TB_TARGETS = $(foreach mod, $(TESTBENCH), $(WORK)/$(mod)/_primary.dat)

WORK = work

# Default 'make' target
tb: $(DUT_TARGETS) $(TB_TARGETS)

# Rule for device modules
$(WORK)/%/_primary.dat: ../rtl/uwb_top/v/%.v
    vlog $+

# Rule for testbench modules
$(WORK)/%/_primary.dat: ../testbench/v/%.v
    vlog $+

ACTUALIZACIÓN (2017)

Modelsim / Questasim ya no almacena código compilado de la manera descrita anteriormente; en su lugar, se utiliza un conjunto de archivos que contienen una base de datos, y los nombres de los módulos compilados se ocultan dentro de ellos.

Sin embargo, los cambios en Makefile para adaptarse a esto son sencillos. Primero, elimine el /_primary.dat de las expresiones de ruta de destino. En segundo lugar, agregue un comando touch que cree un archivo vacío con el mismo nombre que el módulo de destino después de cada comando vlog . El Makefile se convierte en:

# Modules for the actual device
DUT_MODULES = dut_top dut_module1 dut_module2

# Modules for the simulation testbench
TB_MODULES = tb_top tb_module1 tb_module2 tb_module3

# Convert module names into full target paths
DUT_TARGETS = $(foreach mod, $(DUT_MODULES), $(WORK)/$(mod))
TB_TARGETS = $(foreach mod, $(TESTBENCH), $(WORK)/$(mod))

WORK = work

# Default 'make' target
tb: $(DUT_TARGETS) $(TB_TARGETS)

# Rule for device modules
$(WORK)/%/_primary.dat: ../rtl/uwb_top/v/%.v
    vlog $+
    touch $@

# Rule for testbench modules
$(WORK)/%/_primary.dat: ../testbench/v/%.v
    vlog $+
    touch $@

Estos archivos adicionales no interfieren de ninguna manera con el simulador, y el resto del Makefile funciona de la misma manera que antes.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas