ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Verdi 2021搜索功能指南:找回Find String并提升调试效率

Verdi 2021搜索功能指南:找回Find String并提升调试效率 做数字IC验证的几乎没有不用Verdi的。无论是跑仿真看fsdb波形还是追RTL代码逻辑、查netlist连接关系Verdi基本就是日常工作离不开的伙伴。但有个现象我这两年碰到过好几次周围同事也经常遇到就是Verdi从2020版升到2021版之后不少人突然找不到“Find String”这个搜索框了。明明就是想在代码窗口里搜一个信号名、字符串或者关键字结果菜单翻了一圈工具栏找了一遍愣是没看到熟悉的输入框。第一反应就是版本改了、功能被挪走了或者干脆是license出了问题。其实真不是Verdi把功能砍了是2021版的UI布局和默认设置跟老版本不一样了加上搜索功能入口本来就有好几个层级不熟悉的人确实很容易懵。这篇文章我不打算光讲一个“哪里点”的问题而是把Verdi 2021里跟字符串搜索、信号搜索相关的所有实用入口、快捷键、操作习惯一次性理清楚帮你把调试体验拉回甚至超过以前的水平。先说一下这篇文章适合谁看。如果你正在用Verdi 2021.x版本做仿真调试尤其从旧版本迁移上来之后感觉搜索功能“失踪”那本文就是为你准备的。即便你用的不是2021版而是2022、2023这几个后续版本里面的绝大部分操作路径和快捷键依然是通用的只是菜单名或图标位置可能有细微差异。文章核心就解决三件事怎么把“Find String”这个经典搜索框找回来在RTL源码窗口、nWave波形窗口、Signal List信号列表、Netlist Browser这些不同场景下分别怎么高效搜索以及在搜索过程中经常踩到哪些坑、怎么绕开。1. 界面布局与搜索入口为什么2021版“找不到”Find String很多人在2021版里找不到Find String框第一反应是“功能被删了”但其实它一直都在只是不再像老版本那样默认浮在代码窗口边上或者以一个非常显眼的固定搜索条形式摆在那里。新版Verdi把搜索入口重新组织过更强调“按功能区分”所以你要先搞清楚自己到底想搜什么是搜RTL代码里的文本字符串还是搜波形窗口里的信号名还是搜原理图/网表里的instance名。这三类搜索入口全都不一样。1.1 默认界面变化与菜单路径Verdi 2021的默认界面和老版本相比工具栏默认只显示一小部分常用按钮搜索相关按钮默认并不全部摊开。以前你习惯在工具栏上直接看到一个“Find”或者放大镜图标的输入框新版默认是收起来的。这时候最稳的方式是走菜单路径不依赖图标。在打开RTL源码文件.v、.sv、.vhd之后如果要在当前代码窗口搜索字符串经典路径是Edit - Find String快捷键是CtrlFLinux环境下也可能是CtrlF或F取决于你的键盘映射。这个菜单项打开的就是那个非常经典的Find String对话框支持输入搜索内容、设置搜索范围当前文件/所有打开文件/整个目录、选择是否区分大小写、是否按正则表达式搜索等。如果你发现CtrlF没反应先别怀疑键盘建议手动点一下Edit - Find String看对话框能不能弹出来。能弹出来就说明快捷键被改了进Tools - Preference - Hotkeys里重新绑定就好。还有一个容易忽略的地方在RTL代码窗口的右上角或工具栏区域新版Verdi有一个“Quick Search”的小放大镜图标点击后会在代码窗口顶部弹出一个小型搜索条叫Quick Search Bar。这个搜索条跟经典Find String对话框是两套东西它可以做到边输入边高亮但功能选项少很多不支持正则也不支持全目录搜索。很多人觉得自己“找不到Find String框”其实是不小心只会用Quick Search Bar并没有打开那个完整的Find String对话框。1.2 为什么以前“看得到”现在“看不到”了我在实际使用中观察下来Verdi 2021之所以让大家觉得Find String框“消失”主要有三个原因第一个原因是工具栏定制问题。Verdi的工具栏是可以自己拖拽定制的如果你从旧版本导入了老的layout或配置文件有些按钮会错乱或者干脆没加载进来。反过来如果你没有导入旧配置新版的默认工具栏又不会把搜索框直接放出来。这就导致一个尴尬局面老用户找不到新用户不知道有。解决方法是右键点击工具栏空白区域选“Customize”或“Toolbar Setup”在搜索相关分类里把Find String按钮拖到常用工具栏。第二个原因是窗口焦点问题。Verdi是多窗口联动工具同一个操作在不同的焦点窗口下行为完全不一样。比如焦点在nWave波形窗口时菜单栏上可能不会出现“Edit - Find String”这个选项而是变成“Search - Signal/Object”之类的条目。有些用户眼睛只看菜单栏第一层看到没有Find String就以为功能没了其实是焦点窗口不对。第三个原因更容易被忽视——RTL代码窗口如果处于“Read Only”或者“Source Browser”模式下部分菜单项会被置灰或隐藏。这种情况通常发生在你打开的是综合后的网表文件或者从Library Browser里跳转出来的只读源文件上。解决方法是确认当前文件处于可编辑的源码视图模式或者直接换一个Source窗口再试。2. RTL源码窗口里的搜索核心方法与快捷键明确了菜单路径之后真正影响调试效率的其实是你能不能熟练运用各种搜索方式和快捷键组合。说实话如果只是偶尔搜一两个信号名随便怎么点都行。但如果你是在追一个跨模块的bug需要在几十个文件里反复搜索同一个信号的驱动和负载那搜索手法的差别就是几小时和十几分钟的差别。2.1 最经典的Find String对话框完整用法按CtrlF打开的Find String对话框看起来很简单里面有几个选项但很多人用了一年都没用全过。我逐个说一下我在实践中认为最有用的选项。Search In区域默认是“Current File”。如果你要搜整个工程或某个目录可以选“All Opened Files”或者“Specified Directory”。这里有个细节选“Specified Directory”的时候可以勾选“Include Subdirectories”并且可以指定文件扩展名过滤比如只搜.v和.sv文件避免把一堆生成文件、日志文件也扫一遍。这样搜出来的结果列表里每一条都会带上文件和行号双击就能跳转。Match Case区分大小写。SystemVerilog里信号命名通常是大小写敏感的这个选项默认是关的但如果你在搜“clk”的时候总把“CLK”“Clk”也搜出来会特别烦。我个人的习惯是调试RTL时把这个勾上调试脚本或者配置文件时再放开。Regular Expression正则表达式这是很多人的认知盲区。Verdi的Find String支持正则后你可以一次性匹配多种命名模式。举个例子你要找所有带rd_data前缀的信号直接搜^rd_data.*或者搜rd_data_[0-9]这种带数字编号的总线信号一次就能全部列出来。这个功能用在查找总线信号、查找带特定后缀的打拍信号上非常高效。Search Backward向光标上方搜索快捷键是ShiftCtrlF或者搜索框里的方向选项。这个在长文件里往上翻代码时很实用不用每次滚到文件头再往下搜。Search and Mark这个选项建议大家勾上它会在所有匹配到的地方做一个书签标记bookmark。之后你可以用F2在标记之间跳转一键在信号的多个驱动点、多个例化点之间来回切。我排查多驱动冲突问题时基本离不开这个功能。2.2 常用快捷键组合背熟能省一半时间搜索快捷键这块很多老手也只记住了CtrlF但其实跟查找相关的还有一组非常常用的快捷键列出来你就知道了操作快捷键说明打开Find String对话框CtrlF最基础不解释在搜索结果中跳转上一处/下一处F3 / ShiftF3打开对话框后按F3可以连续查找下一个打开Quick Search BarCtrlShiftF或工具栏放大镜边输入边高亮轻量搜索跳到指定行号CtrlG配合搜索结果快速定位添加/跳转书签F2 / Next Bookmark常在源码大文件中定位搜索选中信号并高亮所有例化位置选中信号后按x这是Verdi独有特性会高亮所有同名信号最后这个x是我特别想强调的。在RTL代码窗口里用鼠标双击选中一个信号名再按小写字母xVerdi会在当前窗口里把所有出现该信号名的地方都高亮出来而且不同驱动类型会有不同颜色。这个功能在某些老版本里叫“Highlight Selected Object”2021版里依然保留。它和Find String搭配起来非常好用先用x高亮全局再用Find String精确查找某个具体位置基本能应对90%的信号定位场景。2.3 Quick Search Bar与Find String的取舍有些朋友升级2021版后发现Quick Search Bar好像挺好用的就不纠结Find String框了。这里我提醒一句这两个搜索方式各有各的适用场景最好都掌握。Quick Search Bar的优势是即时显示、低干扰尤其适合你大概记得信号名的某一段、但又不确定全称的时候边打字边看命中情况。它默认不支持正则也不支持跨文件搜索所以一旦你判断需要搜目录级别或者多文件时还是得回到完整的Find String对话框。另外Quick Search Bar有一个小问题在超大文件比如一个10万行的top.v里输入搜索词会有轻微卡顿因为它每输入一个字符就要实时扫描整个文件。在这种场景下反而是传统的Find String对话框一次性列出所有匹配的方式更流畅。3. 波形与信号列表中的搜索nWave和Signal List的隐藏操作字符串搜索不只在RTL代码里用做调试时更常遇到的一个场景是打开fsdb波形之后你需要在Signal List里快速定位某个信号或者在nWave的波形窗口中把某个信号加到波形里看timing。这个环节如果全靠鼠标在列表里滚动查找效率极低。3.1 Signal List窗口的Find与FilterVerdi里打开fsdb波形时通常会有一个“Signal List”窗口也叫Signal Browser里面列出了当前设计层级下的所有信号。在2021版中这个窗口顶部有一个Filter输入框也就是很多人期待的“Find String”样式的小框。它支持你直接输入信号名的任意一部分列表会实时过滤。这个Filter和传统的Find String有些不同——它是按关键字匹配并显示所有包含该关键字的信号不是传统的“跳转到下一个匹配处”。如果你更习惯老式搜索可以在Signal List窗口内直接按CtrlF会弹出一个Find对话框用来在列表里定位信号名。这两种方式我觉得可以按场景选信号数量少几十个以内直接用Filter输入关键词一眼就能看到目标信号数量巨大几千上万个尤其来自复杂SoC设计时建议用CtrlF快速跳转避免Filter把列表过滤得太狠反而不容易判断信号所在的原先位置。3.2 在nWave波形窗口里向波形图添加信号的3种快捷方式nWave是Verdi的波形显示窗口日常添加信号最原始的方法是在Signal List里点中信号然后拖到波形区。但调试时效率最高的其实是另外几种方式。方式一在nWave窗口按CtrlA后在波形区输入信号名。直接在波形窗口激活的前提下按快捷键或者在filter区域输入信号名片段Verdi会从已加载的信号列表里匹配选中后回车就能加波形。这种方式适合你知道信号名、但暂时不想在Signal List里翻找的情况。方式二在RTL代码窗口里选中信号按CtrlW这一步我们通常叫“送波形”。它是把信号从代码窗口直接发送到nWave波形窗口非常方便。尤其在做前面说的“找一个信号的驱动点”时看到哪个信号需要看时序直接CtrlW送进去完全不用去Signal List里找。注意2021版中CtrlW默认是“Add to Waveform”如果没反应检查一下是不是和某个系统快捷键冲突了。方式三使用nWave的Search功能搜索信号对象。在nWave窗口菜单中选择Search - Signal/Object会弹出搜索界面支持按信号名搜索、按“contains”模糊匹配甚至支持搜索instance路径里的关键字。这个功能其实对标的就是Find String在波形场景下的变体很多人不知道所以总觉得只有在代码窗口才能搜信号。3.3 Netlist Browser里的搜索技巧除了写RTL代码和看波形工程师经常还会打开综合后的网表netlist。网表文件动辄几十万行信号名、instance名都是一长串带路径的字符串这时候在网表界面里搜索的能力就变得更重要了。在Netlist Browser原理图/网表视图中查找instance或net的快捷键通常是CtrlF同样会弹出Find String对话框但搜索范围是当前网表视图。更高级的用法是在Netlist Browser左侧的“Search”区域输入一个instance名或net名的通配符比如*u_uart*Verdi会过滤出所有名字里含u_uart的instance。这个操作在追一个信号跨了多少级、经过哪些module时特别有用。再说一个比较隐蔽的在原理图视图里鼠标悬停在一个net上时按F可以高亮该net的所有连接点按hhierarchy可以上下跳转层级。这些虽然不是字符串搜索但属于“对象搜索”的范畴很多做后仿或查连接关系的朋友没有充分利用起来实际上它们比反复输入信号名要高效得多。4. 常见问题排查与调试效率提升的配套技巧搜索功能本身说完了但我知道实际操作中大家更容易遇到的问题其实是“找得到入口但效果不对”或者“搜索功能好好地突然失灵了”。这些坑我基本都踩过一遍集中整理一下顺便把几个配合搜索一起使用、能让调试效率整体上一个台阶的Verdi自带功能也讲清楚。4.1 经典问题定位找不到输入框时的排查步骤如果你在2021版中遇到“没有Find String框”的现象按下面这个顺序检查一般几分钟就能定位确认焦点窗口是RTL代码窗口Source Browser不是nWave也不是Netlist Browser。不同窗口的菜单结构不一样焦点不对自然看不到对应菜单项。确认菜单路径是Edit - Find String如果菜单里这一项是灰色说明当前文件处于只读模式或不支持编辑的视图换一个文件或重新打开该文件。尝试快捷键CtrlF如果无反应进Tools - Preference - Hotkeys搜索“Find”看看快捷键是否被修改或冲突。看看工具栏图标右键工具栏空白处选择“Customize”在“Edit”或“Search”分类下把Find String按钮或搜索框拖回工具栏。如果以上都不行可以退出Verdi删除当前用户的Verdi配置文件通常是用户home目录下的.verdi*或.synopsys_verdi*及novas.rc、verdi.rc之类的文件重启Verdi恢复默认界面布局。做这一步前建议先备份原配置文件避免其他自定义设置丢失。这些步骤里第5步其实属于“终极手段”但实际遇到界面异常时往往最有效。Verdi的界面状态存在用户的配置文件里旧版本的配置在新版本下加载时偶尔会“半生效”导致部分菜单和工具栏处于不完整状态。删除配置重启后界面恢复默认搜索功能一般也就回来了。4.2 搜索不到结果先检查这4个地方搜索框明明能打开输入信号名却搜不到东西这种情况也挺常见而且90%不是Verdi坏了而是搜索条件设置不对。第一检查当前文件是否真的包含了你要搜的信号。听起来像废话但做过顶层集成的人应该都懂有时候你打开的是某个模块的低层文件信号名其实是在上一层才能看到的。用Search In里的“All Opened Files”或“Specified Directory”能有效避免这种问题。第二检查大小写匹配。SystemVerilog里信号命名确实区分大小写如果你不确定信号名里data还是Data干脆别勾Match Case或者用正则[Dd]ata。第三检查是不是有不可见字符。复制信号名时如果带上空格、Tab或者换行搜索时自然匹配不到任何内容。遇到这种情况可以手动重新输入信号名的核心部分不要直接粘贴一串看起来很对的字符串。第四如果搜索结果的列表弹出来了但双击不跳转大概率是文件路径映射问题。Verdi有时候会显示一个文件的内容但内部记录的路径和当前打开的文件不一致多发生在从波形反向定位到代码的场景。解决方式是在该文件窗口内用File - Open重新打开一次对应文件让Verdi重新建立路径映射。4.3 搜索配合其他功能Store/Replay、Signal History 与书签系统搜索只是定位问题的第一步真正提高调试效率还要靠搜索之后的“记录、整理、回放”能力。Verdi的Store/Replay机制很多人不知道但在找复杂bug时极为好用。当你打开fsdb波形加了一些信号缩放到了某个感兴趣的时序区间还按了几次搜索跳转位置后可以进Window - Store Window Layout把这个状态保存下来或者直接存为xxx.rc文件。之后无论何时重新打开Verdi只要执行对应的Replay或直接加载这个布局之前配置的窗口位置、信号列表、缩放区间全都会恢复。这个功能在需要反复对比同一段信号、或者把问题交接给同事时特别有价值。我之前调试一个跨时钟域数据同步问题时就是把“关键信号搜索匹配点高亮设置”存成了一个rc文件第二天打开还在省了半小时重新配置的时间。另外nWave窗口左侧通常会有一个“History”面板记录你在这段时间内所有添加到波形区的信号操作。如果想找回之前误删的一个信号或者想回看自己当时是怎么一步步把信号拉进来的直接从History里点选即可。配合前面提到的搜索送波形操作这套组合可以做到搜索信号名-找驱动点-送波形-存布局-下次一键恢复整个流程非常顺滑。4.4 个人实操中的几个习惯与建议文章最后说点我在实际项目里总结出来的经验。用Verdi做调试工具熟练度对效率的影响比想象中大得多。我用过2020、2021、2023几个版本说实话2021版改版带来的界面“惊吓”其实是短暂的一旦把这些入口摸清你反而会觉得新版的搜索体系更灵活因为它是按窗口类型区分搜索的不容易串。我的第一个习惯是每到一个新版本先把快捷方式备份一份。Verdi的快捷键可以通过Tools - Preference - Hotkeys里导出成文件这个文件很小但能在你切换服务器、升级版本时省下大量重新配置的时间。第二个习惯是把常用的搜索场景做成模板。比如查多驱动、查例化、查模块定义这些操作路径都不同但可以通过对话框历史记住大部分参数。Verdi的Find String对话框会保留历史输入下次打开时下拉框里就有之前搜过的关键词算是半个“收藏夹”。第三个习惯有点个人色彩我会刻意练习用快捷键而不是鼠标。刚开始记不住就在工位上贴一张手写的快捷键表用一星期基本就能形成肌肉记忆。调试有时就像在和时间赛跑提交任务卡住时能在别人找菜单的功夫里多完成一轮搜索定位这种差距在项目紧张的时候是真能感觉到的。说到底Verdi 2021里的Find String框没有真正走丢它只是换了藏身的地方。花十几分钟把这些入口捋顺之后每一次搜索都会觉得“嗯这么找才对”。如果你在按文中步骤操作时还是有问题不妨检查一下自己的Verdi版本小版本号2021.x的某些小版本确实存在界面细节差异但大的操作逻辑和快捷键设计是延续下来的耐心一点总能找回来的。
返回列表