SystemVerilog
文章平均质量分 71
煎丶包
这个作者很懒,什么都没留下…
展开
-
MCDF实验——Lab5
Lab5主要完成如何定义覆盖率,如何从验证计划到测试用例的实现,最后再到覆盖率的量化。验证量化分为代码覆盖率和功能覆盖率。一、编译在编译过程中,需要对于设计相关的文件设置额外的覆盖率编译选项。只选中与设计相关的文件点击右键,选择compile->compile properties,在弹出设置栏的coverage一栏中,如图选择以下选项,然后点击OK。完成所有文件的编译“Compile All”。这一步将在编译DUT文件时生成代码覆盖率的模型。二、仿真在仿真窗口(transcrip原创 2021-02-20 00:56:49 · 8438 阅读 · 11 评论 -
MCDF实验——Lab4
在之前的Lab3中,通过一个初具规模的MCDT的验证环境,学习到:验证环境按照隔离的观念,应分为硬件DUT,软件验证环境,和处于信号媒介的接口interface。对于软件验证环境,需要经历建立阶段(build),连接阶段(connect),产生激励阶段(generate)和发送激励阶段(transfer),只有当所有的激励发送完毕并且比较完全之后,才可以结束该测试。从Lab4开始,要验证更大的子系统,即MCDF。与MCDT相比,MCDF主要添加了寄存器控制和状态显示功能,同时也添加了一个重要的数据原创 2021-02-18 11:32:16 · 18172 阅读 · 12 评论 -
SystemVerilog线程
一、程序和模块module除了作为RTL模型的外壳包装和实现硬件行为,在更高层的集成层面,模块之间也需要通信和同步。对于硬件的过程块,它们之间的通信可理解为不同逻辑/时序块之间的通信或者同步,是通过信号的变化来完成的。从硬件实现的角度来看,Verilog通过always,initial过程语句块和信号数据连接实现进程间通信。可以将不同的module作为独立的程序块,他们之间的同步通过信号的变化event触发、等待特定事件(时钟周期)或者时间(固定延时)来完成。模块(线程)在仿真一开始便并行执行,原创 2021-02-14 22:18:58 · 1237 阅读 · 0 评论 -
SystemVerilog随机控制和随机函数
一、随机序列产生事务序列的另一个方法是使用SV的randsequence结构,这对于随机安排组织原子测试序列很有帮助。initial begin for(int i = 0; i < 15; i++) begin randsequence(stream) stream: cfg_read := 1 | //权重分布 io_read := 2 | mem_read := 5; cfg_read : {cfg_read_task;} |原创 2021-02-09 22:49:01 · 1642 阅读 · 0 评论 -
SystemVerilog数组约束
一、打开或关闭约束一个类可以包含多个约束块,可以把不同的约束块用于不同测试。各个约束块之间的约束内容是互相协调不违背的。使用内建的constraint_mode()函数可以根据不同的需要打开或者关闭约束。二、内嵌约束多个约束块之间会相互作用,用来使能和禁止这些约束的代码也会增加测试的复杂性。约束需要考虑类的开放封闭原则。SV允许使用randomize() with来增加额外的约束,这和在类里增加约束是等效的,但同时要注意内部约束和外部约束之间应该是协调的,如果出现互相违背的情况,那么 随原创 2021-02-09 22:11:31 · 1300 阅读 · 0 评论 -
SystemVerilog随机约束和分布
一、为什么需要随机芯片体积增大,复杂度越来越高,定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高。随机测试可以找到意想不到的缺陷。随机测试的环境要求比定向测试复杂,需要激励、参考模型、在线比较。随机测试相对于定向测试可以减少相当多的代码量,产生的激励较定向测试也更多样。二、为什么需要约束如果没有约束,产生有效激励的同时也产生了很多无效和非法的激励。随机自由是一种合法的随机,需要限定激励的合法范围。随机的对象不只是一个数据,而是有联系的变量集。通常这些变量会被封装在一个数据类中,原创 2021-02-08 23:09:28 · 1739 阅读 · 0 评论 -
仿真中设置断点和查看变量
设置断点和查看变量在软件执行过程中,通过设置断点可以查看在程序执行到断点处时变量数值。设置断点可以便于查看软件程序(function、task、object)中局部变量的数值。要注意的是,软件部分的变量(即动态变量,与硬件变量即静态变量相对)是无法添加到波形窗口的,原因之一例如软件变量会在0时刻中完成多次运算,而波形窗口无法反映出在0时刻的若干变化,而且这么做对于波形存储的压力也很大。因此软件部分的变量只可以通过设置断点来查看当前程序中的变量数值。设置断点的另一个作用在于可以用来调试程序执行的顺序,原创 2021-02-04 23:49:47 · 2005 阅读 · 0 评论 -
仿真开始——“run 0”示例解析
simstart.sv代码如下module simstart1;logic a1=0; logic a2, a3, a4, a5;bit rstn, clk;assign a2 = a1; // assigninitial begin // initial a3 = a1;endalways @(posedge clk, negedge rstn) begin // sequential logic if(rstn === 'b0) a4 <= 0; else a4原创 2021-02-04 23:05:48 · 932 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——功能覆盖率(三)
文章目录一、交叉覆盖率1、基本的交叉覆盖率的例子2、对交叉覆盖仓进行标号3、排除掉部分交叉覆盖仓4、从总体覆盖率的度量中排除掉部分覆盖率5、从多个值域中合并数据6、交叉覆盖的替代方式二、通用的覆盖组1、通过数值传递覆盖组参数2、通过引用传递覆盖组参数三、覆盖选项1、单个实例的覆盖率2、覆盖组的注释3、覆盖阈值4、打印空仓5、覆盖率目标四、覆盖率数据的分析五、在仿真过程中进行覆盖率统计一、交叉覆盖率覆盖点记录的是单个变量或者表达式的观测值,而交叉覆盖率可以同时测量两个或者两个以上覆盖点的值。若其中一个有N原创 2021-02-04 21:52:17 · 1543 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——功能覆盖率(二)
一、覆盖组详解覆盖组与类相似,一次定义后便可以进行多次实例化。它含有覆盖点、选项、形式参数和可选触发。一个覆盖组包含了一个或者多个数据点,全都在同一时间采集。覆盖组可以定义在类里面,也可以定义在程序或模块层次上,它可以采样任何可见的变量或者信号。在SV中,覆盖组应该定义在适当的抽象层次上,这个层次可以在测试平台和设计的边界上,在读写数据的总线交换单元中,在环境配置类里或者任何需要的地方。对任何事务的采样都必须等到数据被待测设计收到以后,如果在事务中间注入一个错误,导致数据传输失败,那么就需要改变功原创 2021-02-03 23:02:43 · 1516 阅读 · 1 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——功能覆盖率(一)
功能覆盖率一、覆盖率的类型1、代码覆盖率2、功能覆盖率3、漏洞率4、断言覆盖率二、功能覆盖策略1、收集信息而非数据2、只测量将会使用到的内容3、测量的完备性三、功能覆盖率的简单例子功能覆盖率是用来衡量哪些设计特征已经被测试程序测试过的一个指标。可以使用一个反馈环路来分析覆盖的结果,并决定采取哪种行动来达到100%的覆盖率。首要的选择式使用更多的种子来运行现有的测试程序,其次是建立新的约束。只有在确实需要的时候才会创建定向测试。覆盖率收敛:显式的覆盖率是在测试环境中使用SV特性直接描述的,隐含的覆盖率原创 2021-01-30 22:36:11 · 1057 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——参数化的类
参数化的类——可以用来处理多种数据类型,类似于“模板”一、一个简单的堆栈使用整数的堆栈class IntStack; local int stack[100]; //保存数据值 local int top; function void push(input int i); //从顶端压栈 stack[++top] = i; endfunction : push function int pop(); //从顶端出栈 return stack[top--]; endfunc原创 2021-01-30 14:29:38 · 616 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——回调
一、回调如何创建一个可以不做任何更改就能在所有测试中使用的验证环境?要做到这一点的关键就是测试平台必须提供一个“钩子”,以便测试程序在不修改原始类的情况下注入新的代码。驱动器的作用:注入错误放弃事务延迟事务将本事务跟其他事务同步将事务放进记分板收集功能覆盖数据与其试图预测所有可能的错误、延迟或者事务流程中的干扰,不如使用回调的方法,这时驱动器仅需要回调一个在顶层测试中定义的子程序。这种回调子程序可以在每个测试中做不同的定义,这样测试就可以使用回调来为驱动器增加新的功能而不用编辑Dri原创 2021-01-30 13:59:00 · 578 阅读 · 1 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——抽象类和纯虚方法
抽象类和纯虚方法抽象类:即可以被扩展但是不能被直接实例化的类,它使用“virtual”关键字进行定义。纯虚方法:这是一种没有实体的方法原型。一个由抽象类扩展而得来的类只有在所有虚方法都有实体的时候才能被例化。关键词“pure”表明一个方法声明是原型定义,而不仅仅是空的虚方法。纯虚方法只能在抽象类中定义,但是抽象类中也可以定义非纯方法。使用纯虚方法的抽象类/*可以声明BaseTr类型的句柄,但是却不能创建该类型的对象,需要首先扩展该类并对所有的纯虚方法提供具体实现。*/virtual原创 2021-01-30 12:51:50 · 548 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——对象的复制
https://blog.csdn.net/qq_39794062/article/details/113264235上边链接的文章中的发生器首先要随机化,然年复制蓝图来创建一个新的事务,这篇文章来讲一下使用到的copy函数。带有copy虚函数的事务基类class Transaction; rand bit[31:0] src, dst, data[8]; bit[31:0] crc; virtual function Transaction copy(); //复制数据域 copy.原创 2021-01-30 01:37:16 · 543 阅读 · 0 评论 -
RTL仿真时信号竞争问题——通过delta-cycle查看严格的时序逻辑前后关系
关于采样和驱动的信号竞争问题可以看我的这篇文章https://blog.csdn.net/qq_39794062/article/details/113379285接下来这篇文章通过一个RTL仿真例子,来讲解竞争问题。race.sv`timescale 1ns/1nsmodule race1;bit clk1, clk2;bit rstn;logic[7:0] d1;initial begin forever #5 clk1 <= !clk1; //5ns一翻转,所以时原创 2021-01-29 22:11:41 · 4891 阅读 · 2 评论 -
SystemVerilog包的使用
一、包的意义SV语言提供了一种在多个module、interface和program之中共享parameter、data、type、task、function、class等的方法,即利用package的方式来实现。通常将不同模块的类定义归整到不同的package中。package的好处是将一簇相关的类组织在了单一的命名空间namespace下,使得分属于不同模块验证环境的类来自于不同的package,这样可以通过package来解决类的归属问题。二、包的定义package regs_pkg;原创 2021-01-29 16:28:20 · 1479 阅读 · 1 评论 -
SystemVerilog句柄的使用
一、句柄的传递句柄可以作为形式参数通过方法来完成对象指针,从外部传入方法内部句柄也可以在方法内部首先完成修改,而后再由外部完成使用function void create(ref Transaction tr); //ref或者inout tr = new(); tr.addr = 100; ...endfunctionTransaction t; //此时t=nullinitial begin create(t); t.addr = 10; $display(t.add原创 2021-01-29 15:26:20 · 1621 阅读 · 0 评论 -
SystemVerilog类的继承中成员覆盖问题
在父类和子类里,可以定义相同名称的成员变量和方法,而在引用时,也将按照句柄类型来确定作用域。示例父类basic_testclass basic_test; int def = 100; int fin; task test(stm_ini ini); $display("basic_test::test"); endtask function new(int val); ... endfunctionendclass子类test_wrclass test_wr extend原创 2021-01-29 14:15:46 · 1259 阅读 · 0 评论 -
SV中的采样和数据驱动
一、竞争问题为了避免在RTL仿真行为中发生的信号竞争问题,建议通过非阻塞赋值或特定的信号延迟来解决同步的问题。默认情况下,时钟对于组合电路的驱动会添加一个无限最小时间(delta-cycle)的延迟,而该延迟无法用绝对时间单位衡量,它要比最小时间单位精度还小。在一个时间片(time-slot)中可以发生很多事情,例如在仿真器中敲命令“run 0”,即是让仿真器运行一个无限最小时间,一个时间片包含无限多个delta-cycle。 s > ms > ns > ps > fs &g原创 2021-01-29 13:09:28 · 3033 阅读 · 1 评论 -
SV中的接口
一、什么是接口接口可以用作设计,也可以用作验证。在验证环境中,接口可以使得连接变得简洁而不易出错。interface和module使用性质很像,它可以定义端口,也可以定义双向信号,它可以使用initial和always,也可以定义function和task。interface可以在硬件环境和软件环境中传递,如module中的端口列表和软件方法中的形参。可以把interface看作一个“插排”,而DUT与TB之间的数据驱动关系都可以使用interface这个“插排”来完成。二、接口的优势将原创 2021-01-29 12:38:16 · 1902 阅读 · 0 评论 -
SV中的比较器
一、概述比较器实现难度较大,且费时费力,同时还需要维护。checker负责的是模拟设计行为和功能检查。二、比较器的功能可以缓存从各个Monitor收集到的数据。将DUT输入接口侧的数据汇集给内置的reference model,它扮演了模拟硬件功能的角色。通过数据比较方法,检查实际收集到的DUT输出端接口数据是否同reference model产生的期望数据一致。对于设计内部的关键功能模块,也有相对应的线程进行独立的检查。可以将检查成功的信息统一纳入到检查报告中,检查失败,也可以采取暂原创 2021-01-29 12:29:13 · 823 阅读 · 0 评论 -
SV中的监视器
一、概述Monitor主要的功能是用来观察DUT的边界或者内部信号,并且经过打包整理传送给其它验证平台的组件。从监测信号层次来划分monitor功能:观测DUT边界信号:对于系统信号,如时钟,可以监测其频率的变化;对于总线信号,可以监测总线的传输类型和数据内容,以及检查总线时序是否符合协议。观测DUT内部信号:灰盒验证,用来指导Stimulator激励发送,或者完成覆盖率收集,又或者完成内部功能的检查。二、监测器组件结构方案一:一个总的Monitor方案二:分布式,每一个Stimulat原创 2021-01-29 11:47:01 · 1157 阅读 · 0 评论 -
SystemVerilog中类的成员
类的成员一、概述二、类的封装三、类的相关问题一、概述类是成员变量和成员方法的载体,之所以称之为自洽体,是因为其变量和方法应符合“聚拢”原则,即一个类的功能应该尽可能简单,不应该承担过多的职责,更不应该承担不符合它的职责,这在设计模式中称为单一职责原则(SRP)。类作为载体,也具备了天生的闭合属性,即将其属性和方法封装在内部,不会直接将成员变量暴露给外部,通过protected和local关键字来设置成员变量和方法的外部访问权限。所以封装属性在设计模式中称之为开放封闭原则(OCP)。如果没有指明访问原创 2021-01-28 21:44:50 · 1855 阅读 · 0 评论 -
SystemVerilog中的类和对象
类和对象的概述1、类和对象2、验证使用OOP的意义3、OOP的概念要素4、创建对象5、句柄的传递6、对象的销毁7、句柄的使用8、静态变量9、静态方法1、类和对象类是将相同的个体抽象出来的描述方式,对象时实体,具备有独立行为的能力。具有相同属性和功能的对象属于同一类,而不同的类之间可能有联系或者没有联系。C语言中,编程基于过程方法,在Verilog中提供了笨拙的类对象编程可能性,即在module中定义方法,而后调用module实例中的方法。Verilog的module+method的方式与SV的c原创 2021-01-28 21:09:46 · 2496 阅读 · 0 评论 -
SV中的激励发生器
一、概述Stimulator激励发生器时验证环境的重要部件,在某一些场合中也被称为drive驱动器、BFM总线功能模型、Behavioral行为模型、Generator发生器。Stimulator主要负责模拟与DUT相邻设计的接口协议。Stimulator不应该违反协议,但不拘束于真实的硬件行为,还可以给出更多丰富激励场景。比真实硬件行为更丰富的激励,会使得模块级的验证更加充分。Stimulator的接口主要是同DUT之间的连接。较精细的Stimulator还可以有其它的配置接口用来控制接口的原创 2021-01-28 14:38:23 · 1164 阅读 · 0 评论 -
SV中的设计例化和连接
一、设计例化模块定义module为硬件域,在定义时需要标注方向、位宽、端口名。模块例化在上层例化底层模块,或者TB例化DUT时均需要完成模块例化模块连接在testbench中的连接(connection)指的是有硬件模块参与作为信号驱动方(driver)或负载方(load)在TB中常见的连接有两个硬件模块之间的连接,如实例A与实例B的连接,可由logic类型完成连接。如果是硬件模块与TB发送数据激励的连接,则要考虑数据激励端如果正确产生数据并发送至DUT一侧,同时数据激励端也要对DUT反原创 2021-01-28 14:08:48 · 3070 阅读 · 1 评论 -
SV中的过程块和方法
一、硬件过程块在SV中首先要搞清楚哪些语句应该放在“硬件世界”,哪些程序应该放在“软件世界”。硬件世界:module、interface软件世界:program、classalwaysalways是为了描述硬件的行为,可以描述时序电路、组合电路。所以只在module和interface中使用。always中的@(event)敏感列表是为了模拟硬件信号的触发行为。initialinitial非常符合软件的执行方式,即只执行一次。initial和always一样,无法被延迟执行,即在原创 2021-01-28 13:51:04 · 1504 阅读 · 0 评论 -
SV的数据类型
对SystemVerilog语言数据类型做一个总结,详细全面的介绍可以翻阅绿皮书一、内建数据类型相对于Verilog将寄存器类型reg和线网(net)类型,如wire,SV中引入了logic数据类型。Verilog便硬件描述,所以注重的是声明的变量是寄存器类型还是线网类型。SV偏验证,不关心logic对应逻辑应该被综合成为寄存器类型还是线网类型,只会作为单纯的变量进行赋值。logic类型为四值逻辑,分别是0、1、x、z。x代表不确定,可能为0也可能为1;z代表高阻态,表示没有被驱动。四值逻辑可以原创 2021-01-28 13:04:26 · 3920 阅读 · 1 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——合成、继承和其他替代的方法
一、合成和继承在将两个相关联的类组合到一起的方面,合成使用了“有”的关系,一个数据包有一个包头和一个数据体。而继承使用了“是”的关系,一个BadTr是一种Transaction,只不过具有了更多的信息。二、合成的问题信息隐藏(使用私有变量)等的概念跟创建一个测试平台是矛盾的,因为测试平台需要最大的可见性和可控制性。使用合成来创建以太帧(不推荐)class EthMacFrame; typedef enum{II,IEEE} kind_e; 假设测试平台使用的是普通类型II和虚拟局域网VLAN两原创 2021-01-27 21:40:45 · 413 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——类型向下转换和虚方法
一、使用$cast作类型向下转换类型向下转换或者类型变换是指将一个指向基类的指针转换成一个指向派生类的指针。但是将一个基类对象拷贝到一个扩展类的句柄中时,因为有些属性仅存在于扩展类中,基类并不具备,所以可能导致失败。为什么说可能呢?因为将一个基类句柄赋值给一个扩展类句柄并不总是非法的,当基类句柄确实指向一个派生类对象时时允许的。$cast子程序会检查句柄所指向的对象类型,而不仅仅检查句柄本身,一旦源对象跟目的对象时同一类型,或者是目的类的扩展类,就可以从基类句柄tr中拷贝扩展对象的地址给扩展对象的句柄ba原创 2021-01-27 20:59:04 · 338 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——蓝图模式
一、蓝图模式蓝图模式是OOP中一种非常有用的技术。如果你用一台机器来生产标记,那么并不需要预先知道每一个可能的标记形状,你所需要的只是一个压印机然后变换金属模子以剪裁出不同的形状。同样的。当你想要构建一个事务发生器的时候,不需要知道怎样建立各种类型的事务,只需要能够根据给定的事务建立一个类似的新的事务即可。蓝图模式发生器:我们先构建一个对象的蓝图(建材金属模),然后修改它的约束,甚至使用一个扩展对象替换它。然后随机化这个蓝图的时候,它就会具有你想赋予的随机值,接着复制这个对象,并将拷贝值发送给下游的原创 2021-01-27 19:40:06 · 1148 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——线程以及线程间的通信(三)
一、旗语1、旗语的操作2、带多个钥匙的旗语二、信箱一、旗语使用旗语可以实现对同一资源的访问控制,类似于操作系统里面的互斥访问。在SV多个阻塞的线程会以FIFO的方式进行排队。1、旗语的操作旗语有三种操作:使用new方法可以创建一个带单个或者多个钥匙的旗语使用get可以获取一个或多个钥匙使用put可以返还一个或多个钥匙如果试图获取一个旗语而不希望被阻塞可以使用try_get()函数,返回1表示足够多的钥匙,而返回0则表示钥匙不够。用旗语实现对硬件资源的访问控制program auto.原创 2021-01-25 14:50:43 · 1167 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——线程以及线程间的通信(二)
一、线程间的通信二、事件1、在事件的边沿阻塞2、等待事件的触发3、在循环中使用事件4、传递事件一、线程间的通信测试平台中的所有线程都需要同步并交换数据。多个线程可能会同时访问同一资源。在最高的层面上,线程需要彼此交换数据,例如从发生器传递给代理的事务对象。所有这些数据交换和控制的同步被称为线程间通信(IPC),在SV中可以使用事件、旗语和信箱来完成。二、事件Verilog事件可以实现线程的同步,一个线程总是要等待一个带@操作符的事件。这个操作符是边沿敏感的,其他的线程可以通过->操.原创 2021-01-25 00:38:44 · 523 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——线程以及线程间的通信(一)
在实际硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则是随着输入的变化而变化。所有这些并发的活动在Verilog的寄存器传输级上是通过initial和always块语句、实例化和连续赋值语句来模拟的。为了模拟和检验这些语句块,测试平台使用许多并发执行的线程。在测试平台的环境里,大多数语句块被模拟成事务处理器,并运行在各自的线程里。一、线程的使用1、使用fork...join和begin...end2、使用fork...join_none来产生线程3、使用fork...join_any实现线程同步测试平台原创 2021-01-24 20:01:50 · 427 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——随机化(四)
一、产生原子激励和场景1、和历史相关的原子发生器2、随机序列一、产生原子激励和场景1、和历史相关的原子发生器产生相关的事务流的最简单的办法是采用基于以前事务的随机值的原子发生器。这个类可以约束总线事务在80%的时间里重复过去的命令。例如写操作,并且在过去的目的地址上增加一个增量。你可以使用post_randomize函数复制产生的事务,用于下一次randomize()调用。2、随机序列产生事务序列的另一个方法是使用SV的randsequence结构。initial begin for(int.原创 2021-01-24 14:02:39 · 948 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——随机化(三)
一、随机数函数二、约束的技巧和技术1、使用变量的约束2、使用非随机值3、用约束检查值的有效性4、随机化个别变量5、打开或关闭约束三、迭代和数组约束1、数组的大小2、元素的和3、产生具有唯一元素值的数组4、随机化句柄数组一、随机数函数$random()——平均分布,返回32位有符号随机数$urandom()——平均分布,返回32位无符号随机数$urandom_range()——指定范围内的平均分布$dist_exponential()——指数衰落$dist_normal()——钟型分布$di.原创 2021-01-23 21:27:22 · 1239 阅读 · 0 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——随机化(二)
一、解的概率1、没有约束的类2、关系操作3、关系操作和双向约束4、使用solve...before约束引导概率分布二、控制多个约束块三、有效性约束四、内嵌约束五、pre_randomize和post_randomize函数1、构造浴缸型分布2、关于void函数一、解的概率1、没有约束的类没有约束的两个随机变量class Unconstrainted; rand bit x; //0或1 rand bit[1:0] y //0,1,2,3endclass2、关系操作带有关系操作的类.原创 2021-01-23 16:38:39 · 727 阅读 · 0 评论 -
SystemVerilog中的solve - before的用法详解
https://www.chipverify.com/systemverilog/systemverilog-solve-before可以参考这个链接,英文版,讲解了很多SV的用法可以类比概率论中的条件概率:条件概率是指事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为:P(A|B),读作“在B的条件下A的概率”。solve-before的用法solve A before B简单点说,就是在解决B之前先解决A,可以改变概率的分布,使得某些特定的情况比其他情况更容易被选择。随机分.翻译 2021-01-23 15:23:01 · 7067 阅读 · 1 评论 -
《SystemVerilog验证测试平台编写指南》学习笔记——随机化(一)
一、随机化介绍二、什么需要随机化1、器件配置2、环境配置3、原始输入数据4、封装后的输入数据5、协议异常、错误和违规6、延时二、SV中的随机化1、带有随机变量的简单类2、检查随机化的结果约束求解一、随机化介绍随着设计变得越来越复杂,要产生一个完整的激励集来测试设计的功能也变得越来越困难了。解决的办法是采用约束的随机测试法(CRT)自动产生测试集。准备CRT的环境要比准备定向测试集的环境复杂,CRT环境不仅需要产生激励,还需要通过参考模型、传输函数或其他方法预测输出结果。CRT由两部分组成:使用随.原创 2021-01-23 12:42:45 · 1346 阅读 · 0 评论