| |||
“碰见彩虹,吃定彩虹”,小编每次在超市看见彩虹糖的时候,脑袋中就会想起那个扎着小辫子的大叔,一边从吃着长颈鹿掉出来的彩虹糖,一边豪放不羁的哈哈大笑。不知道这样的长颈鹿在哪儿能见到,小编也想去接一桶彩虹糖。
还记得彩虹糖的广告吗~
后来长颈鹿没找到,在学UVM的时候倒是偶然发现了一个生产彩虹糖的UVM验证平台。于是本着幼儿园老师教给我们的有糖要给大家分享的深刻教诲,给各位朋友分享一下这个神奇的UVM验证平台。希望大家遇见UVM,搞定UVM。
· 正 · 文 · 来 · 啦 ·
一、验证平台的整体结构
本系列教程主要基于一个假想的彩虹糖验证平台来带领大家了解UVM的基本概念以及运行机制。彩虹糖验证平台会以受控的随机方式产生很多不同颜色和口味的彩虹糖,除了生产彩虹糖该平台还将自行评估彩虹糖的可口程度。本教程并不涉及AXI,OCP等其他系统总线,所以并不需要了解任何总线相关的知识。本小节将首先介绍彩虹糖验证平台的整体框架以及生产和评估的各个验证组件。
图0.0 彩虹糖验证平台整体框架
上图就是彩虹糖验证平台的整体结构,从图中可以看出各个验证组件的相互关系。其中彩虹糖评测员者(jelly_bean_taster)就是我们的待测设计(DUT)。我们TB产生的彩虹糖就是送给DUT的激励。整个验证平台的大致运行流程是,jelly_bean_sequencer会将生成彩虹糖的配方交(transaction)给jelly_bean_driver。根据提供的彩虹糖配方,jelly_bean_driver生产出相应的彩虹糖并通过接口jelly_bean_if送给jelly_bean_taster,最终由评测员jelly_bean_taster来检查彩虹糖的可口程度。
在彩虹糖被生产出来的同时,彩虹糖检测器jelly_bean_monitor会捕获其口味和颜色也就是配方的主要内容。这些信息将会被送给彩虹糖的功能覆盖率收集组件jelly_bean_fc_subscriber。功能覆盖率收集组件将会记录所有生产出来的彩虹糖的颜色和口味。彩虹糖客服中心jelly_bean_scoreboard主要负责检查jelly_bean_taster的评估结果是否合理。jelly_bean_scoreboard的信息收集系统jelly_bean_sb_subscriber会从jelly_bean_monitor获取彩虹糖的颜色和口味等信息。
下图主要是彩虹糖验证平台的各个组件类之间的关系。浅色的代表的是UVM库中预提供的一些类,深色的代表在本教程中自行创建的类。
图0.1 验证平台的类图
上面提到,彩虹糖的配方是由jelly_bean_sequencer送给jelly_bean_driver,其传送配方的形式是以transaction的方式传递的,在验证平台中称为jelly_bean_transaction。transaction会定义彩虹糖的颜色,口味以及一些其他的性质。同时jelly_bean_transaction也是jelly_bean_monitor输送给其他信息收集组件的内容。
jelly_bean_sequencer不仅仅只提供一种类型彩虹糖的配方,也能够提供很多相似口味的彩虹糖配方,即可以提供一系列的transaction组成的sequence,与此同时多种不同口味的彩虹糖配方还可以以礼品盒的配方的形式提供,即一系列的sequence可以构成sequence集合。
二、Transaction和Sequence
transaction和sequence的类图如下图所示,同样浅色的代表UVM预置的类,深色的代表我们自己创建的类。
图0.2 transaction和sequence的类图
1. 彩虹糖配方
jelly_bean_transaction
jelly_bean_transaction定义了彩虹糖配方中的内容,包含了口味,颜色和一些其他特性。同时transaction里面还定义了一个变量taste用来保存彩虹糖评测员jelly_bean_taster也就是平台中的DUT对彩虹糖的反馈。彩虹糖的口味颜色之间满足一定的关系,如下图第12行的约束块(constraintblock)所示比如说,如果要生产苹果味的彩虹糖,其颜色只能是红色或者绿色而不能是蓝色。
2. 无糖彩虹糖的配方内容
sugar_free_jelly_bean_transaction
彩虹糖基本配方jelly_bean_transaction可以被扩展成许多不同的子类。比如可以将jelly_bean_transaction扩展成一个新的子类sugar_free_jelly_bean_transaction通过在其中定义新的约束如第4行所示,来产生一种新的无糖彩虹糖。
3. Sequence
3.1 单颗彩虹糖:
[class]one_jelly_bean_sequence extends uvm_sequence#(jelly_bean_transaction)
sequence生成制作彩虹糖的配方,基本的单颗彩虹糖的配方很简单。下图第10行生成了单颗彩虹糖的配方,然后在第12行随机化了这个配方,使得颜色和口味可以随机变化。
3.2多个相同口味的彩虹糖(sequenceof transactions):
[class]same_flavored_jelly_beans_sequence
有了单个彩虹糖的配方jelly_bean_transaction我们就可以生产多个相同口味的彩虹糖。一次生产彩虹糖的数量由类same_flavored_jelly_beans_sequence的成员变量num_jelly_beans来确定。下图第4行约束了彩虹糖的数量num_jelly_beans只能在2到4之间。第14行生成了单个彩虹糖配方,然后在第15行随机化了配方中的颜色和口味。当单个彩虹糖的配方确定下来之后,我们会以此作为参考,在第18行制作出num_jelly_beans颗彩虹糖。在第21行我们会通过断言来保证所有生产出来的彩虹糖的口味都是一样的。
3.3礼品盒装的彩虹糖(sequence of sequences):
[class]gift_boxed_jelly_beans_sequence
下图所示的代码描述了如何生产出多种不同口味的彩虹糖。彩虹糖的口味的个数由第二行的num_jelly_bean_flavors来指定。在第四行我们约束了一个礼品盒内大约只会有2,3种口味。这个sequence的主要部分是第12行的repeat部分,在这个repeat块中same_falvored_jelly_beans_sequences被重复创建了num_jelly_bean_flavors次,每一次创建都会随机这一次的颜色和口味。
三、总结
这一期我们主要描述了整个验证平台的结构和框架,大家需要了解的是:
彩虹糖从配方到生产到检测这一整体的流程,以及各个组件的作用。
transaction可以从uvm_sequence_item中衍生出来,并且基本的transaction可以被扩展成包含更多内容的复杂transaction。
transaction是构成sequence的基本内容,一个sequence可以包含很多相似但并不完全一样的transaction。
多个sequence也可以组成一个更复杂或者说更高层的sequence,来营造更复杂的测试场景。
P.S. 原文叫UVMTutorial for Candy Lovers,感谢原作者设计出这么一个有趣的入门教程。记得一个总是随身带着糖的CandyLover说的一句话,生活中可能会遇到很多不开心的事,但是吃颗糖或多或少也会觉得生活还是有点甜。UVM或许很难,但是希望我们的彩虹糖系列也可以让大家轻松入门~
同时,CSDN也已经有PIPyRbCb博主推出了该系列的完整内容,欢迎大家前去学习,我们也将陆续推出彩虹糖的完整系列,记得订阅哦!
https://blog.csdn.net/zhajio/column/info/20484
2019年路科验证实战就业VIP春季班
早鸟报名通道开启
扫码即可报名
前30名报名的同学给予早鸟价格
优惠500元!
往期精彩:
实锤!30W+!!!2018芯片校招薪资比肩互联网!理解UVM-1.2到IEEE1800.2标准的变化,掌握这3点就够了Verification和Validation傻傻分不清楚?面经重点!没想到,双十一只花10块钱,我竟然爱上了加班人工智能和机器学习让验证更快更智能