数字验证
文章平均质量分 80
桐桐花
努力学习ing
一些笔记是我看mooc学习整理的,仅供学习。如果侵权,请私信我删掉
展开
-
【路科V0】SV实验3【Self-Checking】
今天的Lab3的学习目标是:构造一个从路由器输出端进行取样的监视器(Monitor) 构造一个可以验证路由器输出的比较器(Checker) 运行Driver和Monitor程序,检验Checker能否正确比数。在该实验完成时,你将得到如下验证结构。任务一:创建顶层测试环境(Top-Level Test Environment)1、编辑已存在的test.sv文件。2、给pkt2cmp_payload[$]序列添加一个全局声明(global-declaration),位宽为8bit (原创 2022-05-01 18:56:44 · 1535 阅读 · 3 评论 -
【路科V0】SV实验2 【Sending PacketsThrough Router】
Lab2的学习目标是:拓展lab1中的测试平台,从一个输入端向一个输出端发送数据包。 用新的测试平台来编译和仿真设计文件。在这次Lab中,你将继续去搭建测试平台上的相关组件(component) :激励产生器(Stimulus Generator) 驱动器(Driver) 等。你会使用一些的子程序(routine)去把一个数据包从输入端口3发送到输出端口7,并观察到这个数据包的payload。在该实验完成时,你将得到如下验证结构。任务一:声明程序(program...原创 2022-04-28 16:33:06 · 2049 阅读 · 2 评论 -
【路科V0】SV实验1【SystemVerilogVerification Flow】
lab1实验介绍实验的工具:Questa设计模块介绍实验中的待测试模块(DUT)是一个16输入,16输出的路由器,这个路由器的功能是把数据通过各个输入端(Input)发送到任意输出端(Output)。下面是最终完成的整个验证平台示意图。实验文件打开实验文件,你将会看到如下实验代码的结构,其中rtI中为设计代码,labs中为原始代码,solutions中为参考答案。在Lab1中我们应该掌握以下内容:用SV给待测试模块(DUT)搭建最简单的...原创 2022-04-24 17:54:38 · 5593 阅读 · 7 评论 -
【路科V0】验证环境4——MCDT测试结构(实现激励发生器)
MCDT测试结构如何实现产生数据transaction激励的组件channel generator 将这些数据解析并且驱动到channel interface上的驱动组件channel initiatorchannel simulatorclass chnl_trans ; rand bit[31:0] data[] ; rand int ch_id ; rand int pkt_id; rand int data_nidles ; rand..原创 2022-04-23 17:43:27 · 1114 阅读 · 0 评论 -
【路科V0】验证环境3——MCDT测试结构(例子)
理解验证环境结构的第三个要点1、学会区分哪一部分属于硬件、哪一部分属于软件,而哪一部分属于软硬件交互的部分。硬件部分:待测设计MCDT软件部分:验证环境(激励发生器、监测器、比较器。都是由类的实例构成)软硬件交互部分:接口(软硬之间发生数据通信,必须依赖这个接口)2、弄清楚验证环境中各个验证组件之间的位置层次关系以及它们之间是否有数据通信。如果对MCDT的数据通道发送数据,必须通过channel interface...原创 2022-04-23 11:02:03 · 964 阅读 · 0 评论 -
【路科V0】验证环境2——验证环境组件
测试平台(testbench)结构图典型验证结构框图原创 2022-04-22 11:58:27 · 2531 阅读 · 0 评论 -
【路科V0】验证环境1——验证环境结构
验证环境结构测试平台(testbench)是整个验证系统的总称。它包括验证结构中的各个组件、组件之间的连接关系、测试平台的配置和控制。从更系统的意义来讲,它还包括编译仿真的流程、结果分析报告和覆盖率量化等。从狭义上讲,我们主要关注验证平台的结构和组件部分,他们可以产生设计所需要的各种输入,也会在此基础上进行设计功能的检查。测试平台(testbench)结构图典型验证结构框图验证结构:待测设计:DUT 验证...原创 2022-04-20 11:12:45 · 2472 阅读 · 0 评论 -
【路科V0】systemVerilog基础21——从功能描述到覆盖率
概述要实现功能覆盖率的收敛,就需要按照以下步骤考虑:哪些功能需要测试 明白在什么条件下需要测试对应的功能 为了测试这些功能,需要提供什么样的测试平台组件以便提供激励和监测 测试平台如何检查这些功能正常工作由于功能覆盖率不是自动的过程,因此它需要将功能描述同设计实现对应起来。提取功能点一般遵循从外部接口到内部功能再到边界情况的方法。提取功能点提取接口功能点对于要验证的设计的各个接口,可通过以下问题来获得接口功能点:必须应用哪些传输? 什么样的取值范围? 什么样的传输顺.原创 2022-04-16 12:15:15 · 694 阅读 · 0 评论 -
【路科V0】systemVerilog基础20——功能覆盖率
概述功能验证的目标在于确定设计有关的功能描述是否被全部实现了。这一检查中可能会存在一些不期望的情况:(要尽量发现)一些功能没有被实现 一些功能被错误地实现了 一些没有被要求的功能也被实现了我们无法通过代码覆盖率得知要求的功能是否被实现了,而需要显性地通过功能覆盖率与设计功能描述做映射,继而量化功能验证的进程。所以功能覆盖率极其重要,用来量化验证的指标。覆盖组(cover group)覆盖组可以在以下中定义(覆盖组与类相似,在一次定义以后便可以多次...原创 2022-04-15 12:26:04 · 3465 阅读 · 0 评论 -
【路科V0】systemVerilog基础19——代码覆盖率
代码覆盖率概述代码覆盖是一种技术,可以识别在验证设计中已执行的代码。包含未知错误的设计的问题这个设计看起来就像一个非常好的设计。我们绝对不可能知道被验证的设计在功能上是完全正确的。即便所有测试平台都成功仿真,但是否有部分RTL代码未运行,因此未触发可能的功能错误?这是代码覆盖可以帮助回答的问题。代码覆盖率并不是SV独有的,这项技术已经在软件工程中使用了相当长的一段时间。代码覆盖率的一个优势在于它可以...原创 2022-04-14 12:02:01 · 3778 阅读 · 0 评论 -
【路科V0】systemVerilog基础18——覆盖率
概述“验证如果没有量化,那么就意味着没有尽头。”伴随着复杂SoC系统的验证难度系数成倍增加,无论是定向测试还是随机测试,我们在验证的过程中终究需要回答两个问题:是否所有设计的功能在验证计划中都已经验证? 代码中的某些部分是否从未执行过?覆盖率就是用来帮助我们在仿真中回答以上问题的指标。覆盖率已经被广泛采用,作为衡量验证进度的重要数据。覆盖率是衡量设计验证完备性的一个通用词语。随着测试逐步覆盖各种合理的组合,仿真过程会慢慢勾画出你的设计情况。覆盖率工具会在仿真过程中收集信息,然后进行后原创 2022-04-13 22:02:28 · 1055 阅读 · 0 评论 -
【路科V0】systemVerilog基础17——线程的通信
信箱mailbox线程通信的三个类型:event semaphore mailboxmailbox信箱,顾名思义,可以用来收发信息。在SV中,mailbox可以用来存放任何数据类型,也可以从信箱中读取这些数据信箱可以设置尺寸大小,防止存储数据过多,或者占用过多资源信箱存放数据的方式,是同FIFO一致的,即先存放进来的数据,也会被先读出信箱mailbox的内建方法//创建信箱: new ()//将信息写...原创 2022-04-12 12:14:56 · 2247 阅读 · 0 评论 -
【路科V0】systemVerilog基础16——线程的同步
概述测试平台中的所有线程都需要同步并交换数据。(在测试平台中,不但设计层次的各个硬件模块实例在依靠信号做同步和数据交换,验证环境中的各个组件也需要做同步和数据交换。)一个线程等待另外一个线程结束。验证环境中的同步和数据交换依靠的是软件方式示例:例如验证环境需要等待所有激励结束、比较结束才可以结束仿真。比如监测器需要将监测到的数据发送至检查器,检查器又需要从不同的缓存获取数据进行比较。线程同步类型1——事件(event...原创 2022-04-11 15:06:44 · 1274 阅读 · 0 评论 -
【路科V0】systemVerilog基础15——线程控制
什么是线程 在SV中,可以认为线程即独立运行的程序。线程需要被触发,可以结束或者不结束。举例:在硬件module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束。硬件模型的线程的特点硬件模型中由于都是always语句块,所以可以看成是多个独立运行的线程,而这些线程会一直占用仿真资源,因为它们并不会结束。验证环境中线程的特点initial语句中例化的各个验证环境、...原创 2022-04-10 11:35:05 · 1016 阅读 · 0 评论 -
【路科V0】systemVerilog基础14——任务和函数
概述类似于C语言,函数(function)和任务(task)可以提高代码的复用性和整洁度。它们的目的都在于将大型的过程块切分为更细小的片段,而便于阅读和代码维护。函数与任务之间有相同点和不同点。函数function函数的首要目的在于为运算表达式提供返回值,这样既便于简化原有的代码,也便于大型代码的维护。SV的函数定义与使用与C类似:函数可以指定输入变量和输出变量 函数可以返回数值,也可以不返回数值(不返回数值用v...原创 2022-04-09 12:37:41 · 2548 阅读 · 0 评论 -
【路科V0】systemVerilog基础13——约束控制
随机方法在类中声明的随机变量,需要伴随着类句柄调用方法randomize(),这是SV类的内建方法:virtual function int randomize();如果随机化成功则会返回1,如果失败则会返回0。class Simpl eSum; rand bit [7:0]x,y,z; constraint c {z ==x + y;}endclassSimpleSum p = new;int success = p.randomi...原创 2022-04-08 12:16:33 · 1628 阅读 · 0 评论 -
【路科V0】systemVerilog基础12——随机约束
带有随机变量的简单类与之前定义的类不一样的地方,这里的类都具有随机属性 。这些随机属性,在类例化以后,可以通过类的随机化函数randomize()被随机化注意:randomize()随机化函数是系统预定义的,任何一个类都可以调用这个函数。随机化函数有返回值,随机化成功是1,失败是0。随机化失败的原因很大可能是随机约束发生了冲突。class Packet; //随机变量 rand bit [31: 0] src, dst, data[8]; randc bit原创 2022-04-08 11:41:21 · 1971 阅读 · 0 评论 -
【路科V0】systemVerilog基础11——随机变量
概述随着设计变得越来越大,要产生一个完整的激励来测试设计的功能也变得越来越困难。定向激励的测试方法早已经无法满足检查功能完整性的要求。SoC的集成度提高带来的模块之间交互的复杂度也是指数攀升,这就使得验证工程师无法预测接下来用户使用过程中会发生什么样的状况。目前动态仿真验证的主流方法:随机-约束随机约束测试(CRT,Constrained-Random Test)随机约束测试即能够产生你感兴趣的、你想不到的的测试向量,...原创 2022-04-05 17:45:29 · 1191 阅读 · 0 评论 -
【路科V0】systemVerilog基础10——包的使用
包的定义如果两个模块(例如A、B模块)重名,就会有命名冲突的问题,尽管对于这两个同名模块,编译的时候不会出现错误 ,但是下一个编译的模块会覆盖上一个编译的模块。在大型的验证项目中,很容易出现模块重名的情况。怎么处理?对于重名的硬件模块:将它们置入到不同编译的库中。 对于重名的软件类、方法等:将它们置入到不同的包中。包(package)的使用情况1、我们可能使用不同的验证IP,我们也无法预测这些类名是否可能重名。通过包(package)可以将关联的类和方法并入到同一个...原创 2022-04-05 16:39:01 · 854 阅读 · 0 评论 -
【路科V0】systemVerilog基础9——类的继承
继承和子类之前定义过的类Packet,可以进一步扩展构成一个它的子类LinkedPacket。描述子类继承父类的关键词:extends通过extends,LinkedPacket继承于其父类Packet,包括继承其所有的成员(变量/方法)。class LinkedPacket extends Packet; LinkedPacket next ; function LinkedPacket get_next(); get_next = next; e原创 2022-04-03 18:39:41 · 2867 阅读 · 0 评论 -
【路科V0】systemVerilog基础8——对象拷贝
句柄的传递在区分了类(抽象)和对象(具体)之后,初学者还需要区分对象(存储空间)和句柄(空间指针)。也就是说,在创建了对象之后,该对象的空间位置不会更改,而指向该空间的句柄可以有多个。创建对象后,还需要句柄去索引到它。Transaction t1, t2;//声明Transaction类型的句柄t1,t2t1 = new(); //例化第一个对象,将new()函数返回的句柄赋予t1t2 = t1;//将t1的值赋予t2,即t1和t2指向同一个对象t1 = ...原创 2022-04-03 16:01:40 · 1257 阅读 · 1 评论 -
【路科V0】systemVerilog基础7——类的封装
类的概述类是一种可以包含数据和方法(function,task)的类型。例如一个数据包,可能被定义为一个类,类中可以包含指令、地址、队列ID、时间戳和数据等成员。class Packet ;//class定义类 类名 packet//类 packet的成员//数据或类属性bit [3:0] command; bit [40:0] address; bit [4:0] master_id;integer time_requested ;integer ti...原创 2022-04-02 17:30:39 · 970 阅读 · 0 评论 -
【路科V0】systemVerilog基础6——数组类型
数组类型动态数组 队列 关联数组动态数组与之前的定长数组相比,SV还提供了可以重新确定大小的动态数组。动态数组在声明时需要使用[ ],这表示不会在编译时为其制定尺寸,而是在仿真运行时来确定。int dyn[], d2[]; //声明动态数组initial begin dyn = new[5]; //A:分配五个元素 foreach (dyn[j]) dyn[j] = j...原创 2022-04-01 17:56:47 · 2054 阅读 · 0 评论 -
【路科V0】systemVerilog基础5——数组声明与数组操作
数组声明非组合型(unpacked)特点:消耗更多的存储空间,但是更易于查找元素对于Verilog,数组经常会被用来做数据存储,例如reg [15:0] RAM [0:4095] ;//存储数组SV将Verilog这种声明数组的方式称之为非组合型声明,即数组中的成员之间存储数据都是互相独立的。Verilog也不会指定软件去如何存储数组中的成员。wire [7:0] table [3:0];SV保留了非组合型的数组声明方式,并且扩展了允许的类型,包括ev...原创 2022-04-01 16:24:54 · 8417 阅读 · 0 评论 -
【路科V0】systemVerilog基础4——接口类型
Verilog是通过模块之间进行端口连接来完成模块间通信的。对于大型设计,通过端口进行连接将会让硬件集成变得乏味和容易出错。SV在Verilog语言基础上扩展了接口(interface) 。接口接口(interface)的特点:接口提供了一种新型的面向抽象级建模的方式。 接口的使用可以简化建模和验证大型复杂的设计。使用Verilog的模块端口与SV的接口之间的比较要集成一个子系统,包括处理器单元、存储单元、测试单元的连接等Verilog的方式按照以下步骤进行:...原创 2022-03-31 16:41:15 · 2291 阅读 · 0 评论 -
【路科V0】systemVerilog基础3——字符串类型
Verilog语言对于字符串的处理手段非常有限。SV引入了string类型用来容纳可变长度的字符串。SV中字符串的特点:字符串类型变量的存储单元为byte类型(8位二值逻辑)。 字符串类型变量长度为N时,其字符成员索引值为从0到N-1 不同于C语言,字符串结尾没有空字符“\0” 字符串的内存是动态分配的,用户无需担心内存空间管理。字符串使用方式:typedef logic [15:0] r_t;r_...原创 2022-03-31 15:04:27 · 3582 阅读 · 0 评论 -
【路科V0】systemVerilog基础2——自定义类型
自定义类型通过用户自定义类型,以往Verilog的代码将可以通过更少的代码来表示更多的功能。用户自定义类型使得代码的可读性更好。自定义类型的方法:通过typedef来创建用户自定义类型。 通过enum来创建枚举类型。 通过struct来创建结构体类型。typedefVerilog语言无法提供方便的特性来使得用户扩展变量和线网类型。SV则提供了特性使得用户可以构建更高抽象层的数据类型。就同C语言一样,用户可以利用已有的数据类型来定义新的数据类型,一旦...原创 2022-03-30 17:43:55 · 1439 阅读 · 1 评论 -
【路科V0】systemVerilog基础1——数据类型
数据类型Verilog语言两种基本的数据类型:变量类型(variables)【reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值。】 线网类型(nets)【例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案。】这两种类型都是四值逻辑,即可表示0、1、X和Z值。线网类型(nets)线网用于建模硬件设计中的连接线路,而线网的值由线网驱动器所决定。(驱动器可以是门或模块的实例,或者连续赋值的输出。) ...原创 2022-03-30 14:13:34 · 1885 阅读 · 0 评论