1.打开某些隐藏窗口或图标:
1.1双击uvm_1.2_ubus,选择一个路径,点finish,dvt会自动将ubus这个例子的文件拷贝在你创建的路径下,并且自动帮助你构建项目
1.2 下面是创建完成后的界面
1.3 打开项目里的代码文件比如ubus.env.sv,可查看验证代码
1.4 windows——show view:打开我们需要的功能窗口,other里有其他许多未显示的功能窗口
1.5 在框选区域里点击鼠标右键,有很多方法可以选择
2.1 console窗口:查看编译信息,所有已编译文件后的信息都在该窗口内
2.2 default.build:可以查看规定要编译的文件信息
2.3 在window——show里打开program窗口
program窗口:查看warning信息,warning信息产生的部分原因是由于语法或者语义使用不标准
2.4 语法检查:当clas少写了一个s,出现了53处错误
dvt的实时编译实现的是一个增量编译,即只编译与你改动有关的地方,出现错误不知道哪里有问题的时候,建议先保存,再点击rebuild project,重新编译
rebulid project:重新编译整个文件
2.5 增量编译有时并不可靠,当把错误修正后(clas的s添加后),仍然会有error信息,这也是由于增量编译导致的,只编译与改动有关的地方,解决办法是点击rebuild project,重新编译整个文件
2.6
在代码编辑过程中,可以通过“Alt+/”来触发内容辅助(我的电脑alt+/触发不了,只能用ctrl+空格触发。
一些特定的场景,也会自动触发内容辅助:
例如在访问句柄或者结构体中的成员时,在敲入“.”后
例如在表达式中对一些变量赋值或者比较时
在内容辅助列表可以通过键盘上下键或者光标进行选择,然后敲击enter选择,也可以敲击Esc退出
ctrl+空格可以敲击三次
第一个是可以选择在范围内访问的内容(信号,变量,方法等),取决于所包含的内容
2.7 第二个用于代码模板
2.8 第三个是其他的东西,比如模块例化
2.9 tab键:切换参数
2.10 注意观察图标,一个是关键字的补全,一个是方法的补全
2.11 鼠标右键——Show——Quick Types:可以查看所有类型,不管是硬件,软件,module,class。便于我们定位到我们要找的东西(uvm_package,tb,interface,dut)
3.1
3.2
给design添加敏感列表,比如always里面有的信号不在敏感列表里,它会给出提示
当想要使用某个package里的某个变量或者方法,但是没有import进来,dvt也会给出提示
父类虚方法修改了但子类虚方法没改,dvt会给出提示
3.1 为interface句柄添加virtual:对于方法中某些形式参数为interface句柄类型,缺少virtual声明的情况下,DVT会报错并提供快速修正提案。
ubus_if缺少关键词virtual报错,此时可将鼠标放到ubus_if处出现修改选项框,选择add virtual qualifier选项即可自动添加virtual;或者鼠标移动到改行代码处,按住ctrr+1,也会出现修改选项框。后续所有修改方法均类似,就不赘述修改方法了。
3.2 拼写修正:对于注释或者字符串中的的单词拼写会有提示
注释里的interfce拼写出现错误,按ctrl+1后dvt给出修改提示
3.3 声明方法或者变量:被调用的方法或引用的变量如果不存在,DVT也会报错并给出快速修正提案。
由于引用的vif变量不存在,DVT给出了修改建议(declare field “var”),选择该修改建议后,DVT在该类里新声明了一个interface vif变量,然后我们再对代码做后续的修改即可。
3.4 模糊语义“Did you mean”:如果类型名或者变量名发生拼写错误,也会引起DVT错误,并提出快速修改提案。
由于uvm_aget发生拼写错误,DVT给出修改建议,选择“Did you mean “uvm_agent”选项,DVT自动帮助修改。
3.5 类型引用检查:如果被使用的类型在当前域中不可见,也会引起编译错误
当取消uvm_pkg导入后,由于是增量编译,暂时不会报错,选择重新编译rebuild project后,会出现大量编译错误,选择其中一个编译错误按ctrl+1,给出了两个引入域的解决方按,一个是局部引入,一个是全局引入域。
3.6 实现以及更新外部方法:外部方法只声明没实现,会有warning提醒。
3.7 移除“local”或者“protected”描述符:在访问类的成员时,如果由于封装的缘故而无法访问,则会报错
当我们给transfer类里的data[ ]添加一个local关键词,其他用到data[ ]的类均会出现编译错误,我们选择其中一个编译错误双击之后定位到发生错误的位置,然后按ctrl+1,选择DVT提供的remove提案,dvt会自动帮助我们移除掉local关键词
3.8 更新虚方法声明:如果被覆盖的虚方法原型被修改,而子类的方法未及时更新,dvt也会报错。
子类覆盖父类的方法参数数目不一样时,dvt报错,按ctrl+1选择update方案,子类参数数目自动与父类保持一致
4.1 利用预先准备的模板,结合内容辅助(ctrl+空格)功能可快速完成类型和方法的定义。
利用内容辅助ctrl+空格,dvt会自动提供各种代码模板,代码模板图标注意记住一下。
4.2 模板样式可以在全局代码模板中更新:
windows——preferences——DVT——Code Templates
4.3 代码模板的插入也可以在“Code Template”窗口中拖拽到源代码处
打开Code Templates窗口,在Code Templates窗口选择要使用的模板,比如uvm_sequence_item直接拖拽到代码处即可。
鼠标右键——New——DVT Add from Project Templates,创建vip_template模板;
点击Predefined Project Templates(预定义的模板),更改target folder和包名字;再点击Browser,选择项目所在地址;
项目模板创建完成。
通过Task窗口,完成要完成的TODO部分。
“美化代码”,使得代码“外观”可以标准化,非常方便的代码清扫功能。
格式化选项通过菜单栏上的window——Preferences——DVT——SV——Editor——Formatting来设置代码格式。
先为代码设置好一定的格式,1.比如修剪多余的空格,begin,end的位置,语句间的缩进等;2.再设置tab所包含的空格数为2,为tab间的空格插入空格。
代码格式修改完成后,选择某个文件或者整个项目,右键——Format Source Files
5.1 覆盖提示符(不同颜色的三角形)可指示该方法是否覆盖了父类的方法,不同颜色有不同的含义:
5.2 查看被覆盖方法的实现层次
方法一:ctrl的用法:
光标移到方法名处,按住ctrl键可快速索引至子类方法处
方法二:选择对应的方法,右键——show——layers,可查看被覆盖方法的实现层次
5.3 覆盖父类的方法
要覆盖某个方法时,将光标置于代码处,鼠标右键——Source——Override Methods,选择要覆盖的方法,Dvt会自动生成代码
对于一个类,模块,接口,方法,变量在哪些地方被调用,也是我们经常关心的,我们可以通过右键,Show——Usages在DVT下方窗口中显示该目标被使用的地方。
查看ubus_transfer类被调用的地方
在一些sequence和test中,经常会对transaction或者configuration中的随机变量约束进行修改,我们需要跟踪某些变量的所有约束,继而判断约束是否合理,并且考虑如何管理这些跨层次的约束,可对某些变量:右键——Show——Constraints。
“Ctrl+H”或者点击“探照灯图标”即可弹出搜索窗口,一个搜索窗口即可在整个工作区搜索任何类型,且可通过正则表达式完成模糊搜索。
在Design Hierarchy窗口中,可选择某个设计,在其某个端口上,可右键,“Trace Driver and Load”。
选中源文件中任何一个目标(类型或者变量),右键——Refactor——Rename。
如果要批量的修改某个变量名,比如ubus_transfer改为ubus_trans,可以点击鼠标右键——Refactor——Rename,再点击Preview预览,可以看到有哪些文件的transfer变量名会被修改,再点击ok即修改完成。
(代码版本保存在工作区workspace,所以不要轻易删掉工作区。)
如果要回退到以前保存的版本,可以点击鼠标右键——Compare With——Local History,选择其中一个保存的版本,dvt会再打开一个代码窗口,将窗口放大后做比较,可以观察到当前版本代码和上一版本代码的区别。
在某个版本处点右键——Get Contents,再点击Yes,即可回退到该版本,原版本变为旧版本
(前面在 3.b具体实例里的 3.6 实现以及更新外部方法 中有详细介绍)
我们可以通过鼠标右键——Refactor重构——Join...合并方法;也可以鼠标右键——Refactor重构——Split...分开方法。
选中某个模块,右键——Refactor——Add port或parameter。
选中dut_dummy模块,右键——Refactor——Add port,然后选择要添加的端口名以及方向,添加好后查看该模块在哪里被例化,右键——Show——Instances,双击被例化的地方,代码处FIXME待修改标识,修改该处即可。
显示某个类的详细信息
1.打开types类型窗口,Window——Show View——Other——搜索types,并打开。打开types类型窗口后,选择要查看的类UML图比如ubus_env,右键——Show Diagram,ubus类UML图出现,图中的实线表示ubus_env继承于uvm_env,虚线表示env里的成员以及其句柄,右键ubus_env——Members——Show All,可查看env里所有的变量和方法,点击代码视察图标,再选择某个类,可以查看该类的代码,可以垂直/水平查看代码窗口。
2.在types窗口里也可以直接查看某个类的继承关系,以及该类的变量和方法
打开UVM类型窗口,在该窗口下选择一个类比如base_test类,右键——Show Verification Hierarchy,dvt自动进入Verification Hierarchy窗口,然后选择base_test,右键——Show Diagram,base_test的验证结构图被打开,可以选择里面的组件ubus0,右键——step Into,查看ubus0的验证结构。其他的一些按钮选项也可以尝试点一下。
在UVM层次窗口下选择某个sequence类,右键——Show Diagram,可以查看该sequence类的结构图。
在UVM层次窗口下选择某个sequence类,右键——Show UVM Sequence Tree,可以查看该sequence类前后一共发了哪些sequence。
结合inspect窗口查看代码。
生成HTML文档:Project——Generate HTML Documentation,我打开会直接闪退
在7.2 验证结构UML图有介绍
检查写的代码是否符合uvm规范。
我打开会闪退
查询该类的被覆盖情况,变量配置情况。
选择一个object类——在要做域的自动化的变量中,右键——Source——UVM Field Editor,通过窗口的形式来控制各变量的域的自动化
在7.3 Sequence图里有讲
8.7 UVM支持-Smart Log
上了“颜色”的,而且可供超链接到此处的仿真信息窗口
待补充
待补充