DVT学习与使用

补充

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实验导入配置和运行调试

待补充

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值