我成功地在ModelSim中编译了一个大型VHDL设计。这里的设计并不重要,我的问题是关于任何VHDL设计的ModelSim命令。
现在假设我有一个实体E1,我想知道E1正在使用/实例化的所有包和实体。 我想在像这样的Tcl过程中使用此命令
proc get_dependency_list_of_entity { E1 } {
...
}
换句话说:如何使用ModelSim命令提取vhdl模块的所有依赖项。
我的方法是这样的:
命令write report -tcl
返回足够的信息来提取E1库,比如L1。
现在命令vdir -lib L1
返回在L1中编译的所有实体和包。但当然这些太多了。它还列出了与E1无关的软件包。
那么有没有办法用ModelSim命令获取vhdl模块的依赖模块?
答案 0 :(得分:2)
我终于找到了解决方案。
命令 vdir -lib $lib -prop dpnd $entity
会返回如下内容:
data: ENTITY E1
# Depends on: P ieee std_logic_unsigned RYmj:=TK`k=k>D@Cz`zoB3
# Depends on: P ieee std_logic_arith 4`Y?g_lldn;7UL9IiJck01
# Depends on: P std textio 5>J:;AW>W1[[dW0I6EN1Q0
# Depends on: P ieee std_logic_1164 5=aWaoGZSMWIct0i^f`XF1
# ARCHITECTURE BODY rtl
# Depends on: E L2 E2 3B3>6RbjY07ohgTgj<M4r0
# Depends on: E L3 E3 5?a[d8Ikz7>zWX`U97gNE2
# Depends on: P ieee std_logic_unsigned RYMj;=TK`k=k>C@Cz`zoB3
# Depends on: P ieee std_logic_arith 7`F?g_lkdn;7UL9IiJck01
# Depends on: P std textio 5>J:;AW>w0[[dW0I6EN1Q0
# Depends on: P ieee std_logic_1164 5=aWboGZSMlIcH0i^f`XF1
# Depends on: E work E1 ;4e7E?eQ@DHPeB>5WUDQK3
P代表包,E代表实体。所以你可以使用正则表达式(比如我在提取函数中)来提取你想要的数据。
proc get_dependency_list_of_entity { lib entity } {
set vdir_data [ vdir -lib $lib -prop dpnd $entity ]
set match [extracting $vdir_data "^ *Depends on: (.+)"]
...
}
...
}
正如我在问题中已提到的:有一些方法可以使用vdir和write report -tcl