首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何添加所有Modelsim波形?

如何添加所有Modelsim波形?
EN

Stack Overflow用户
提问于 2012-10-11 06:01:40
回答 3查看 17K关注 0票数 0

我目前正在做一个大项目,里面有很多模块和子模块。是否可以(GUI或tcl脚本)添加所有wave并将其分组在树中,如模块树?

例如:模块A包括模块b0、b1、b2、b3、.、b10。我想把每一块b0~b10加在A组的独立地面上。

我认为这是懒惰的方式,但它可能比许多配置tcl脚本更好。

EN

回答 3

Stack Overflow用户

发布于 2012-10-28 12:57:25

我不是Questa/Modelsim专家,但我在TCL中做了一点,所以这只是我的方法。

这分为几个步骤;

1)遍历设计层次结构

2)创建分组

3)向组中添加信号

1)穿越设计

要么遍历模型本身,要么将所有信号添加到波动和遍历

1.1)您可以使用select+search search wave -all signal_name来查找事物

或者您也可以使用查找实例/*遍历设计,然后手动递归(例如,查找实例/top/* .),然后使用查找信号/网/.YOUR_LEVEL

2)创建团体

您可以通过在wave窗口中选择某个内容并执行"wave组名称“来创建一个组。

不太明显的是,您可以做同样的事情,然后重新选择出现的“红色组菱形”,然后重新分组,从而创建一个子组。

也可以使用"add -group G1 -group G2“指定子组。

3)向组中添加信号

您可以使用正常的"add -position N wave signal_name“来添加信号。

其他有帮助的部分;

( a)在波浪窗口中选择东西

代码语言:javascript
运行
复制
set WAVEWIN [view wave]
$WAVEWIN.tree.tree1 curselection
$WAVEWIN.tree.tree1 selection clear all
$WAVEWIN.tree.tree1 selection set 1 2 etc

( b)从选定的项目中获取信号名称

代码语言:javascript
运行
复制
# gets its signal name "sim:/path/to/sig"
set SIGPATH $WAVEWIN.tree.tree1 get 1

( c)我可能会评论说,将所有信号添加到同一个波窗口可能会变得非常难以管理,所以您可能还想考虑添加到单独的波窗口中吗?

代码语言:javascript
运行
复制
set WAVEWIN [view -new wave]
票数 4
EN

Stack Overflow用户

发布于 2012-11-01 09:59:54

因为您只想要一种自动的方法来进行模拟中的设计递归分组,那么这里有一些代码,我认为可以做到这一点。它只是使用上述一些答案的一个实现,但我不想通过将它添加到上面的答案中来混淆上面的答案,因此创建了这个单独的答案。

你想要做的事情(想要的刻线输出的手动视图)

代码语言:javascript
运行
复制
add wave                         /top/*
add wave -group dut              /top/dut/*
add wave -group dut -group subA  /top/dut/subA/*

您可以使用Questa/Modelsim find命令和add wave来做到这一点,就像上面显示的那样,使用一点TCL魔术。注意,“-noupdate”使得添加大量信号的速度要快得多,但是在完成时您需要调用wave刷新

代码语言:javascript
运行
复制
# Kick everything off from here.
proc add_wave_groupedrecursive { } {
  add_wave_breadthwiserecursive "" ""

  # Added all signals, now trigger a wave window update
  wave refresh
}

proc add_wave_breadthwiserecursive { instance_name prev_group_option } {
    # Should be a list something like "/top/inst (MOD1)"
    set breadthwise_instances [find instances $instance_name/*]

    # IFF there are items itterate through them breadthwise
    foreach inst $breadthwise_instances {
      # Separate "/top/inst"  from "(MOD1)"
      set inst_path [lindex [split $inst " "] 0]

      # Get just the end word after last "/"
      set gname     [lrange [split $inst_path "/"] end end]

      # Recursively call this routine with next level to investigate
      add_wave_breadthwiserecursive  "$inst_path"  "$prev_group_option -group $gname" 
    }

    # Avoid including your top level /* as we already have /top/*
    if { $instance_name != "" } {
        # Echo the wave add command, but you can turn this off
        echo add wave -noupdate $prev_group_option "$instance_name/*"

        set CMD "add wave -noupdate $prev_group_option $instance_name/*"
        eval $CMD
    }

    # Return up the recursing stack
    return
}

当然,您可以对此进行改进,允许您只显示N级,甚至可能只使用来自TCL的regexp来显示感兴趣的模块。但我把这个练习留给读者去做。

票数 1
EN

Stack Overflow用户

发布于 2022-11-07 20:13:16

现在不确定这是否显而易见,但您可以这样做:

代码语言:javascript
运行
复制
add wave -recursive *
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12833134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档