摘要:资料来源 (1) 硅芯思见:【125】clocking block中的输入偏差和输出偏差 (qq.com) (2) sv绿皮书; 1.输入偏差与输出偏差 (1) system verilog的时钟块机制(clocking block)可以对指定信号进行基于特定时钟的同步处理,时钟块中的任何信号都将根
阅读全文
摘要:资料来源 (1)sv绿皮书; (2)硅芯思见:【127】semaphore原来还有这一面 (qq.com) 1.旗语semphore简介 (1)semaphore是SystemVerilog中的内建类,主要用于实现多进程对于共享资源的协同访问控制。 (2)semaphore的基本操作:new(),g
阅读全文
摘要:1.实例选项 (1)用于特定的覆盖组实例; (2)per-instance只能放在覆盖组中,不能用于覆盖点或交叉点; (3)使用per_instance选项与comment选项可以为每个covergroup实例加入单独的注释; 1 class C1; 2 bit[7:0] x; 3 4 coverg
阅读全文
摘要:1.通过数值传递覆盖组参数 2.通过引用传递覆盖组参数 1 covergroup cg (ref int ra, input int low, int high) @(posedge clk); 2 coverpoint ra //采样通过引用传递的变量 3 { 4 bins good={[low:
阅读全文
摘要:1.交叉覆盖的替代方式 (1)随着交叉覆盖的定义越来越精细,可能需要花费较多的时间来指定哪些仓应该使用或者被忽略掉; 可以通过给覆盖点上的仓命名,然后使用这些仓来收集交叉覆盖率数据; (2)示例 (2.1)使用仓名与binsof指定交叉覆盖的数值 (2.2)使用binsof与intersect指定交
阅读全文
摘要:1.排除掉部分交叉覆盖仓 (1)ignore_bins+binsof+intersect可以排除掉许多交叉覆盖仓;其中,binsof用于指定覆盖点,intersect用于指定数值集; (2)示例 2.从总体覆盖率的度量中排除掉部分覆盖点 (1)一个覆盖阻的总体覆盖率是基于所有简单覆盖点和交叉覆盖率的
阅读全文
摘要:1.交叉覆盖率及示例 (1)覆盖点记录单个变量或表达式的观测值,交叉覆盖率则同时测量两个或两个以上覆盖点的值; (2)system verilog中的cross结构可以用来记录一个覆盖组内两个或两个以上覆盖点的组合值; cross语句只允许带覆盖点或者简单的变量名; (3)示例 2.对交叉覆盖仓进行
阅读全文
摘要:1.忽略数值或翻转 (1)在某些覆盖点上,可能始终得不到全部可能值,对于该问题可以使用两种方法: 方法一:明确定义仓来涵盖所有的期望值; 方法二:让system verilog自动创建仓,然后使用ignore_bins排除掉那些不用来计算功能覆盖率的数值; (2)ignore_bins示例: 1 示
阅读全文
摘要:1.条件覆盖率 (1) 可以使用关键字iff给覆盖点添加条件,这种做法最常用于在复位期间关闭覆盖以忽略一些杂散的触发; 注:也可以使用covergroup_name.stop()与covergroup.start()进行covergroup的采样; (2) 可以使用start和stop函数控制覆盖组
阅读全文
摘要:1.对表达式进行采样 注:覆盖点可以对变量或表达式采样; (1) 注意哑元变量的使用; (2) 由于值域不是2的幂,所以最好使用自定义的仓,如果使用自动生成的仓,可能需要添加ignore_bins; 2.用户自定义的仓 3.命名覆盖点的仓
阅读全文
摘要:注1:每一个覆盖点(coverage point)都包含一系列bins,用于采样值或者值的翻转; 采样值的bins称作state bins,采样值的翻转的bins称作transition bins; 1.自动创建仓 (1) system verilog会自动为覆盖点创建仓。 2.限制自动创建仓的数目
阅读全文
摘要:1.词法变量my (1)词法变量可使用在任何块内,而不仅限于子程序的语句块,它可以再if,while或foreach的语句块中使用; (2)所有新变量的值一开始都是空的,标量被设为undef,数组被设为空列表; 2.持久性私有变量state (1)在子程序中使用my操作符创建私有变量,但每次调用这个
阅读全文
摘要:1.子程序中的私有变量 (1)默认情况下,perl中所有变量都是全局变量,但是可以通过my操作符创建私有的词法变量; 这些变量的作用范围被圈定在语句块中,它们是该语句块内的私有变量; (2)Perl允许省略语句块中最后一个分号,但是通常在程序代码简单到整个语句块只有一行时,才有必要省略分号; 2.更
阅读全文
摘要:1.子程序的返回值与return操作符 (1)子程序被调用时,存在返回值,但返回值不一定会被使用; (2)所有的子程序都有一个返回值-子程序并没有"有返回值"和"没有返回值"之分. (3)子程序中如果没有使用return显式提供返回值,那么子程序中最后一次运算的结果,会被自动当成子程序的返回值; (
阅读全文
摘要:1.定义子程序 (1)定义子程序,可使用关键字sub,子程序名以及经过缩进的代码块,如下图所示; (2)子程序可以在程序的任意位置定义,可以放在文件的开头,也可以放在文件的结尾。 (3)可以在子程序中使用任何全局变量. 2.调用子程序 (1) 可以再任意表达式中使用子程序名(前面加上&号)来调用它;
阅读全文
摘要:1.使用反斜杠对散列取引用; 2.对哈希引用解引用; (1) 按照没有使用引用的方式编写读取散列中数据的语法,然后用一对大括号包围着的引用名称替换散列名称;
阅读全文
摘要:1.下图中,数组@gilligan的引用可以通过${$all_with_names[2]}[1]获取; 数组@gilligan的第一个元素gilligan[0]则可以通过${${$all_with_names[2]}[1]}[0]来获取; 2.在编写${DUMMY}[$y]的任何地方,都可以使用DU
阅读全文
摘要:1.@all_with_names数组中有三个元素,其中的每一个元素都是数组引用,并且每个数组引用包含两个元素:人员名称和相应的初始供应列表. (1) 如果以@{$all_with_names[2]}的方式进行解引用操作,就将得到一个拥有两个元素的数组gilligan_with_name和另外一个数
阅读全文
摘要:1.通过数组引用可以解决过多复制的问题,通过数组引用也可以修改初始数组。 2.下图展示的子程序中,将扫描过程中找到的任何丢失的项放入到@missing数组中,然后对$items数组引用进行解引用操作,访问初始化数组,添加来自于@missing数组的元素. 如果没有按引用传递,就需要修改数据的本地副本
阅读全文
摘要:1.对数组取引用 (1)反斜杠(\)可以作为取引用操作符,将它放到数组名称之前时,如\@skipper,将得到该数组的引用; (2)数组的引用与指针类似,但是引用指向整个数组,而不是数组本身的第一个元素的地址; (3)引用适用于所有适合标量的场景,它能够作为数组或散列的元素,或者放入普通标量变量中,
阅读全文
摘要:1.引用(对比按值传递与按引用传递) (1) 引用是处理复杂数据结构、面向对象编程和精美子例程的基础。 (2) perl的标量变量保存单个值,数组保存一个有序的标量列表,散列保存一个无需的标量集合作为值,字符串作为键.但是这三种数据类型都不适合用于表示复杂的数据关系,而引用可以。 2.场景-在多个数
阅读全文
摘要:资料来源 (1) 硅芯思见:【94】SVA中的multi-clock (qq.com) (2) 硅芯思见:【90】SVA中的序列表达式操作符 (qq.com) 1.SVA中的多时钟定义 (1) SVA允许序列或者属性使用多个时钟定义来采样独立的信号或者子序列; (2) SVA会自动地同步不同信号或者
阅读全文
摘要:参考资料 (1) 详解I2C总线协议 (qq.com)--公众号IC大家谈 【已阅】 (2) 通信协议 IIC 与 SPI 最全对比 (qq.com) (3) uvm_agents/src/i2c at master · dovstamler/uvm_agents · GitHub (4) I2C
阅读全文