映射库modelsim

时间:2018-03-09 20:32:27

标签: tcl vhdl modelsim

我正在尝试使用ModelSim PE 10.4a中的do文件映射库,并且无法将它们放在项目本地。例如。我不想硬编码用于更改目录的命令以将源代码编译到工作目录中,但我可以提供.do / .tcl文件的路径来定义静态库或其他东西。对于Xilinx核心库,编译的源代码不会移动,我不需要重新编译,因此我可以进行硬映射。但是,我正在为一个项目开发一些东西,并想要一个很好的方法来映射库并编译它们。对于单元测试,我不介意使用这种硬编码方法。但是,对于这些位置可能会发生变化的项目,或者与我的库不同的目录可能很远,有什么更好的方式来做我在下面所做的事情?

以下是我编译库(do_map_lfsr.do)的方法

# 0) Create work directory for modelsim
vlib LFSR_lib

# 2) Compile files in use order
#vcom -93 -work work src/*.vhd
vcom -93 -work LFSR_lib GaloisLfsrBody.vhd
vcom -93 -work LFSR_lib LfsrPack.vhd

以下是我从testbench

的位置运行此do文件的方法
# 1a) map/compile libs
# trying to find better way to do this
cd ../
do do_map_lfsr.do
cd unit_test/
vmap -modelsim_quiet LFSR_lib ../LFSR_lib

是否有一种奇特的方法可以使用.do / .tcl文件查找和重新编译我的库,然后将它们映射到单元测试之外的开发中?有没有办法定义静态库或者在我更改目录时不会消失的东西?

1 个答案:

答案 0 :(得分:0)

为了查找文件,Tcllib find command(在fileutil包中)应该非常有用。

package require fileutil

proc needsRecompiling {name} {
    return [expr {[file extension $name] in {.do .tcl}}]
}

foreach filename [fileutil::find . needsRecompiling] {
    if {[file extension $filename] eq ".do"} {
        # Process the .do file here
    } else {
        # Process the .tcl file here
    }
}

当然,假设您可以独立处理每个文件;列表的顺序无法保证(可能取决于文件系统中基础目录节点中的顺序等等)。如果您需要执行更复杂的操作,例如匹配具有不同扩展名的文件,则需要编写更多代码。