systemverilog知识点汇总vv持续更新

功能coveragre

Coverage类型: code/functional/assertion coverage; 

  code coverage: 衡量设计的实现情况,测试对于设计规范的实现测试的有多彻底;1.行覆盖率2.路径覆盖率3.条件覆盖率4。翻转覆盖率5.状态机覆盖率    

  functional coverage:与设计意图紧密相连(搞清楚design关键特性、边界情形、可能的故障模式----只测你想知道的)

  assertion coverage: 可以跟随设计和测试平台一起仿真—bind 将if例化在dut内部,可以监测dut端口signal 以及内部这一层的signal(注意与if进行区别);

功能coverage & 代码coverage 高低分别代表什么? Fun.低、cod.低出现在 验证早期;验证进行到一定程度时,代码coverage低、功能coverage高:(验证计划不完整)回到设计规范更新验证计划代码coverage低、功能coverage低:换用不同的种子进行随机测试,看是否提高,如果咩有明显作用,可以新增一些corner case;代码coverage高、功能coverage低:查看是否将验证定位到感兴趣的状态上;

  关于functional coverage:

  covergroup定义、创建、采样part:

  覆盖率—如何限制自动创建bin的数目?---如何自定义bins?---如何 控制是否采样1.iff 2.采样时设置实例名.start/stop 3.option.weight=0;---是否认识wildcard?---如何扣除连续仓中的个别仓?---指明非法仓?---收集单个覆盖组的coverage;---交叉覆盖率的收集;----翻转覆盖率中的连续重复、跟随重复、非连续重复;----仿真过程中的coverage收集:$get_coverage;

  确定仓被命中几次:hits; 规定至少一个仓命中8次后,对应的组合就被测试到:option.at_least=8;

面向对象programming

类的三大属性及应用:继承:允许一个类得到一个新的类并共享变量和子程序;为了构建可重用的组件,OOP技术提供一种通过创建派生类创建层次结构的机制-UVM;多态怎么理解?虚方法的重写和实现(子类可以对父类方法进行显式调用super.new());

  解释sv中的deallocation机制---分辨是否要回收?与c++有何区别?;

  New()和new[ ]的异同 申请内存&初始化变量

  Class中如何进行静态变量的声明和访问;

  This是什么意思:告诉sv引用类一级变量;

  简述如何在一个类内使用另一个类;编译顺序

  Ref 关键词的理解

  解释浅拷贝与深拷贝(实质,拷贝对象是否拥有自己独立的内存空间):创建一个新object,并复制了现有对象的所有变量(只有最高一级的对象被new复制)

  OOP访问对象的方法:公有方法get(),put();

  OOP在uvm中的应用:测试平台和设计细节分开:eg. Sequence产生;

  句柄和对象怎么区分:一个句柄可以指向多个对象;

 

  OOP规则指出:指向基类的句柄可以指向派生类对象;因为句柄可以引用其中的变量和方法;调用 句柄.fun时候判断它调用的是基类还是子类的方法的方法:看句柄中对象的类型

  如何理解blueprint的?blueprint的构建和随机化分开;

  $cast定义:将一个指向基类的指针转换成指向派生类的指针;(sv会对句柄类型做静态检查),不通过则不会被编译;如何使用$cast做强制类型转换:1.用子类句柄指向一个创建的子类对象2.基类句柄指向子类对象3.$cast(子类句柄,基类句柄);

  多态的概念:OOP中多个子程序使用一个共同的名字的现象(虚方法的重写和实现)----解决色问题:如何在一个物理空间很小的情况下让处理器能够对一个很大的地址空间寻址---引入虚拟内存的概念,程序的代码和数据可以保存在内存中或磁盘上;

  如何理解抽象类和纯虚方法?抽象类:可以被扩展但不能被直接实例化的类—virtual class, 纯虚方法:一种没有实体的方法原型。只有虚方法都有实体的时候,由抽象类扩展而来的类才能被例化;只要类中存在一个没有具体实现的纯虚函数,OOP规则就不允许例化这个类

  怎么理解回调func.验证的目标;创建一个不用做任何更改就能在所有测试环境中使用的验证环境;平台必须提供一个钩子,可以在不修改由原来类的情况下注入新的代码;如何定义使用一个callback func.?sv & uvm一致)1.预留回调函数2.定义callback(回调类extends 虚类)&回调函数3.例化及添加回调类实例(push_back(); push_front(); queue)

Randomize

   Background:明确验证平台需要解决的问题:将测试和dut分离;(激励空间大,无法用for 循环遍历)-----CRT---正确的输出结果保存为golden log file(标准日志文件)(产生方法:1.随机data flow2.RPNG seed)

  Rand & randc的理解;仿真器从枚举列表中取值;

  随机化应该和构造分开;assert检查随机化是否成功;

  dist权重分布两个操作符各自代表的意义--- :=  (值范围内的每一个值都是相同的) && :/ (权重要平均分布给值范围内的每一个值);也可以把权重设为0,从而删除某一个值;

  constraint的code构成?

  你是如何理解rand 和 inside(inside 产生值的集合,sv在值的集合中取随机值时各个值的选取机会相等)的?

  $表示取值范围里的最大、最小值;

  如何理解双向约束?(此处可以举例子说明—突出:声明性语句,并行执行) Slove…before..引导概率分布;

  Constraint_mode()打开和关闭约束进行控制产生随机的类型;rand_mode()控制变量是否进行随机化;

  知道内嵌约束吗?(增加额外的约束;with{}的作用域)

  Callback; pre_randomize()----非随机变量:上下限、权重ect. Post_randomize()---随机数的误差矫正;$random $urandom $urandom_range(上限参数,可选填的下限参数);指定范围内的平均分布;

  约束动态数组中元素的个数---size()/sum;

  如何理解随机序列?和randomize()相比有什么优点?随机序列的结构是怎样的?

  了解随机控制吗?结构如何?与randmize()相比有什么特点?

 

线程及通信

  Introduction: uvm 各个组件之间如何进行跳转?(涉及到的知识点:1.phase 跳转2.set_drain_time 3.communication) --握手机制(线程通信)--&-- raise_objection-drop_objection  ----sv调度器总是不停选择下一个要运行的线程;

  进程建立 一般在initial/always/fork块中建立..动态块:fork..join_none/ fork…join_any;

  怎么理解fork..join/join_none/join_any?(细节);

  如何终止单个线程和多个线程?

  Wait fork 和Disable停止单个线程和多个线程的用法/作用范围

 

Event

  谈谈对以下符号的认识:->/triggered;  wait(e2.triggered())~@e2; 两种方式的使用情况(如果事件已经发生,使用wait(.triggered)能够防止事件一直阻塞;;如果在循环中一般使用边沿敏感的阻塞@,保证在下次等待之前时间向前推进防止出现零延时循环);

  *Event的传递;

Semaphore

  对旗语的理解?基本操作(是否阻塞)?关于try_get()的返回值问题?等待优先权问题如何理解?

Mailbox

  Mailbox 的background;---想想uvm数据流sequence 怎么到driver的?1.提高code的复用性(避免直接到sequence的路径下去拿transaction;2.各自有各自的运行速率)

  Mailbox中只能放句柄,不能放对象;定容mailbox(缺省/n);

  简述Async 线程使用定容mailbox实现同步 的方法?----*

————————————————2021/3/21

SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 枚举类型 23 字符串 25 1.2 过程块和方法 27 initial和always 30 function逻辑电路 33 task时序电路 35 动态 静态变量 39 1.3 设计例化和连接 45 第二章 验证的方法 393 动态仿真 395 静态检查 397 虚拟模型 403 硬件加速 405 效能验证 408 性能验证 410 第三章 SV组件实现 99 3.1 接口 100 什么是interface 101 接口的优势 108 3.2 采样和数据驱动 112 竞争问题 113 接口中的时序块clocking 123 利于clocking的驱动 133 3.3 测试的开始和结束 136 仿真开始 139 program隐式结束 143 program显式结束 145 软件域program 147 3.4 调试方法 150 第四章 验证的计划 166 4.1 计划概述 166 4.2 计划的内容 173 4.3 计划的实现 185 4.4 计划的进程评估 194 第五章 验证的管理 277 6.1 验证的周期检查 277 6.2 管理三要素 291 6.3 验证的收敛 303 6.4 问题追踪 314 6.5 团队建设 321 6.6 验证的专业化 330 第六章 验证平台的结构 48 2.1 测试平台 49 2.2 硬件设计描述 55 MCDF接口描述 58 MCDF接口时序 62 MCDF寄存器描述 65 2.3 激励发生器 67 channel initiator 72 register initiator 73 2.4 监测器 74 2.5 比较器 81 2.6 验证结构 95 第七章 激励发生封装:类 209 5.1 概述 209 5.2 类的成员 233 5.3 类的继承 245 三种类型权限 protected/local/public 247 this super 253 成员覆盖 257 5.4 句柄的使用 263 5.5 包的使用 269 第八章 激励发生的随机化 340 7.1 随机约束和分布 340 权重分布 353 条件约束 355 7.2 约束块控制 358 7.3 随机函数 366 7.4 数组约束 373 7.5 随机控制 388 第九章 线程与通信 432 9.1 线程的使用 432 9.2 线程的控制 441 三个fork...join 443 等待衍生线程 451 停止线程disable 451 9.3 线程的通信 458 第十章 进程评估:覆盖率 495 10.1 覆盖率类型 495 10.2 功能覆盖策略 510 10.3 覆盖组 516 10.4 数据采样 524 10.5 覆盖选项 544 10.6 数据分析 550 第十一章 SV语言核心进阶 552 11.1 类型转换 552 11.2 虚方法 564 11.3 对象拷贝 575 11.4 回调函数 584 11.5 参数化的类 590 第十二章 UVM简介 392 8.2 UVM简介 414 8.3 UVM组件 420 8.4 UVM环境 425
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值