SV中的覆盖率】的更多相关文章

SV采用CRT的激励形式,而判断验证进度的标准也就是覆盖率(coverage). 覆盖率的两种指定形式:显式的,直接通过SV来指定出的,如SVA,covergroup. 隐式的,在验证过程中,随"register move"就可以由simulator得到的,如代码覆盖率等. 覆盖率类型:代码覆盖率---由仿真器直接提供,只能表示设计的冗余度,与spec关系不大.(toggle/expression/block) 功能覆盖率---与spec比较来发现,design是否行为正确,需要按ve…
SV搭建testbench的关键概念:CRT(constraint random test),测试集的随机化. 由于对象class由数据和操作组成,所以对数据的随机化一般放在一个class内.(对环境或环境的配置也可以反映在配置参数的随机化上) 一个constraint包括两部分:rand/randc变量声明,constraint约束块.其中randc会在重复之前,周期性取值,constraint约束块中的变量至少有一个rand/randc 变量,constraint约束块必须在{}内,用:来表…
SV中线程之间的通信可以让验证组件之间更好的传递transaction. SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语句.(所以使用的很少) 2) fork.....join_none 先执行块后的线程,而后再执行块内的线程.不会产生块后的线程必须等块内线程的情形. 3) fork.....join_any 只要块内的线程有一个执行结束,就执行块之后的线程. 需要说明一下,begin.....end之间的顺序操作,…
Interface:SV中新定义的接口方式,用来简化接口连接,使用时注意在module或program之外定义interface,然后通过'include来添加进工程. interface  arb_if(input bit clk);              //clk信号,一般单独拿出来 logic [1:0]grant, request;       //只定义信号类型.类型在不同的modport中分别定义. logic rst; clocking cb @(posedge clk); …
SV中class的properties和methods默认都是public的,但是可以声明为local和protected. 一个properties声明为local类型的,则只在该class中的methods可以调用该变量.即使subclass也不可以调用. local interger i; 一个properties或者methods声明为protected,与local类似,但是在subclass中可见. extern protected virtual automatic task_na…
Verilog-1995中规定的数据类型有:变量(reg), 线网(wire), 32位有符号数(integer), 64位无符号数(time), 浮点数(real). SV扩展了reg类型为logic,除了reg类型的功能外,可以用在连续赋值,门单元和模块所驱动.但是不能用在双向总线建模,不能有多点驱动. 其他数据类型:无符号双状态  bit, 有符号双状态32位   int, 有符号双状态8位     byte,                            //可以用内置函数  $…
OOP:Object-Oriented Programming,有两点个人认为适合验证环境的搭建:1)Property(变量)和Method(function/task)的封装,其实是BFM模型更方便的应 用.2)继承(Inheritance)与合成(Composition)非常适合一个架构的搭建. 在SV中,类可以定义在program, module, package中,但是一般一个类或几个相关的类会单独写在一个文件中.最终在program中调用.而且在SV中,所有成员 默认都是public类…
VCS在仿真过程中,也可以收集Coverage Metric.其中覆盖率类型有: 1)Code Coverage:包括control_flow和value两部分的coverage,line_coverage, branch_coverage, toggle_coverage, FSM_coverage. 2)Functional Coverage:包括covergroup,SVA. Coverage Database的产生:包含所有的有关coverage的信息,默认放在simv.vdb文件夹下.…
Cadence中的Incisive Comprehensive Coverage(ICC) solusion提供在仿真中的覆盖率分析. ICC中的覆盖率类型有两大类: 1)Code Coverage:主要检查代码的执行量,其中包括的小类有:Block Coverage(Branch Coverage), Statement Coverage(Expression Coverage),Toggle Coverage. 2)Functional Coverage:主要检查由PSL,SystemVer…
1)首先定义纯虚类Sv_object,主要实现下边两个function: 定义local static 变量nextobjectID; 虚方法 virtual function void copy(St_object that, CloneType clone_type = DEEP);在基类中复制都可以通过super.copy来迭代copy. 2)在Sv_object的基础上,实现对mailbox和event的封装.产生两个基类Sv_mailbox_wrapper与Sv_event_wrapp…
Coverage简介 Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率如何.Coverage支持分支覆盖率统计,可以生成HTML/XML报告. 官方文档:http://coverage.readthedocs.org/en/latest/ 获取地址:http://pypi.python.org/pypi/coverage 也可以通过easy_install或pip安装:easy_install coverage. 安装后在Python27\Sc…
UVM中的类包括:基类(base)------------uvm_void/uvm_object/uvm_transaction/uvm_root/uvm_phase/uvm_port_base 报告(reporting)--------uvm_report_object/uvm_report_handler/uvm_report_server/uvm_report_catcher Factory---------uvm_*_register/uvm_factory 配置(config)----…
这两年我的工作都转到了D3D11,目前新出硬件几乎全部支持此标准,加上D3D11接口清晰,概念直观,等到windows7普及,想必未来都是D3D11的天下.最近时间较空,我陆续开始写些基础文章,希望对新学者有所帮助.但文章纯属我自己随意写写,错误肯定很多,请大家多多包涵. 所谓MSAA,就是让一个像素可以同时存储多个颜色,而最终的显示结果由多个颜色重建而成.具体存储颜色的数量由DXGI_SAMPLE_DESC中的Count来决定,其中的Quality则一般用来给硬件设计厂商作为非常规发挥的余地,…
  尽管测试先行编程(test-first programming)和单元测试已不能算是新概念,但测试驱动的开发仍然是过去 10 年中最重要的编程创新.最好的一些编程人员在过去半个世纪中一直在使用这些技术,不过,只是在最近几年,这些技术才被广泛地视为在时间及成本预算内开发健壮的无缺陷软件的关键所在.但是,测试驱动的开发不能超过测试所能达到的程度.测试改进了代码质量,但这也只是针对实际测试到的那部分代码而言的.您需要有一个工具告诉您程序的哪些部分没有测试到,这样就可以针对这些部分编写测试代码并找出…
概念 Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant.Maven中:可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等. 插桩:程序插桩,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖…
randomize中的变量只支持2-state的values,不支持4-states. randc类型的变量不能被约束在solve------before的语句中. constraint可以被定义在class外: class  C: rand int x: constraint protol:    //隐式的 extern constraint protol2:    //显式的 endclass constraint C::protol { x inside {-4, 5, 7}; } co…
SV中的class通过new来创建实例,new函数可以传递多个参数: packet P1:  P1 = new:创建一个P1的对象: P2 = P1:P2也指向同一个对象: P2 = new P1:P2是P1的shadow copy,指针直接被copy. 对于参数化的class的new函数调用:new函数可以通过类操作符::来调用 class E#(type T = int) extends C: T x: function new(T x_init) super.new(); x=x_init…
SV中的module,interface,program,checker,都提供declaration空间,内部定义都local当前的那个scope,相互之间的building block不影响,不识别. package也可以提供一个declaration的空间,可以被其他的building block共享,Package declaration可以被import到其他的building block中,或者package中. (package中不能再包含module,interface,prog…
SV中的structured procedure: 1)intial procedure,keyword只有initial:最开始被调用一次: 2)always procedure,keyword包括always,always_comb,always_latch,always_ff: 整个仿真时间一直被调用: 3)final procedure,keyword 只有final:最后被调用一次: 4)Task: 5)function: 其他的procedure contexts,包括:covera…
Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式. 使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可以通过波形显示等调试工具. 通过PLI方式连接一个简单的C程序,需要编写很多代码,并理解多仿真阶段的同步,调用段,实例指针等概念. PLI方式给仿真带来了额外的负担,为了保护Verilog的数据结构,仿真器需要不断的在Verilog和C之间复制数据. SystemVerilog引入了DPI(Dire…
背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现问题,保证代码质量的好帮手. 对于开发者而言,代码覆盖率可以反馈两方面信息: 自测的充分程度. 代码设计的冗余程度. 尽管代码覆盖率对代码质量有着上述好处,但在 iOS 开发中却使用的不多.我们调研了市场上常用的 iOS 覆盖率检测工具,这些工具主要存在以下四个问题: 第三方工具有时生成的检测报告文…
1. EMMA 介绍 EMMA 是一个开源.面向 Java 程序测试覆盖率收集和报告工具.它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示.EMMA可以统计几种覆盖率:class,method,block, line.支持版本迭代的覆盖率统计 2. EMMA 使用 EMMA基本是四步曲:插桩(instr),运行,收集(ctl),报告(report).下面分别详细的介绍下 2.1 安装 下载地址:http://sourcef…
我们可以在uvm中实现HDL的后门访问,具体包括的function有uvm_hdl_check_path,uvm_hdl_deposit, uvm_hdl_force,uvm_hdl_release,uvm_hdl_read, task 有uvm_hdl_force_time. 这么做与直接用SV中force, release 有什么区别,有什么好处?这么做的话函数的输入是字符串而不是HDL(hardware description language, 硬件描述语言 )的层次结构.有了字符串就可…
Emma使用与分析 #什么是Emma EMMA 是一个开源.面向 Java 程序测试覆盖率收集和报告工具.它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示. EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能. #如何使用emma现在可以通过命令行,ant,maven,Jenkins等方式使用,这里只介绍通过mav…
一.SV中非堵塞事件 module test; event ev1, ev2; //belong to logic function part always@(ev1) $display("ev1 triggered at %0ts", $time); initial wait(ev2.triggered) $display("ev2 triggered at %0ts", $time); //belong to stimulus initial begin -&g…
本文系原创,转载请说明出处:from 信安科研人 目录 实验 工具的安装 1.安装AFL++ 2.安装epf 对IEC104协议库进行fuzz 实验准备 使用AFL++中的编译器插桩 开始fuzz 原理 问题提出 工具框架 III-A:目标程序插桩 III-B:数据包建模 III-C:状态转换建模 III-D 遗传种群构造器 III-E 执行引擎 III-F 主循环 Continue Schedule: Generate Input Evaluate Input Update Populatio…
一份代码,在写完之后,一定要再经过一次或多次整理和打磨,才能算完成的:一份代码,一定要把其有效代码行,精简.锤炼到最少.最短.最有效,才能算完成的.   下面这些问题和回答是忘记是在哪里看到的了,参考夏晶的文章,和我自己的验证经验,做了补充,作为日后学习的参考. Q:验证的目的? A:这也是发现Bug,发现所有的Bug,或者证明没有Bug(转自夏晶的帖子),无论任何验证语言.任何验证环境.任何验证方法学.任何Feature List,都是为了达成这一目的而使用的方法,或者所手段.这是夏晶给出来的…
1.原始类与扩展类 (1)原始类被称为父类或者超类,扩展类被称为派生类或者子类.扩展类可以直接访问原始类和其本身的所有变量,应该将原始类中的子程序定义成虚拟的,这样它们就可以在扩展类中重定义.new函数无法扩展,SV始终基于句柄类型来调用new函数. (2)扩展类的构造函数 如果基类构造函数有参数,那么扩展类必须有一个构造函数而且必须在其构造函数的第一行调用基类的构造函数. (3)关于句柄 指向基类(Transaction)的句柄也可以用来指向派生类(BadTr)的对象.当调用tr.calc_c…
本期将讲解UVM环境构成和启动方式.主要参考资料为 http://bbs.eetop.cn/thread-320165-1-1.html http://rockeric.com/ 环境构成 进行仿真验证的基本流程是 例化DUT 产生并发送激励 检测响应 检查响应是否正确 在验证环境中,产生并发送激励将会交给两个不同的类完成,即uvm_driver和uvm_sequence,检测响应通过uvm_monitor完成,而检查响应是否正确通过uvm_scoreboard.除了保证某项功能正确,我们还需要…
转载:http://blog.sina.cn/dpool/blog/s/blog_7853c3910102yn77.html VCS仿真可以分成两步法或三步法, 对Mix language, 必须用三步法.我呢,因为运用都是简单的非mix language,所以经常用一步法,因为这样省劲,但是对于跑regression最好还是两步法.VCS对应的waveform工具有DVE和Verdi, DVE因为是原生的,所以VCS对DVE非常友好.但DVE已经过时了,其对uvm等新feature支持的不好.…