自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 问答 (1)
  • 收藏
  • 关注

原创 SV精通7-⑤参数化的类

想修改类中的数据的类型,采用上述步骤非常冗长,容易出错。 #(type T = int)例化之后可以改变T,不修改的话默认为int。 关键词为type,可以type X=int,Y=real.... 例化了一个数据类型T为real的对象mb 答案:ABD。C的错误原因是,两个句柄不能转化,里面的数据变量类型都不一样了,不能转化。...

2022-02-19 11:36:22 1751

原创 SV精通7-④回调函数

1.概述这是一个虚类。虚类不能直接例化。加了ref修饰变量或句柄的话那么在该任务内部修改变量的话,对调用该任务的代码是随时可见的。不加ref则内部对变量的修改不会生效。 通过callback回调函数能够通过添加条件,使得满足条件后返回一定值的drop,进而控制driver的行为,看是否transmit(tr)传输tr句柄。 百分之1的概率drop=1,drop=0的概率为百分之99.使用回调函数:1.预留回调函数的入口2.定义回调的类以及类中的回调函数.

2022-02-19 11:35:40 1948

原创 SV精通7-③对象拷贝

1.赋值和拷贝p2创建了一个自己的对象,因为new了,创建了自己的对象后把从p1那复制的内容拷贝到自己的对象中。而不是句柄的拷贝。 需要注意句柄的拷贝和对象的拷贝之间的区别。 对象的拷贝要看函数的返回类型是父类还是子类,在子类中需要访问子类变量,需要做句柄的类型转换。...

2022-02-19 11:33:44 704

原创 SV精通7-②虚方法

1.概述 虚方法通过动态方法查找,能够实现,多个子类句柄指向子类对象,调用display,子类的display。 t是父类句柄,wr是子类句柄。把子类赋值给父类之后,父类t调用的方法仍是父类的方法,而不是子类的方法。实际上应该调用子类的方法,因此需要在父类的方法中将方法声明为virtual,t会执行子类的方法。2.虚函数的调用 给父类方法加上virtual,那么t也会像wr一样执行子类的方法。 加了给父类的方法加了virtual后,不用担心使用的是父类还是子类..

2022-02-19 11:32:55 1612

原创 SV精通7-①类型转换

1.概述 例如:int'(4.0),把4.0转为整型。 $cast(tgt,src),把src的类型转化为tgt的类型。式中“,”理解为“=”方便理解。 2.动态转换答案:ABC3.子类句柄赋值给父类句柄答案:A 直接将父类赋值给子类是会编译错误的需要使用显示转换的$cast(); 但是即便用了$cast做转换,也不能成功将父类句柄转化为子类句柄,$cast会返回0。 那么转化失败,bad就没有被赋值,是一个空句柄。那...

2022-02-19 11:30:52 865

原创 SV精通6-⑤覆盖选项

1.单个实例的覆盖率 option.per_instance = 1;表示covergroup的每一个实例的覆盖率都要单独计算。 如果对一个covergroup实例化了很多次,那么SV默认会把所有实例的覆盖率合并在一起。 2.注释——option.comment = .....3.覆盖次数限定 可以使用option.at_least声明bin要被采样多少次。 在covergroup里使用option.at_least,会影响所有的coverpoint里.

2022-02-19 11:29:37 1999

原创 SV精通6-④数据采样

1.概述 coverpoint可以采样变量和表达式。 bin用来存储我们采样的变量被捕捉到的次数。 推荐自己定义感兴趣的bin。 2.coverpoint和bin 覆盖率 =采样值的数目(可能数值的个数—域)/bin的个数 covergroup的覆盖率 =所有coverpoint覆盖率最终构成 整体功能覆盖率 =所有covergroup覆盖率构成 3.bin的创建和应用,使用关键词bins来创建bin。 co...

2022-02-19 11:28:34 1654 2

原创 SV精通6-①覆盖率类型-②功能覆盖策略-③覆盖组

1.概述2.覆盖率反馈回路例题答案:AB。C的错误原因是,不断重复递交回归测试覆盖率只会会增长到某一个数字,需要重新改变约束才能继续增加。2.代码覆盖率(工具自带,不用自己写)答案:C3.断言覆盖率(需要自己写)assertcoverproperty4.漏洞率曲线(缺陷曲线)5.功能覆盖率(要自己写) 代码覆盖率是衡量设计的实现情况;而衡量设计的功能是否被遗漏,需要功能覆盖率。 覆盖率为百分之一百,...

2022-02-19 11:26:54 383

原创 SV精通5-③线程间的通信

1.概述2.event事件,不需要例化,不要new。 event e1,e2;相当于创建了两个对象了,不需要new。 给e1打完了电话之后,在等待e2打过来电话。 e2打电话之后发现e1已经在等待他了,所以就先执行了e1的aftertrigger。 更正后如下: e1被触发后使用电平敏感检测,相当于多了一个检查之前谁给e1打过电话,只要在wait当前时刻或者wait之后的时刻触发了e1,event_trigger电平就会一直保持为...

2022-02-18 21:39:57 655 3

原创 SV精通5-②线程的控制

1.fork并行线程语句块 fork...join开辟了四个子线程,执行完需要50个时间单位,一共要10+50+80=140个时间单位。fork...join_any开辟了四个子线程,执行最短的线程就执行#80,一共要10+80=90个时间单位。要考虑到父线程如果先结束了,那么整个就结束了,子线程即fork里的内容就不会执行,因此选A。2.等待所有衍生线程使用waitfork();等待fork内部的所有线程执行完之后再退出。3.停止单个线程di...

2022-02-18 21:37:48 507 1

原创 SV精通5-①线程的使用

答案:ABC。initial写时钟未必会结束1.什么是线程?答案:ABCD2.线程的概念澄清

2022-02-18 21:36:18 217

原创 SV精通4-⑤随机控制

1.随机序列 产生随机序列需要使用关键词“randsequence”,且为一个结构,可以建立比较复杂的测试序列。 randsequence结构与case结构有些类似。 randsequence先从stream进入,然后设置进入cfg_read、mem_read、io_read的权重(可能性),分别是八分之一、四分之一和八分之五。 进入cfg_read,则有一半的可能性执行cfg_read_task然后结束,有一半可能执行cfg_read_task然后再回到cfg...

2022-02-18 21:35:10 455

原创 SV精通4-④数组约束

1.数组的大小 数组的元素数量在1到10之间。 不会对元素的大小进行约束。 还有size()2.约束数组中的元素例如3.产生唯一元素值的数组 randc来产生数组元素,在定义数组foreach遍历整个数组,使用randc产生的不同的值给数组。ua有64个元素,使用randc随机的val有256个不同的数,那么ua数组的元素都是唯一的。在256张牌中不放回的抽了64张牌。 可以看到上述两种方法都很复杂,因此使用关键词“unique”会方便很多..

2022-02-17 20:19:22 1739

原创 SV精通4-③随机函数

1.pre_randomize()和post_randomize()函数 在调用randomize()函数随机化之前需要进行操作(设置上下限、条件值、权重),以及随机化之后需要计算随机数据误差、分析、记录数据。 随机化之前使用pre_randomize() 随机化之后使用post_randomize() 二者看做randomize()函数的回调函数。只要调用了randomize()函数,那么首先会先执行 pre_randomize()函数,再执行randomize()。.

2022-02-17 20:14:41 1388

原创 SV精通4-②约束块控制

1.打开或关闭约束例题答案:A。约束冲突,随机失败。length的值不变,依旧是创建对象后初始化的值0。2.内嵌约束答案:C。如果没有soft,那么选B,因为冲突了,那么所有随机数都不会产生。soft为软约束,如果外部约束和软约束有冲突时,那么软约束优先级更低,以外部约束为标准。...

2022-02-17 20:12:30 1359

原创 SV精通4-①随机约束和分布

1.为什么需要随机?2.为什么需要约束?3.需要随机什么?例题答案:AC。4.声明随机变量的类 随机的变量有且只能在“class”类里声明,用rand或randc关键词表面变量的随机属性。有且只有是类的成员变量才能随机,类中的方法中的局部变量不能被rand和randc修饰。 randc表示周期随机性,即所有可能的值都赋过值后随机值才能被重复。 p.randomize()函数进行随机,利用句柄和函数,该函数会返回值0或1,返回1则随机化...

2022-02-17 20:08:40 996

原创 SV精通3-④包的使用

包的意义包的定义包的命名规则加前缀,区别不同名称包里的类 importregs_pkg :: *;表示可以索引regs_pkg内部的所有类。每个包的名字必须要不同,并且每个包内的类class,命名也应该独一无二,防止误用。 答案:ABCD。包本身也是一个域。 ...

2022-02-17 19:59:38 183

原创 SV精通3-③类的继承、句柄的使用

类的三要素:封装、继承、多态概述举例:答案:D;color和is_good外部均不能访问。color子类能访问,is_good子类不能访问。验证环境中的案例1 BadTr继承了父类的成员变量,又新定义了成员变量和方法。默认二者的方法没有关系,但是通过了super来继承了父类的calc_crc()和display(),两个方法。 不使用super.calc_crc()的话,使用this.calc_crc()在当前子类找calc.crc(),找不到就自动到父...

2022-02-17 19:58:24 1240

原创 SV精通3-②类的成员

概述 类是成员变量和成员方法的载体。 一个类的功能应该尽可能的简单,不应该承担不符合它的职责。这在设计模式中为单一职责原则。(SPR:SingleResponsibilityPrinciple) 类作为载体,将其属性和方法封装在内部,不会直接将成员变量暴露在外部。通过protected和local关键词来设置成员变量和方法的外部权限。封装属性在设计模式中为开放封闭原则(OCP:OpenClosedPrinciple) *使用了local和protected修饰的成...

2022-02-17 19:55:18 590

原创 SV精通3-①类和对象

面向对象编程三要素:封装、继承、多态。 类实际上为数据类型,对象为一个具体的实例。例如,int为语言提供的一种数据类型。 类的定义其实是属性(即成员变量)、行为等的声明,将这一类的属性提取出来。类是属性和方法的自洽体,能够保存和处理数据;而struct结构体则是单纯的数据集合,不能对数据做出符合需求的处理。 成员方法(即方法)则为对数据的处理方法,例如在类中的属性(即成员变量)和行为,定义一个人类的类,人不仅有属性(年龄、名字等),还有一些行为(跑步、说话等),这些...

2022-02-17 19:53:30 922 2

原创 SV精通2-④调试方法

restart重新开始仿真;run xns仿真开始使用$sformatf()实现对字符串的拼接。例题答案为D只有执行到return result时,数值才会有结果。静态第一次执行到第八行,该第八行为断点入口,运算没有完成,到了第九行时,运算才结束,为1;静态第二次执行到第八行,由于为静态变量,result结果不会清空,因此结果仍是1,执行到第九行returnresult才会为2;动态第一次执行时,第十四行为断点入口,同静态一样,执行到第十五行运算才结束...

2022-02-17 19:50:06 255

原创 SV精通2-③测试的开始和结束

例子 答案:AB其中组合逻辑always@(a1),a1变化引起a5<=a1,由于例子中a1没有变化,因此a5没有被赋值,但是综合后该组合逻辑与assign为线网,电路行为是一样的,只不过是仿真行为a1没有变化,导致a5没有赋值。 克服该弊端,把always改为always_comb逻辑,且@后不用列变量,在零时刻时也会评估一次,和assign一样。 其他结束仿真的方式 不需要调用$finish()。使用$exit()。答案:AC,prog...

2022-02-17 19:48:41 216

原创 SV精通2- ②采样和数据驱动

例题问,上述代码,当显示a=1时,b应该显示多少? 最终综合后,a会被综合为四个1位的寄存器,代码中运用了阻塞赋值,每一拍打印的值a和b都是相等的,意味着b不会和a有一拍的delay。b如果想要实现为寄存器,和a有一拍的delay,那么应该使用非阻塞赋值。答案:b=1 时钟块可以在interface和module中添加 第二行代码为模拟建立和保持时间,input是在clock1上升沿来的前10ns开始进行输入采样,在上升沿的后2ns对输出进行驱动 下一行则...

2022-02-17 19:47:18 1075

原创 SV精通2-①接口

例子如下为连接DUT接口与DUT进行连接。modport在接口中进行定义,例如接口声明信号,modport声明方向 使用interface时,tb和arbiter相互独立 interfacearb_if(input bit clk)—定义了一个叫arb_if的接口 在arbiter的module里,也能使用interface中的信号,可以把interface作为module里的一个端口来声明,且不需要定义输入或输出方向。由此可以索引到int...

2022-02-17 17:01:57 564

原创 MCDF-实验3

不能放在这,因为会提早结束,join_any,发送完一次数据就会结束仿真,后面数据没办法继续跑。数据产生完就结束仿真。 1.先打印随机化后的req对象2.generator把req的数据通过信箱发给initiator里3.initiator拿到req后进行写数据传输并打印要写的数据,再把rsp.rsp置位1。4.并行执行三个agent的run,每个run里包含了generator和initiator的run,因此是并行同时随机化先产生并打印了三个cha...

2022-02-17 17:00:30 2155 5

原创 MCDF-实验2

结构建立:注意一定要有接口,否则无法发送激励和监测激励验证环境建立的三个步骤1.结构2.接口传递、组件连接3.运行 在类里面,声明接口的指针一定要用virtual关键词没有延迟上升沿后1ns驱动 fork join相关知识。首先forkjoin内部语句时并行执行。 1.forkjoin:当forkjoin内部全部执行完之后,才会继续往下顺序执行;2.forkjoin_none:forkjoin_none...

2022-02-17 16:57:38 1269

原创 MCDF-实验1

实验1:多路数据分配器MCDTfifo是往里写数据,往外读数据 TB1. 从 Verilog 到 SV 的进场 要求1.1要求1.2要求1.3-rstn四值逻辑改成二值逻辑答:不正常,因为任务没有被调用,没有产生时钟和复位信号。答:恢复正常。答:不能放在一个initial块中,如果clk的task在前,rstn复位信号将不会产生。clk的task中为forever循环永远不停止,跑不到下一个任务。如果rstn的task在前,c..

2022-02-17 16:56:06 1956 2

原创 SV精通1-④过程块和方法

一、硬件过程块 1. always 是为了描述硬件的行为,在使用中要注意哪种使用方式是时序电路描述,哪种是组合电路描述。 只可以在module或者interface中使用。 练习1:答案:ABC 2.initial 非常符合软件的执行方式,即执行一次。 无法被延迟执行,仿真一开始都是会同时执行的,不应该将它们在代码中的顺序与它们的执行顺序画等号。 不应该存在于硬件设计代码中,不可综合。 为测试而生。 in...

2022-02-17 16:43:59 769

原创 SV精通1-③定宽数组

数组的声明 其中,int c_style[16]的声明方法与C语音一样,定义数组容量 多维数组声明和使用 初始化和赋值——单引号和大括号 default:-1含义为剩余元素全为-1。 存储空间的考量 合并型数组packed声明:bit [3][7:0] pack;——维度都在变量名左边,连续存储。非合并数组unpacked声明:bit[7:0] unpack[3];——在变量名左边的数字为低维,右边的为高维。低维度为连续存储,高维度为非连续存储。...

2022-02-17 16:36:40 804

原创 SV精通1-②动态数组、队列、关联数组、结构体、枚举、字符串

一、动态数组 最大特点:在仿真运行时灵活调节数组的大小,即存储量。 动态数组声明时,需要使用‘[]’来声明,此时数组是空的,即容量为0。其后,需要使用‘new[]’来分配空间。 例子:重新dyn=new[20],原本的物理空间被释放,没有了。dyn=new[20](dyn);将0、1、2、3、4五个数复制到20个数值的最低五个元素,剩下的十五个元素为int的默认值,是0。补充:integer的默认值为x。二、队列 具备链表和数组的优点,可以在任何地方添加或删除元素,

2022-02-17 15:47:16 9490

原创 SV精通1-①数据类型-logic和双状态数据

①数据类型-logic和双状态数据 1.相比于Verilog的寄存器(register)类型reg和线网(net)类型wire,在SV中引入了logic类型。 logic方便验证人员驱动和连接硬件模块,省去考虑使用reg还是wire的精力。 logic为四值逻辑:0、1、X、Z; 与logic对应的是bit类型,为二值逻辑:0、1; 四值逻辑类型:integer、logic、reg、net-type(eg.wire、tri); 二值逻辑类型:byt...

2022-02-17 13:44:54 4140

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除