补充
1.打开某些隐藏窗口或图标:
1. DVT基本概念和示例引入
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. 编译检查和内容辅助
2.a 编译检查 compilation check
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.b 内容辅助 content assist
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. 快速修正 quick fix
3.a 概述
3.1
- 在项目编译时(build,可自动增量式触发),会在“problems”窗口出现多处提示(warning/error)
- 在选择某处提示后可快速链接到源代码处,在代码编辑左侧可根据“感叹号”或者“叉号”提示符,选中对应代码,右键——Sorurce——Quick Fix,或者按“Ctrl+1”
3.2
- 为模块添加参数或者端口
- 添加敏感列表
给design添加敏感列表,比如always里面有的信号不在敏感列表里,它会给出提示
- 为interface句柄添加virtual关键词
- 对注释或者字符串中的单词进行拼写修正
- 创建`include的文件
- 声明方法或者变量
- 模糊语义“Did you mean”
- 类型引用检查
当想要使用某个package里的某个变量或者方法,但是没有import进来,dvt也会给出提示
- 实现以及更新外部方法(extern method)
- 移除local或者protected描述符
- 移除未使用信号
- 更新模块实例
- 更新虚方法声明
父类虚方法修改了但子类虚方法没改,dvt会给出提示
3.b 具体实例
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提醒。
- 当我们声明了一个外部方法但是没有实现该方法时,DVT会报一个warning,按ctrl+1使用dvt的提案implement extern function,dvt自动在外部实现了该方法。
- 我们可以通过鼠标右键——Refactor重构——Join...合并方法;也可以鼠标右键——Refactor重构——Split...分开方法。
- 当我们修改了外部方法的声明却没修改其实现的话,dvt会报错,使用dvt的修改提案后,dvt在方法实现里添加了string name。
3.7 移除“local”或者“protected”描述符:在访问类的成员时,如果由于封装的缘故而无法访问,则会报错
当我们给transfer类里的data[ ]添加一个local关键词,其他用到data[ ]的类均会出现编译错误,我们选择其中一个编译错误双击之后定位到发生错误的位置,然后按ctrl+1,选择DVT提供的remove提案,dvt会自动帮助我们移除掉local关键词
3.8 更新虚方法声明:如果被覆盖的虚方法原型被修改,而子类的方法未及时更新,dvt也会报错。
子类覆盖父类的方法参数数目不一样时,dvt报错,按ctrl+1选择update方案,子类参数数目自动与父类保持一致
4. 代码模板和项目模板
4.a 代码模板 code template
4.1 利用预先准备的模板,结合内容辅助(ctrl+空格)功能可快速完成类型和方法的定义。
利用内容辅助ctrl+空格,dvt会自动提供各种代码模板,代码模板图标注意记住一下。
4.2 模板样式可以在全局代码模板中更新:
windows——preferences——DVT——Code Templates
4.3 代码模板的插入也可以在“Code Template”窗口中拖拽到源代码处
打开Code Templates窗口,在Code Templates窗口选择要使用的模板,比如uvm_sequence_item直接拖拽到代码处即可。
4.b 项目模板 project template
- 项目模板是参数化的目录树。在文件内容(.v,.sv,.sh,.e,.vhd,.txt几乎任何文件)以及文件或目录名称中,都可以使用参数。
- 与TODO标记结合使用,你可以将项目模板用作自定义向导。
- 参数是双下划线(例如__pkg_prefix__)或x_和_x(例如x_pkg_prefix_x)包围的ID。
- 该约定允许你像使用DVT的其他任何项目一样,使用快捷手段(自动完成,超链接等)编辑模板。
鼠标右键——New——DVT Add from Project Templates,创建vip_template模板;
点击Predefined Project Templates(预定义的模板),更改target folder和包名字;再点击Browser,选择项目所在地址;
项目模板创建完成。
通过Task窗口,完成要完成的TODO部分。
5. 代码格式化与方法覆盖
5.a 代码格式化 code formatting
“美化代码”,使得代码“外观”可以标准化,非常方便的代码清扫功能。
格式化选项通过菜单栏上的window——Preferences——DVT——SV——Editor——Formatting来设置代码格式。
先为代码设置好一定的格式,1.比如修剪多余的空格,begin,end的位置,语句间的缩进等;2.再设置tab所包含的空格数为2,为tab间的空格插入空格。
代码格式修改完成后,选择某个文件或者整个项目,右键——Format Source Files
5.b 方法覆盖 method overriding
5.1 覆盖提示符(不同颜色的三角形)可指示该方法是否覆盖了父类的方法,不同颜色有不同的含义:
- 绿色三角形表示被覆盖的方法
- 黄色三角形表示覆盖的是父类未声明为virtual的方法
- 白色三角形表示的是预定义的方法
5.2 查看被覆盖方法的实现层次
方法一:ctrl的用法:
光标移到方法名处,按住ctrl键可快速索引至子类方法处
方法二:选择对应的方法,右键——show——layers,可查看被覆盖方法的实现层次
5.3 覆盖父类的方法
要覆盖某个方法时,将光标置于代码处,鼠标右键——Source——Override Methods,选择要覆盖的方法,Dvt会自动生成代码
6. 使用/约束/查询/硬件跟踪/重构
6.1 使用跟踪 usage trace
对于一个类,模块,接口,方法,变量在哪些地方被调用,也是我们经常关心的,我们可以通过右键,Show——Usages在DVT下方窗口中显示该目标被使用的地方。
查看ubus_transfer类被调用的地方
6.2 约束显示 constraint show
在一些sequence和test中,经常会对transaction或者configuration中的随机变量约束进行修改,我们需要跟踪某些变量的所有约束,继而判断约束是否合理,并且考虑如何管理这些跨层次的约束,可对某些变量:右键——Show——Constraints。
6.3 语义查询 semantics search
“Ctrl+H”或者点击“探照灯图标”即可弹出搜索窗口,一个搜索窗口即可在整个工作区搜索任何类型,且可通过正则表达式完成模糊搜索。
6.4 硬件跟踪 connection/driver/load/ trace
在Design Hierarchy窗口中,可选择某个设计,在其某个端口上,可右键,“Trace Driver and Load”。
6.5 重构
6.5.1 重构——重命名
选中源文件中任何一个目标(类型或者变量),右键——Refactor——Rename。
如果要批量的修改某个变量名,比如ubus_transfer改为ubus_trans,可以点击鼠标右键——Refactor——Rename,再点击Preview预览,可以看到有哪些文件的transfer变量名会被修改,再点击ok即修改完成。
6.5.2 版本回退
(代码版本保存在工作区workspace,所以不要轻易删掉工作区。)
如果要回退到以前保存的版本,可以点击鼠标右键——Compare With——Local History,选择其中一个保存的版本,dvt会再打开一个代码窗口,将窗口放大后做比较,可以观察到当前版本代码和上一版本代码的区别。
在某个版本处点右键——Get Contents,再点击Yes,即可回退到该版本,原版本变为旧版本
6.5.3 重构——分离/合并方法的声明与实现
(前面在 3.b具体实例里的 3.6 实现以及更新外部方法 中有详细介绍)
我们可以通过鼠标右键——Refactor重构——Join...合并方法;也可以鼠标右键——Refactor重构——Split...分开方法。
6.5.4 重构——为模块添加新端口或者参数
选中某个模块,右键——Refactor——Add port或parameter。
选中dut_dummy模块,右键——Refactor——Add port,然后选择要添加的端口名以及方向,添加好后查看该模块在哪里被例化,右键——Show——Instances,双击被例化的地方,代码处FIXME待修改标识,修改该处即可。
7. UML图
7.1 类UML图(type window——diagram)
显示某个类的详细信息
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窗口里也可以直接查看某个类的继承关系,以及该类的变量和方法
7.2 验证结构UML图(Architecture UML Diagram)
打开UVM类型窗口,在该窗口下选择一个类比如base_test类,右键——Show Verification Hierarchy,dvt自动进入Verification Hierarchy窗口,然后选择base_test,右键——Show Diagram,base_test的验证结构图被打开,可以选择里面的组件ubus0,右键——step Into,查看ubus0的验证结构。其他的一些按钮选项也可以尝试点一下。
7.3 Sequence图(Sequence UML Diagram)
在UVM层次窗口下选择某个sequence类,右键——Show Diagram,可以查看该sequence类的结构图。
在UVM层次窗口下选择某个sequence类,右键——Show UVM Sequence Tree,可以查看该sequence类前后一共发了哪些sequence。
结合inspect窗口查看代码。
7.4 设计图
- 版图schematic/数据流图flow/模块图block(type——diagram)
- 状态机图
7.5 组件图(Verification Hierarchy View——diagram)
8. HTML文档和UML支持
8.1 生成HTML文档 export HTML document
生成HTML文档:Project——Generate HTML Documentation,我打开会直接闪退
8.2 UVM支持——UVM浏览窗口 browser
在7.2 验证结构UML图有介绍
8.3 UVM支持-UVM符合性检查 compliance check
检查写的代码是否符合uvm规范。
我打开会闪退
8.4 UVM支持-工厂查询 factory queries
查询该类的被覆盖情况,变量配置情况。
8.5 UVM支持-UVM域编辑 field editor
选择一个object类——在要做域的自动化的变量中,右键——Source——UVM Field Editor,通过窗口的形式来控制各变量的域的自动化
8.6 UVM支持-UVM sequence,右键,Show——UVM Sequence Tree
在7.3 Sequence图里有讲
8.7 UVM支持-Smart Log
上了“颜色”的,而且可供超链接到此处的仿真信息窗口
9. SV实验导入配置和运行调试
待补充
10. UVM实验导入配置和运行调试
待补充