在绝大多数block级验证时,正常用例结束后,所有的fifo都应该是空的。如果fifo不空,很有可能存在潜在问题。所以,平台应该在用例结束之前,做一次所有dut中fifo是否为空的检查。但是,对于验证来说,需要把dut中所有的fifo都拿到,并不是一件简单的事情。而,该脚本就实现了这个功能。
verdi工具提供了一套NPI接口,可以让用户得到设计的hierarchy。这样我们就能通过fifo字符串匹配,提取出所有的fifo,并生成一个function,供平台调用。
脚本fifo_empty_checker.tcl如下
1 | debImport "-elab" "$env(DMPDIR)/simv.daidir/kdb" |
该脚本需要在平台编译之前调用如下命令产生。
1 | verdi -batch -play fifo_empty_checker.tcl |
该脚本是通过吃vcs产生的kdb,当然也可以吃filelist,或者fsdb。
该脚本生成test_end_checker.sv格式如下:
1 | $display("test end checking start..."); |
可以将它封装到一个task中
1 | function int checker(); |
在平台结束之前,就可以调用该function来检查fifo是否都空了。
再增加一个配置文件checker.cfg。第一列是module名称,第二列是信号,第三列是要检查的值。
1 | *fifo*,o_empty,1 |
提示:如果使用filelist的方式加载,若design有error,有可能取到的hierarchy不全,需要增加环境变量setenv NPI_IGNORE_ERROR_VIEW 1
。当然,更好的方式是通过打开kdb的方式加载。
扩展:verdi其实提供了apps来实现类似功能。
verdi –> tools –> VC Apps Toolbox –> Design Expioration
里面有比如 Get Module Hierarchy,Get Module IO, Find Instance with Module Def Name等app。
这个apps都可以使用GUI的方式,也可以使用batch的方式。例如:
1 | $VERDI_HOME/share/VIA/Apps/DesignComprehension/FindInstDefWild/findInstDefWild_batch.pl -f flist -top top_tb -pattern "*fifo*" -outlog fifo.log |
参考资料:
verdi/doc/NPI_tutorial.pdf
verdi/doc/VC_APPS_NPI.pdf