我使用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对此并不满意,因为文件可能并不总是以正确的顺序编译。任何提示将不胜感激,在此先感谢。
安德里亚
除非你建立一些编码约定,否则不可能自动订购SystemVerilog文件。宏和其他编译器指令对编译顺序很敏感,并且在许多情况下,只有使用显式排序的文件列表来处理宏的唯一方法。使用宏时,通常通常 `include "file.svh"
在需要宏的地方使用,而file.svh不会在命令行中结束。
包引用需要解析文件,如果对包的唯一引用是通过import
语句,则可以通过解析所有文件来编写脚本来构建依赖项列表。
但是大多数人只是手动创建具有正确顺序所需文件的文件。由于文件仅需要按正确的顺序解析一次,因此这将始终更加高效。