Verdi 覆盖率文件的打开、merge、存储 1、 打开Verdi,在图形化界面选中,打开数据库文件,选中要merge的.vdb文件,choose后可以在test name框中看到所有提交的用例,全选点开始OK,就开始merge,无尽的等待。2、在终端,进入regress_xxx目录下输入命令merge。当一次回归任务结束,会看到【xxx.vdb】文件夹的生成,之后,弹出verdi界面,也是无尽的等待。覆盖率合并中出现下面的,永远选wait。
SV 有关覆盖率学习 覆盖率是衡量验证精度和完备性的数据指标;只有满足以下三个条件,才可以在仿真中实现高质量的验证:测试平台必须产生合适的激励来触发一个设计错误;测试平台仍然需要产生合适的激励使得被触发的错误可以进一步传导到输出端口;测试平台需要包含一个监测器(monitor)用来检测被激活的设计错误,以及在它传播的某个节点(内部或者外部)可以捕捉到她;没有任何一种单一的覆盖率可以完备地去衡量验证过程;即使可以达到100%的代码覆盖率,也不意味着100%地功能覆盖率。
UVM——多向通信 多向通信(multi_directional communication),这种方式服务的仍然是两个组件之间的通信,但是是由多个通信端口来构成的,而不是多个组件之间的通信,毕竟多个组件的通信仍然可以由基础的两个组件的通信方式来构建;多向通信指的是,如果initiator与target之间的相同TLM端口数目超过一个时的处理解决办法;comp1有两个,而comp2有两个端口,对于端口的例化可以给出不同名字,连接也可以通过不同名字来索引,但问题在于comp2中需要实现两个,又因为。
interface中的clocking 重新写一下之前的例子,以前记录的,好多细节不太清楚,重新复习,还是一位加法器代码如下:2.2. 激励的产生2.3. 加法器3.4. 监测器3.5. 顶层文件3. 分析仿真结果上述代码直接仿真,可以看到监测器实在时钟下降沿触发打印的,也就是下面这段代码;在实际电路中,组合逻辑都会有延迟,但是我们的仿真器不能够直接在波形上看到这个延迟时间,所有的信号都会在@(posedge clk)的时间变化,真是电路信号的变化都会在@(posedge clk)的前一点或者后一点;vld是我
Property使用 结合sequence(序列)对时序和逻辑的描述,property(属性)可以用来描述合计的确切行为;property可以在验证中用来做assumption,checker或者coverage;当使用assert关键词时,可以用作checker来检查设计是否遵循property的描述;当使用assum关键词时,可以作为环境的假设条件,对于仿真环境和形式验证均起到对激励进行假设的作用;当使用cover关键词时,可以将property是否真正通过作为断言覆盖率来衡量;
Sequence定义 例如,执行了一次burst read操作,期望读的数据和ack信号在接下来的4个周期内返回,但又不需要连续的4个周期,即可以使用[=4]来表示;t1序列可以用来匹配te1 ##2 te2,te1 ##3 te2,te1 ##4 te2,或者te1 ##5 te2;用来表示周期延迟符号,例如##n表示在n个时钟周期后,##0表示在当前周期,即交叠周期;,用来表示在连续两个采样周期内,表达式的值保持不变,如果满足,返回1,否则,返回0;用来表示一个事件的连续性,需要重复发生m次,但是并不需要在连续周期内发生;
Assertion介绍 用来与设计功能和时序作比较的属性描述检查设计的内容提高设计的可视度和调试能力检查设计特性在验证中是否被覆盖可读性好,可以用来服务于设计文档;用来检查算法模型的断言在形式验证(formal verification)中可以穷尽计算,找出可能的违例(violation);可以自由地打开或者关闭;一小部分子集甚至可以用来综合或者移植到emulation中,用来完成跨平台地移植;
线程的控制与同步 线程即独立运行的程序;线程需要被触发,可以结束或者不结束;在module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束;硬件模型中由于都是always语句块,所以可以看成是多个独立运行的线程,而这些线程会一直占用仿真资源,因为他们并不会结束;软件测试平台中的验证环境都需要有initial语句块去创建,而在仿真过程中,验证环境中的对象可以创建和销毁,因此在软件测试端的资源占用是动态的;选择题1:下面关于仿真时程序和模块的说法哪些是正确的?.........
SV 类的虚方法 多态 类的成员方法可以加修饰词virtual(虚方法)虚方法是一种基本的多态结构一个虚方法可以覆盖基类的同名方法在父类和子类中声明虚方法,其方法名、参数名、参数方向都应该保持一致在调用虚方法时,它将调用句柄指向对象的方法,而不受句柄类型的影响endclassendclassmodule tb;// 子类句柄赋值给父类,父类句柄指向子类的对象 P1 . printA;endmodule。............
MCDF顶层验证方案 多通道数据整形器(MCDF,multi-channeldataformatter),可以将上行(uplink)多个通道数据经过内部的FIFO,最终以数据包(datapacket)的形式送出。各个模块的验证环境是独立封装的,对外不需要保留数据端口,因此便于环境的进一步集成复用由于UVM自身的phase机制,在顶层协调各个子环境时,无需考虑由于子环境之间的例化顺序而导致的对象句柄引用悬空的问题httpshttpshttpshttpshttpshttpshttps。......
如何在qsim查看软件对象的实例? 先在qsim界面【view】打开【Locals】,然后在下面的地方点右键,选择【显示Processes】,层次结构里就会出现Designunittype为Process的#initial#选项,点击它,就能在Locals里面看见软件层次。在qsim中,下图显示的都是硬件层次hierarchy,并不能看到软件对象的层次。...
UVM——双向通信 UVM——双向通信1. 概述2. 分类3. transport1. 概述与单向通信相同的是,双向通信(bidirectional communication)的两端也分为initiator和targer,但是数据流向在端对端之间是双向的;双向通信中的两端同时扮演着producer和consumer的角色,而initiator作为request发起方,在发起request之后,还会等待response返回;UVM双向端口分为一下类型:uvm_blocking_transport_PORTu
UVM——单向通信 UVM——单向通信1. 概述2. 类型3. 方法4. 示例1. 概述单向通信(unidirectional communication)指的是从initiator到target之间的数据流向是单一方向的,或者说initiator和target只能扮演producer和consumer中的一个角色在UVM中,单一数据流向的TLM端口有很多类型:uvm_blocking_put_PORTuvm_nonblocking_put_PORTuvm_put_PORTuvm_blocking_get_P
UVM——TLM通信 UVM——TLM通信1. 概述2. 基本概念3. 分类4. 端口的使用1. 概述在芯片开发流程中,系统原型和芯片验证对项目的助推起到了关键作用系统原型,一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖时钟周期的模型,该模型通常基于SystemC,而系统原型中各个模型通过TLM可以实现宽松时间范围内的数据包传输芯片验证,是在RTL模型初步建成之后,通过验证语言和方法学来构建验证平台。该平台的特点是验证环境整体基于面向
UVM入门实验2 UVM入门实验21. 一些注意点说明1.0. 从SV环境移植到UVM环境1.1. clone()函数的调用需要类型转换1.2. 端口类1.3. 创建对象放在new()中还是build_phase()1.4. mcdf_pkg里对象的创建和连接1.5. test中添加virtual interface1.6. tb中不能用set_interface()1.7. 组件的phase自动执行2. 代码2.1. chnl_pkg2.2. arb_pkg2.3. fmt_pkg2.4. reg_pkg2.5. mcdf
线程间同步和通信,event semaphore mailbox 线程间同步和通信,event semaphore mailbox1. 概述2. 事件event3. wait_order()4. 旗语(semaphore)5. semaphore::get();6. semaphore::try_get()7. 信箱mailbox7.1. 信箱的内建方法7.2. mailbox::new()7.3. mailbox::num()7.4. 参数化信箱1. 概述测试平台中的所有线程都需要同步并交换数据一个线程等待另外一个,例如验证环境需要等待所有激励结束、比较结束才可
线程控制 fork 线程控制、同步与通信1. 线程控制1.1. 并行线程1.2. 一些代码示例1.2.1. 多个initial并行执行1.2.2. 单个initial内串行执行1.2.3. fork...join内并行执行1.2.4. join_any和join_none1.2.5. wait fork1.2.6. disable fork1.2. 时序控制1. 线程控制1.1. 并行线程fork...join需要所有的并行的线程都结束以后才会继续执行fork...join_any则会等到任何一个线程结束以后就继续执