【问题标题】:With Modelsim .do file, how to compile a list of files using vcom使用 Modelsim .do 文件,如何使用 vcom 编译文件列表
【发布时间】:2023-03-20 02:06:02
【问题描述】:

在 Modelsim .do 文件中, 我试过了:

vcom file1.vhd file2.vhd

效果很好。

但是当我尝试时:

set comp_files "file1.vhd file2.vhd"
vcom $comp_files

它不起作用,我收到一个错误:

错误:(vcom-7) 无法以读取模式打开设计单元文件“file1.vhd file2.vhd”。

有人知道如何让 comp_files 工作吗?

【问题讨论】:

  • .do 文件是 tcl 脚本。你看过 tcl 语言参考吗? Modelsim 文档中应该有一个。
  • @BrianDrummond 我试过了,但我找不到我的 pb 的解决方案。我这样做是因为我想对我的 vhdl 文件进行分类,例如:design_files、testbench_files、XXX_files...

标签: tcl vhdl fpga modelsim


【解决方案1】:

您必须使用 {*} (Tcl 8.5) 将列表 comp_files 扩展为单个参数:

set comp_files "file1.vhd file2.vhd"
vcom {*}$comp_files

或者,您可以使用旧版eval(也应该适用于

set comp_files "file1.vhd file2.vhd"
eval vcom $comp_files

【讨论】:

    【解决方案2】:

    所以:set comp_files "file1.vhd file2.vhd" 创建一个列表。

    试试llength $comp_files,它会返回“2”=两个元素。

    所以你可以为列表中的每个文件调用 vcom

    foreach comp_file $comp_files { vcom $comp_file }
    

    【讨论】:

    • 我试过你的解决方案,但它告诉我** Error: can't read "comp_file": no such variable
    • @CongLi 嗯,奇怪。你确定你没有打错什么吗?在这里工作正常。
    • 技术上,第一个set 命令创建一个字符串;一旦将字符串作为参数传递给期望接收列表的第一个命令,该字符串就会被解析并解释为列表。因此,如果想要绝对确定(这是一件好事!),最好明确使用list 命令:set comp_files [list file1.vhd file2.vhd]
    • @kostix 当然,总有更好的方法。只是告诉 OP 一个可能的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多