Warm tip: This article is reproduced from serverfault.com, please click

vhdl-使用Modelsim和TCL脚本递归编译目录中的文件

(vhdl - Recursively compile files in a directory using Modelsim and a TCL script)

发布于 2020-12-11 16:40:48

我使用modelsim来模拟我的HDL设计。我想构建一个基于脚本的工作流,这样我就不必使用GUI并可以更快地进行仿真。

我典型的目录树是:

rtl/
  includes/
  module1/
  module2/

我需要做的是编译rtl文件夹中的所有.sv和.vhd文件,并将设计加载到modelsim中。

我的脚本有一个框架:

quit -sim
vdel -all -lib work
vlib work
vmap work work

# compile systemverilog
vlog -work work -svinputport=net rtl/file1.sv
vlog -work work -svinputport=net rtl/module1/file2.sv

# compile vhdl
vcom -work rtl/file3.vhd
vcom -work rtl/module2/file4.vhd

# Load design
vsim work.top_name -voptargs=+acc

run -all

我想做的是自动搜索.sv和.vhd文件,并以正确的顺序编译它们我尝试过的基本解决方案使用foreach循环:

 foreach file [fileutil::findByPattern $basepath *.sv] {
    vlog -work work -svinputport=net $file
  }

但是modelsim对此并不满意,因为文件可能并不总是以正确的顺序编译。任何提示将不胜感激,在此先感谢。

安德里亚

Questioner
a_bet
Viewed
11
dave_59 2020-12-12 04:08:12

除非你建立一些编码约定,否则不可能自动订购SystemVerilog文件。宏和其他编译器指令对编译顺序很敏感,并且在许多情况下,只有使用显式排序的文件列表来处理宏的唯一方法。使用宏时,通常通常 `include "file.svh"在需要宏的地方使用,而file.svh不会在命令行中结束。

包引用需要解析文件,如果对包的唯一引用是通过import语句,则可以通过解析所有文件来编写脚本来构建依赖项列表。

但是大多数人只是手动创建具有正确顺序所需文件的文件。由于文件仅需要按正确的顺序解析一次,因此这将始终更加高效。