自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不定期分享IC验证学习笔记

材料硕士转行IC验证,记录下自己的学习历程!

  • 博客(35)
  • 收藏
  • 关注

原创 SV学习笔记—类型转换

program test; initial begin $display("int'(42+1.1) is",int'(42+1.1));//将43.1强制转换为整型 $display("(42+1.1) is",(42+1.1));//SV默认为浮点型 $display("real'(42+1.1) is",real'(42+1.1)); endendp

2022-08-02 11:20:40 1480

原创 AMBA协议—AHB协议

AHB是在APB之上的新一级的总线,AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NANDFLASH、DMA、Bridge的连接。AHB总线的强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等等连接起来构成一个独立的完整的SOC系统,不仅如此,还可以通过AHB-APB桥来连接APB总线系统。AHB可以成为一个完整独立的SOC芯片的骨架,下图是典型的AHB总线架构。...

2022-07-29 12:08:49 2138 1

原创 UVM学习笔记—前门访问/后门访问

目录0.前言1.前门访问2.后门访问2.1路径设置2.2操作类型0.前言在UVM学习笔记—寄存器模型的搭建及使用中提到过前门访问和后门访问的概念,这篇文章将会详细的阐述一下这2种访问方式1.前门访问前门访问操作就是通过寄存器配置总线(如APB总线)来对DUT进行操作,因此其在波形上可见。无论在任何总线协议中,前门访问操作只有两种:读操作和写操作;前门访问实际上是一个贴合实际的访问方式,因为对于流片回来的芯片,其访问方式只能通过物理总线访问。...

2022-05-16 21:35:48 5673 1

原创 UVM学习笔记—寄存器模型的搭建及使用

0.前言该章节的验证环境是建立在白皮书附录B-2的代码下的1.DUT中的寄存器是什么?如果将一个DUT比作一个体重秤的话,那么一个体重秤的一个功能是可以将重量以单位为 斤/公斤的形式输出,而以斤还是公斤是用户可设置的,设置好后,重量结果就以对应的设置输出。DUT的寄存器同理,通过配置不同的寄存器可以让DUT实现不同的功能,亦或者是DUT的一些状态可以通过访问对应的寄存器而得知;这些寄存器在DUT中都有相对应的地址和读写权限,通过地址可以实现对应...

2022-05-14 20:26:41 3724

原创 SV学习笔记—覆盖组及覆盖率数据采样方法

目录0.前言1.coverage 2种采样方法1.1 sample1.1.1在program中采样1.1.2在class中采样1.2 @event2.Coverage数据采样方法2.1功能覆盖率的计算方法2.2信号的常规采样2.3枚举类型的采样2.4条件覆盖率2.5翻转覆盖率2.6wildcard覆盖率2.7忽略数值2.8不合法的仓3.交叉覆盖率3.1忽略交叉仓0.前言覆盖组(covergroup)与类相似,一次定义后可多.

2022-05-05 17:12:34 5805 2

原创 SV学习笔记—随机化约束的概率

1.没有约束的类x可能是0/1,y可能是0/1/2/3,是rand随机,每个数的概率相等:运行800次,从结果看每个数出现的概率确实是1/82.关系操作运行800次,从结果看,各个出现的值是1/5,这里绿皮书上应该是错了:3.关系操作和双向约束运行900次,从结果看,各个出现的值是1/3:4.solve before约束引导概率分布solve x before y可以理解为先对x求解,x只能取0/1两个数,各为1/2,然后在这个基础上.

2022-04-23 19:43:58 1258

原创 linux基本操作

本文只记录个人不熟练的又常用的操作,并非全的操作指令!Linux下:linux下查找命令:grep 搜索内容 * ——在某一目录下搜索该字符,若该目录下还有其它文件则不会搜索grep 搜索内容 * -sr ——在某一目录下搜索该字符,若该目录下还有其它文件则会进入文件搜索linux下补全操作:输入命令+某文件开头几个字母+tab键 ——自动补全文件名在vim下:文件操作::vsp 当前文件夹下的文件名 ...

2022-03-11 21:05:23 1611

原创 SV学习笔记—覆盖率类型

0.前言覆盖率是用来衡量设计验证完备性,随着测试逐步覆盖各种合理的组合,覆盖率用来衡量测试进行的程度,覆盖率工具会在仿真过程中收集信息,然后进行后续处理并且得到覆盖率报告,通过报告找出覆盖盲区,然后修改现有test或者创建新的test来填补这些盲区,这个过程可以一直迭代进行,直到覆盖率达到100%。一个覆盖率反馈环路如下:可见通过随机和定向测试得到功能覆盖率,将RTL代码漏洞修复后再跑,如此往复最后得到100%的覆盖率。1.覆盖率类型1.1代码覆盖率代码覆盖率是放在工具在仿真

2022-02-22 19:36:55 2544

原创 AMBA协议—APB协议2.0/3.0

1.APB 2信号列表这里需要区分Master和Slave的区别,Master是总机,Slave是从机,一个总机下可以有n个从机,所有的数据传输都是master来控制的,slave来回应。这里注意PSELx信号,有n个slave,则该信号就有n个位宽,选中某一slave时就将对应得某一bit信号拉高;如有10个slave,则PSELx位宽为10,选中第5个slave时,就将第5个bit拉高。2.状态图通过PSELx和PENABLE信号的变化,使apb总线处于下面3个状态:IDLE

2022-02-22 12:42:44 5164

原创 SV学习笔记—变量及数组随机化约束常犯的错误

1.有符号变量导致的随机化错误class SignedVars; rand byte pkt1_len,pk2_len; constraint total_len{ pkt1_len+pkt2_len==64; }endclass在上述随机中,我们的初始目的可能是想让这2个数相加为64(如{32,32},{2,62}),且这两个数都为正数;但在声明这2个数的时候,byte是一个

2022-02-21 21:10:21 1511

原创 SV学习笔记—多态与类型转换

0.前言当同一操作作用于不同对象,能有不同的解释从而产生不同的结果,这就叫做多态,多态在验证中被大量使用多态的实现基础是什么?1.多态的实现基础是继承,没有继承就没有多态2.多态通过子类覆盖父类中的虚函数(虚方法)来实现多态和继承的区别?多态是父类使用子类的方法;而继承是子类使用父类的方法虚方法和多态的关系?虚方法是多态实现的基础关于多态在SV之OOP基础知识这篇文章中有更加通俗的解释,可参见这篇文章。既然虚方法是多态实现的基础,那先来了解一下什么是虚方法。1.虚方法

2022-02-15 21:22:05 4563 2

原创 SV学习笔记—类的封装和继承

1.类的封装 面向对象(OOP)编程的核心思想就是封装,封装就是指将对象的属性和方法封装起来,类就是这个封装的载体。通过封装可以将程序实现细节隐藏起来,并通过public/protected/local决定类的属性是否可以被用户使用。1.1 类与结构体的异同(封装)相同点:二者都可以类比为容器,都可以定义数据成员不同点:1.class除了可以声明数据变量成员(属性),还可以声明方法(function/task);而struct只能声明数据变量,不能声明方法2:class变量声...

2022-02-10 21:58:21 2308 1

原创 SV学习笔记—浅复制和深复制的区别详解

目录1.句柄的复制2.对象的复制2.1浅复制shallow copy2.2深复制deep copy3.this的用法在类中,复制一半会涉及到句柄的复制,浅复制和深复制3种操作,下面来看看这3种操作的区别。1.句柄的复制Trans t1,t2;t1=new;//t1->obj1t2=new;//t2->obj2t1=t2;//把t2赋值给t1,意味着t1->t2,这时obj1这个实体不存在了,内存被释放//此时,t1,t2指针都指向了obj2

2022-02-10 17:33:42 2289 2

原创 SV学习笔记—类

目录1.类(class)1.1验证中为什么需要面向对象(OOP)?1.1.1 OOP的三大特性1.2术语2.类的成员操作2.1类的成员2.2定制构造函数1.类(class)类是成员变量和成员方法的载体,一个类的功能应该尽可能简单,不应当承担过多的职责,更不应该承担不符合它的职责,这在设计模式中称之为单一职责原则(SRP Single Responsibility Principle)1.1验证中为什么需要面向对象(OOP)?在Testbench包含但不限于以下

2022-02-09 21:11:23 2448

原创 SV学习笔记—子程序

1.子程序参数SV对子程序的改进使参数的声明变得更方便,同时也扩展了参数传递的方式Verilog-1995的子程序参数设置:task mytask2;//无( ) output[31:0] x; reg [31:0] x; input y; ...endtaskSV中,可以用简明的C语言风格:task mytask2 (output logic [31:0] x,input logic y);//可同时声明方向和类型 ...endtask

2022-02-08 18:57:11 1677

原创 SV学习笔记—function函数和task任务

目录1.function/task1.1 function函数1.2 task任务及和function的不同点1.function/taskfunction和task基本用法一致,但是有几个不同点,在后面阐述。1.1 function函数SV中的function函数和C语言中的用法非常相似;其可以在参数列表中指定输入参数input、输出参数output、输入输出参数inout或者引用参数ref(类似于C语言中的指针)(可输入/出)可以返回数值或者不返回数值(void),如

2022-02-08 11:25:11 11508 3

原创 SV学习笔记—wait和@的区别

总体上:wait()和@()都是等待()中的内容的触发1.wait()中的内容为电平触发,即只要()中的内容为1就触发;而@()中的内容是0/1跳变才触发program automatic test_event(); logic clk,a,b,c; initial begin clk=1'b1;//固定到高电平 end initial begin wait(clk) $display("i have reached clk");/

2022-02-07 20:52:33 10537

原创 SV学习笔记—区分always和initial

首先要清楚哪些语句应该被放置于硬件世界,哪些程序应该被放置于软件世界?硬件世界:module/endmodule,interface/endinterface软件世界:program/endprogram,class/endclass1.always块儿:always是为了描述硬件的行为,只可以在module或者interface中使用,在使用时需要注意:哪种使用方式是时序电路描述,哪种使用方式是组合电路描述,其反复执行 always中的@(event..)敏感列表是为了模拟硬件信号的触发

2022-02-06 21:27:02 4693 3

原创 SV学习笔记—结构体及枚举类型及字符串

目录1.结构体1.1 压缩结构体1.2 非压缩结构体1.3联合结构体2.枚举类型3.字符串1.结构体 Verilog的最大缺陷之一是没有数据结构,SV中可以使用struct语句创建结构,跟C 语言类似。 不过struct的功能少,它只是一个数据的集合,其通常的使用的方式是将若干相关的变量组合到一个struct结构定义中,如bit,int,string,logic都可以放入一个struct当中。然后用typedef可以用来创建新的类型,并利用新类型来声明更多变量...

2022-02-06 11:53:18 4531

原创 SV学习笔记—数组的方法

目录1.遍历1.1for和foreach循环2.复制3.比较4.运算4.1 sum4.2 product4.3 and,or,xor4.4 max,min,unique5.排序5.1 reverse翻转5.2 shuffle乱序5.3 sort升序5.4 rsort降序6.定位6.1 find6.2 find_index6.3 find_first/last_index6.4 find_last/first1.遍历1.1

2022-02-05 20:59:04 5904

原创 SV学习笔记—队列及方法

SV引入一个新的数据类型-队列,它结合了链表和数组的优点,可以在队列中的任何地方添加或者删除元素;但队列不是数组,它的元素个数不一样,也不需要new,并且很方便添加或删除元素。队列的声明使用[$],元素的编号从0到$:program example1; int j=1, q2[$]={3,4}, q[$]={0,2,5};//声明队列,并初始化一些元素 initial begin q.insert(1, j);//在q队列的第二个元素(排列位置从0开始数)之前插入

2022-02-04 10:29:36 19538 1

原创 SV学习笔记—数组

0.前言SV中的数组分类可见下图:1.定宽数组定宽数组也叫固定数组,即在声明数组的时候就定义好该数组可以容纳多少个元素。1.1 packed数组packed数组相当于一个只有一个元素的数组。有时需要把数据当作一个整体来访问,同时又可以把它分解成更小的单元,此时就要引入packed数组。如一个32bit的寄存器,有时看成4个8bit的数据,有时看成一个无符号数据:bit [3:0][7:0] bytes;//将4个8bits的数据组装成32bit的数据bytes=32'ha

2022-02-03 22:02:33 8601 4

原创 SV学习笔记—数据类型

目录1.SV和Verilog数据类型的区别2.SV内建数据类型2.1SV为何要引入2值逻辑?2.2根据2/4值逻辑,SV可将数据类型分为如下2.32/4值数据的相互转化2.4位宽不一致会导致什么问题?1.SV和Verilog数据类型的区别Verilog中,数据类型分为两类:variable和net,对于这两类,它们都是4值逻辑,即可能的状态有:0,1,x,zSV中,数据类型有2个属性:type和data typetype:表明该数据是variable型还是net型.

2022-02-02 21:13:37 2778

原创 SV学习笔记—包package的使用

1.为什么需要包? 当我们想对2个IP同时进行验证时,我们可能会发现他们的验证环境中的各个模块儿是相似的,只是里面的内容数据不同。这时为了提高工作效率,我们可能需要对他们同时跑仿真,这就需要引入package,使得同一模块儿被填入不同的内容从而进行不同IP的仿真。 或者是在一个验证环境中,我们在顶层调用验证环境时,需要将所有的类组件include进来,为了代码的简洁明了,我们可以将所需要包含的文件写入package中,而只在top中import这个包即可。关于包...

2022-01-31 18:25:02 3612

原创 SV学习笔记—线程之间的通信(事件event、信箱mailbox、旗语semaphore)

0.前言若多个线程之间想要进行数据交换或者知道彼此的状态以决定执行什么线程,SV中通过event、mailbox、semaphore来进行线程通信。其中event是2个线程之间的通信,semaphore是≥2个线程之间的通信。1.事件event当我们需要一个进程在另一个进程触发事件的时候运行该怎么办?SV中引入了event来解决这个问题。其语法如下:触发:-> (非阻塞)(类比于接电话)等待:@ or wait(阻塞)(类比于打电话)注意:若用->和@搭配,一定要先@再-

2022-01-28 18:28:13 12672 2

原创 System Verilog学习笔记—fork...join_xxx的三种用法及wait fork和disable fork

目录0.前言1.fork...join2.fork...join_any3.fork...join_none4.其它线程执行语句4.1wait fork4.2 disable fork0.前言可以用以下图来表示三者的区别:1.fork...joinfork...join使内部所有线程同时开始运行,直到内部所有线程运行完毕后才跳出fork...join块儿。下面我们以代码详细理解:module test(); initial be...

2022-01-27 18:52:30 5154 7

原创 SV小项目—异步fifo的简单验证环境搭建(全)

目录0.前言1.整体环境搭建1.1 interface搭建1.2 clk generator搭建1.3 rst generator搭建1.4 environment搭建1.5top搭建1.5.1 fifo_top搭建1.5.2 顶层top搭建2.添加剩余组件2.1 transaction组件2.2 generator组件2.3 driver组件2.4 monitor组件2.5 scoreboard组件2.6 更新environment...

2022-01-26 22:43:05 13292 12

原创 System Verilog学习笔记—接口interface

0.interface的直观理解 若想将TB和DUT连接起来,按照最常规的方法,是通过映射的方法将各个端口的信号一一连接,如下图所示,当一个DUT的信号有几十个甚至上百个的时候,就产生了许多的连线,一一连接十分繁琐且容易出错。 因此我们引入接口的方法,我们可以把接口类比成一根HDMI线,其内部包含了许多子线,使它们按照规定好的输入/出规则排列,因此使用的时候用的时候直接连接即可,而省去了一根一根线连接的繁琐操作。 下面我们通过代码进一步理解其使用方法。1.使用...

2022-01-17 12:03:49 3924 1

原创 Synopsys SV Lab Guide—lab3

目录0.前言​1.全局变量声明2.高层次级函数的确定3. 接收数据函数4.检查函数5.仿真结果6.完整test代码0.前言该lab目标有以下几点:随机化输入端口和输出端口以全面测试DUT 写一个monitor接收DUT的输出 写一个checker自动检查DUT的输出与预期结果是否一致该lab新添加的所有的操作都是在lab2中的test.sv文件中添加。1.全局变量声明 首先由于我们要随机化输入端口和输出端口,所以如果按照前面lab的只...

2022-01-03 21:58:24 1134

原创 Synopsys SV Lab Guide—lab2

0.前言该lab的目标有以下2点:1.写一个generator产生随机激励2.将generator产生的随机激励驱动给DUT,按照协议的时序3.通过波形观察结果该lab新添加的所有的操作都是在lab1中的test.sv文件中添加。1.全局变量声明 我们要给DUT发送激励,需要知道发给哪个端口,还要告诉DUT从哪个端口输出,所以首先我们要定义3个变量,如下:bit [3:0] sa; //输入端口,16个端口,用4bits来声明bit[3:0] da; //...

2021-12-31 21:30:29 1142 2

原创 System Verilog学习笔记—随机化约束的控制

目录1.控制多个约束块儿constraint_mode()2.控制随机变量2.1 rand_mode()2.2 randomize() with {}2.3 randomize单独控制变量3.回调函数 pre_randomize和post_randomize4.约束的重载(覆盖 )4.1使用constraint_mode(0)关闭约束后用randomize_with{}重新定义约束4.2子类extends父类,然后定义同名约束覆盖父类的约束1.控制多个约束块儿c.

2021-12-29 16:22:51 2876

原创 Synopsys SV Lab Guide—router简介

1.管脚图 该router有5个输入,4个输出,除了时钟和复位端口外其它信号端口均为16bits,如上左图;需要注意的是,该模块中每个信号的相同bit位算为“一起的”,即操作的时候是din[0],frame_n[0],valid_n[0]一起操作,而不能din[0],frame_n[1],valid_n[2]跨位操作。 另外该模块儿可以选择从哪路进,从哪路出,相应的路为地址。2.设计说明时钟上升沿触发和采样 输入输出均为串行,即1bit/1clk packe...

2021-12-28 20:13:07 2000 1

原创 Synopsys SV lab guide—lab1

目录0.前言1.Interface代码1.1声明接口1.2声明clocking block1.3声明modport2.test代码3.Test Harness 文件4.波形文件0.前言 在上一篇文章中介绍了该router的端口说明和协议,从这篇文章中我们正式开始做lab1,该lab的目标有以下2点:1.创建interface连接DUT和TB2.根据协议产生复位激励,初始化DUT 该lab搭建起来的组件及连接关系如下草图:...

2021-12-28 19:17:22 2266 1

原创 System Verilog学习笔记—随机化约束种类

1.为什么引入随机化?芯片体积增大,复杂度日渐提高,定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高 定向测试能找到你认为可能存在的缺陷,而随机测试可以找到连你都没有想到的缺陷 随机测试的环境要求比定向测试复杂,它需要激励、参考模型和在线比较,上百次的仿真不再需要人为参与,以此来提高验证效率 随机测试相对于定向测试可以减少相当多的代码量,而产生的激励较定向测试也更多样2.什么需要随机化测试?器件配置:通过寄存器和系统信号 环境配置:随机化验证环境,例如合理的时钟和外部反馈信号 原

2021-12-23 20:31:48 1028

原创 System Verilog学习笔记—虚接口(virtual interface)

1.虚接口(virtual interface)1.1为什么引入虚接口? 我们知道,通过引入interface可以简化模块儿之间的连接,即interface是连接硬件的,其是硬件语言;但对于验证来说,其描述语言往往是软件语言,interface无法在基于OOP的测试平台中实例化,因此我们无法通过interface把激励传送到DUT中;为了解决这个问题,引入了virtual interface,使得基于OOP的验证环境可以通过虚接口把激励传送给DUT。1.2虚接口如何实现测试平台与....

2021-12-19 15:18:35 14058 20

空空如也

空空如也

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

TA关注的人

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