【发布时间】: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 对此并不满意,因为文件可能并不总是以正确的顺序编译。 任何提示将不胜感激,在此先感谢。
安德烈亚
【问题讨论】:
-
什么定义了“正确”的顺序?
-
modelsim 报错,如果导入包的模块在包之前编译,例如
-
那么你将需要一个拓扑排序。
-
听起来很复杂。我在尝试做一些不寻常的事情吗?我不是专家,但我认为我的方法很简单。
-
您可以使用诸如“make”之类的工具,并在 Makefile 中定义依赖项,或者使用更动态/编程的方法,这需要查找所有导入,创建所有模块的列表和具有依赖关系的包并进行拓扑排序。可能值得在互联网上四处寻找,看看是否有人以前做过。
标签: tcl vhdl verilog system-verilog modelsim