![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IC验证
文章平均质量分 51
weixin_45704530
这个作者很懒,什么都没留下…
展开
-
UVM信息服务机制
信息打印机制,比$display具有更好的优势。原创 2022-07-07 10:17:05 · 97 阅读 · 0 评论 -
UVM事务级建模
1、用户定义的transaction类,必须要扩展于uvm_sequence_item2、需要为transaction的成员指定rand属性,这样可以产生随机激励。note:rand属性不是必须的原创 2022-07-06 20:45:04 · 100 阅读 · 0 评论 -
UVM之sequence机制
定义:控制和产生一系列的事务,并将事务发送给driver的一套机制。(一系列动作的集合)例子:driver向sequencer发送事务请求,sequencer再向其关联的sequence发送请求,sequence接收到请求之后,立即将已经生成好的事务发送出去。发送出去的事务通过sequencer之后再转发给请求事务的对象。请求该事务的对象处理完事务之后,发送处理完事务的响应,再以sequencer为中介,转发到sequence。接着sequence将产生下一个事务,等待下一次事务请求。优点:将事务的原创 2022-07-06 15:31:30 · 482 阅读 · 0 评论 -
uvm-phase机制
uvm中的phase有耗时和不耗时两种类型。下图中灰色部分为耗时的类型,task;白色部分为不耗时的类型,function。不耗时的 build_phase,这个 phase 主要用来实例化各个组件环境,理论上为了 uvm_tree 的顺利构建应该从上往下执行。如下图,不耗时的phase从树顶到数叶自上而下执行,构建整个验证环境。不同层次所有组件的 build_phase() 从空间(uvm-tree)上从上而下执行从树根到树叶的全部组件类 build_phase(),而同层次的组件类则是按照 ne原创 2022-07-06 11:24:28 · 551 阅读 · 0 评论 -
UVM——field automation机制
filed automation机制UVM field automation机制是为了方便用户对事物进行打印、复制、打包、解压、比较、记录等一些列功能而建立的一套服务机制,即使用UVM内建的函数对事务进行处理。要使用UVM field automation机制,在事务中对数据使用`uvm_field_*进行注册,例如class my_transaction extends uvm_sequence_item; rand bit [3:0] sa; rand bit [3:0] da;原创 2022-02-16 12:40:12 · 697 阅读 · 0 评论 -
UVM——sequence library
sequence library本质是一个sequence,包含了一组在其内部注册了的sequence类型,可通过对其进行配置,创建并执行一系列的sequence、sequence_item。向sequence library永久注册sequence首先创建sequence library类class my_sequence_lib extends uvm_sequence_library #(my_transaction); `uvm_object_utils(my_sequence_l原创 2022-02-15 22:03:56 · 985 阅读 · 0 评论 -
UVM——Callback
步骤1、将UVM Callback方法内嵌入组件中。2、创建一个最基本的UVM Callback类以供扩展。3、从上一步所创建的类中扩展出所需的Callback类。4、在顶层实例化并注册Callback对象。代码示例步骤1,首先,在driver中关联实现Callback方法的类(最基本的UVM Callback类)。class my_driver extends uvm_driver #(my_transaction); `uvm_component_utils(my_driver)原创 2022-02-15 13:26:23 · 466 阅读 · 0 评论 -
UVM——普通TLM端口的用法
put模式producer调用consumer中重载的put方法,把数据发送到consumer。代码示例如下。此处的代码示例为monitor向reference model发送数据。monitorclass my_monitor extends uvm_monitor; `uvm_component_utils(my_monitor); virtual dut_interface m_vif; uvm_blocking_put_port #(my_transaction原创 2022-02-14 23:04:07 · 278 阅读 · 0 评论 -
UVM——configuration机制
这里使用三个示例具体介绍uvm_config_db的用法配置sequence产生transaction的数量1、添加控制变量item_num2、使用get()获取控制变量item_num的配置获取:class my_sequence extends uvm_sequence #(my_transaction_da3); `uvm_object_utils(my_sequence) int item_num = 10; function new(string name原创 2022-02-14 20:04:13 · 454 阅读 · 0 评论 -
UVM factory机制
factory机制的运作步骤1、将用户自定义的类向factory的注册表中进行注册。2、要使用“class_name::type_id::create()"来代替new实例化对象。3、根据具体要求向替换表添加替换条目。4、在运行仿真时,UVM会根据这两张表自动实现factory机制。factory机制的使用1、使用`uvm_object_utils()对uvm_object类进行注册。2、使用`uvm_component_utils()对uvm_component类进行注册。3、使用“cla原创 2022-02-14 15:43:34 · 417 阅读 · 0 评论 -
UVM学习——UVM phase的objection属性
UVM Objection作用1、控制taskphase的运行和终止2、同步各个component同名的task phase代码示例示例一在上一篇博客的基础上对driver的代码进行修改,之后运行仿真。class my_driver extends uvm_driver #(my_transaction); `uvm_component_utils(my_driver) function new(string name = "my_driver", uvm_componen原创 2022-02-14 11:15:51 · 301 阅读 · 0 评论 -
UVM学习——构建一个简单的UVM验证平台
构建一个简单的UVM验证平台本次构建的验证平台不包含DUT。创建transaction和sequencetransaction代码如下:class my_transaction extends uvm_sequence_item; rand bit [4:0] sa; rand bit [3:0] da; rand reg [7:0] payload[$]; //定义数据成员 `uvm_object_utils_begin(my_transaction)原创 2022-02-13 22:25:45 · 1822 阅读 · 0 评论 -
GVIM编辑技巧
:sv/sp,切屏,方便两个文件的对比。:q退出:E显示当前目录下文件,可移动光标选择需要打开的文件Ctrl+q,往下移动光标,选中一列,输入大写的i,输入字符,之后按esc,可在该列前插入一列字符。选中包含多列内容的块之后可以用Ctrl+q得到多列的内容,之后可进行复制等操作。:%s/input/reg /gc把input替换成reg,gc表示在替换的时候要确认23,46s/ input/reg /gc 限定替换的行范围dd删除光标所在行,dnd删除n行p粘贴yy复制光标所在行,dnd复原创 2022-01-25 23:08:55 · 1627 阅读 · 0 评论 -
Synopsys system veriolog Lab学习(5)
Lab5前面四个实验理解起来相对容易一些,Lab5相对难一些。该实验把测试平台的每个组件都封装为一个类,要考虑每个组件之间的通信,还要控制互斥资源的访问(本实验中为不同驱动器驱动数据通过router时,多个数据包对同一输出端口的竞争)。本实验需要封装的类如下图所示,类之间的通信通过信箱实现。测试平台框架如下图所示,在测试平台中,各个组件是同时开始工作的。该框架和Lab4的区别之一是具有多个驱动器和接收器,同时驱动数据和接收数据。Generator在该类中,通过start()任务产生数据包。原创 2022-01-23 11:05:17 · 511 阅读 · 0 评论 -
Synopsys system veriolog Lab学习(4)
Lab4该实验在Lab3的基础上,把数据包封装起来,即把数据封装到一个类中。class Packet; //Lab 4 - Task 2, Step 4 // //In the body of the class create the following properties //rand bit[3:0] sa, da; //rand logic[7:0] payload[$]; // string name; //ToDo rand bit[3:0] sa,原创 2022-01-22 23:18:30 · 1647 阅读 · 0 评论 -
Synopsys system veriolog Lab学习(3)
Lab3该实验在Lab2的基础上增加了Monitor和checker,检测接口输出的数据包和验证和发送的数据一致。测试平台框图如下:捕获接口输出数据的任务定义如下: //Lab 3 - Task 3, Step 3 // //Declare the get_payload() task //ToDo task get_payload(); //Lab 3 - Task 3, Step 4 // //In get_payload() delete cont原创 2022-01-22 22:52:01 · 251 阅读 · 0 评论 -
Synopsys system veriolog Lab学习(2)
Lab2该实验在Lab1的基础上在test中增加发数据包的任务。改动主要在Test部分代码。具体如下:program automatic test(router_io.TB rtr_io); //Lab 2 - Task 2, Step 2 // //Declare the program global variables sa, da and payload //ToDo bit[3:0] sa; bit[3:0] da; logic[7:0] payload[$];原创 2022-01-21 12:22:22 · 343 阅读 · 0 评论 -
Synopsys system veriolog Lab学习(1)
这里写自定义目录标题Lab1测试平台总体框图DUTInterfaceTestTB_TOPLab1该实验创建一个测试平台对DUT进行复位的测试测试平台总体框图DUTDUT为一个16输入,16输出的路由器,这个路由器的功能是把数据通过各个输入端(Input)发送到任意输出端(Output)。代码如下:module router( reset_n, clock, frame_n, valid_n, din, dout, busy_n, valido_n, frameo_n);input原创 2022-01-20 17:00:44 · 422 阅读 · 0 评论