【芯片工具】在Verdi上“量带宽”的tcl脚本

来源:AdriftCoreFPGA芯研社 电路设计 9 次阅读
摘要:这个脚本在多年之前我就想做出来的,算是很执念的一件事。但是无奈自己的tcl编程能力和Verdi相关指令行掌握的太弱了,尝试了几次都没有成功。而这次我决定借助大模型力量再试一次,所以对着DS描述了这个脚本的行为: 但是后面想了想,描述的不够准确,于是进行了第二次描述: 其实想要的效果就是这样的(完成版): 讲真当年看到这个脚本的实现效果时真的是迷得我走不动道,所以这次必须要实现出来。 要在Ve

这个脚本在多年之前我就想做出来的,算是很执念的一件事。但是无奈自己的tcl编程能力和Verdi相关指令行掌握的太弱了,尝试了几次都没有成功。而这次我决定借助大模型力量再试一次,所以对着DS描述了这个脚本的行为:

但是后面想了想,描述的不够准确,于是进行了第二次描述:

其实想要的效果就是这样的(完成版):

讲真当年看到这个脚本的实现效果时真的是迷得我走不动道,所以这次必须要实现出来。


要在Verdi里执行tcl脚本,肯定需要先把控制器调出来。这个很简单,在Tools - Perferences里设置一下就可以:

把TCL Command Entry使能:

然后在跳出来的Console框上点一下弹出拽到一边去,省的遮挡波形界面:


然后就开始进入依赖大模型指导的编码阶段!但非常尴尬的是,DS给提供的集中方式和命令都会在Verdi里执行时报错,和之前在各种搜索引擎以及技术贴里尝试的结果一样,这个时候就非常绝望。但是这次我想到了两个比较有价值的方法进行尝试。第一种方法就是在波形界面里各种操作,然后观察对应的tcl指令是什么,并在此基础上各种选择和尝试命令:

通过这种方式,找到了一些好用的命令,比如:

#设定左键锚定的时间线按上升沿跳转wvSetSearchMode -win $WaveID -posedge#让左键锚定的时间线跳到下个沿wvSearchNext -win $WaveID#获得当前时间点的时间,"1 315000 x 1ns"形式wvGetCursor $WaveID -time

但是这显然是远远不够的,主要是有一个操作“获取选定信号或指定信号当前时刻的值”这个一直没有找到对应的命令。于是灵机一动我又想到去Verdi内置的tcl脚本看看,顺便在目录里grep一下有没有还能用的命令和方法,这个在Verdi app里可以很容易地找到:

右键打开“source”就可以看源码了:

之后在放脚本的目录里各种查找,还真的让我找到了对应的命令!

wvGetSigValueByTime $valid_signal

只要后面跟着对应信号的完整路径,就可以得到对应信号的值了。而怎么获取到一个信号的完整路径(尤其是在verdi内通过logic生成的信号),可以这样做:

#获取G-perf组(和G1/G2组一样)第二个信号的完整路径set valid_signal [wvGetSelectedPureSignals -win $WaveID [wvSelectSignal -win $WaveID {( "G-perf" 2 )}]]

这些命令都明确了之后,只要解决一些具体组织和使用方式,就可以把脚本组织出来了。比如说这个脚本后面我打算主要用在axi总线上,那么就没必要采样size这类信息,只要设定一下perf_size是16B/32B/64B等就行了,每次握手即代表累加了perf_size到总数据量上。


具体编码过程就不赘述了,在最后明确一下使用方法。只要在一个Group里从最上开始放上三个信号:clk、valid和ready,并把这个Group重命名为G-perf就可以了:

而后用鼠标左键和中键分别在波形上选定两个时间点,中键选取的必须在后面。最后在Console里以source的方式执行perf_valid_ready.tcl,等待左键选择的黄色时间线一路蹦向白色时间线,然后log里就会打印平均带宽:

具体的效果在开头放过了,最后再放一下吧!

相关推荐
评论区

登录后即可参与讨论

立即登录