知识点汇集(二)-misc

1.培根加密:培根加密(Bacon’s Cipher)是一种替换式隐写密码,由英国哲学家、科学家弗朗西斯・培根(Francis Bacon)在 16 世纪末提出。它的核心特点是通过两种 “符号” 的组合来隐藏信息,且加密后的内容看起来像正常文本,因此兼具 “加密” 和 “隐写” 的双重特性 —— 不仅对信息加密,还隐藏了 “存在加密信息” 这一事实。

2.Base91 是一种用于将二进制数据转换为 ASCII 字符串的编码方案,与 Base64 类似,但效率更高。它通过使用 91 个可打印 ASCII 字符来表示数据,比 Base64 的 64 字符集更紧凑,编码后的数据长度通常比 Base64 短约 14%

3.兔子加密(Rabbit Cipher)是一种高性能流密码算法,由丹麦学者 Martin Boesgaard 等人于 2003 年提出。它通过生成伪随机密钥流与明文异或实现加密,兼具高速与安全性,被广泛应用于实时通信和资源受限设备。

4.Ook! 加密是一种基于二进制编码的简单替代密码,它通过将每个二进制位(0 或 1)映射为特定的三词短语组合来隐藏信息。这种加密方式的核心特点是使用类似自然语言的短语(如 “Ook.”、“Ook?”、“Ook!”)来表示二进制数据,使密文看起来像有意义的文本,从而增加隐蔽性。

5.Base92 编码是一种二进制到文本的编码方式,属于 Base 系列编码的一种,其设计目标是通过更高效的字符映射实现比 Base64 更紧凑的编码结果。其核心特征如下:
字符集:92 个可打印 ASCII 字符
Base92 使用 92 个可打印字符作为编码符号,字符集通常包含:
大写字母(A-Z,26 个)
小写字母(a-z,26 个)
数字(0-9,10 个)
部分标点符号(如!、#、$、%、&、'、(、)、*、+、,、-、.、/、:、;、<、=、>、?、@、[、]、^、_、```、{、|、}、~等,共 30 个左右,具体实现可能略有差异)

6.栅栏密码(Rail Fence Cipher)是一种古典置换密码,核心原理是通过改变明文字符的排列顺序(而非替换字符)来实现加密,因字符排列形似栅栏而得名。

7.一个 ZIP 文件由三个部分组成:
压缩源文件数据区 + 压缩源文件目录区(核心目录记录区) + 压缩源文件目录结束标志(目录记录尾部区)

1.压缩源文件数据区:
![Offset Bytes Description
在这里插入图片描述

2.压缩源文件目录区(也称核心目录记录区 ):
一条核心目录记录对应数据区中的一个 压缩文件记录
Offset Bytes Description

在这里插入图片描述
8.&# 开头的是html实体编码

9.图片的 CRC(循环冗余校验码,Cyclic Redundancy Check)是一种用于检测图片文件数据完整性的校验机制。它通过特定的算法对图片数据进行计算,生成一个唯一的校验码,用于验证数据在传输、存储或处理过程中是否发生错误或损坏。

10.一、ZIP文件组成部分

压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
00 00:扩展记录长度

压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量

压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
59 00 00 00:目录区尺寸大小
3E 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
二、识别真假加密
无加密

压缩源文件数据区的全局加密应当为 00 00

且压缩源文件目录区的全局方式位标记应当为 00 00
假加密

压缩源文件数据区的全局加密应当为 00 00
且压缩源文件目录区的全局方式位标记应当为 09 00
真加密

压缩源文件数据区的全局加密应当为 09 00
且压缩源文件目录区的全局方式位标记应当为 09 00

将下列内容进行知识点概括梳理、按要点总结并输出知识点思维导图:9.1覆盖率类型 功能覆盖率:功能覆盖率和设计意图是紧密相连的。用来衡量哪些设计特性已经被测试程序测试过的一个指标。 代码覆盖率:包括行覆盖率,路径覆盖率,翻转覆盖率,状态机覆盖率,衡量验证进展最简易的方式,仿真器自带代码覆盖率工具进行统计。 断言覆盖率:断言是用于一次性地或在某一段时间内核对两个设计信号之间关系的声明性代码。 9.2功能覆盖率策略 收集信息而非数据 只测量工你将会使用到的内容 测量的完备性 9.3 覆盖组 覆盖组与类相似,一次定义后便可以进行多次实例化。覆盖组包含覆盖点,选项,形式参数和可选触发。一个覆盖组必须被实例化后才可以用来收集数据。 9.3.1 在类中定义覆盖组 覆盖组可以在程序,模块或类里定义。如果覆盖组定义在类里,实例化时使用最初的名字即可,不用另起名字。 class Transactor; Transaction tr; mainbox mbx_in; covergroup CovPort; coverpoint tr.port; endgroup function new(mailbox mbx_in); CovPort = new(); this.mbx_in = mbx_in; endfunction task main; forever begin tr = mbx_in.get; ifc.cb.port <= tr.port; ifc.cb.data <= tr.data; CovPort.sample(); end endtask endclass AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 9.4 覆盖组的触发 功能覆盖率的两个主要部分是采样的数据和数据被采样的时刻。数据在准备好了以后,测试平台便会触发覆盖组,这个过程可以通过直接使用sample函数来完成。 如果希望在程序代码中显式地触发覆盖组,或者不存在可以标识采样时刻的信号或事件,或者在一个覆盖组里有多个实例需要独立触发,可以使用sample方法。如果想借助已有的事件或信号来触发覆盖组,可以在covergroup声明中使用阻塞语句。 9.4.1 使用回调函数进行采样 将功能覆盖组继承到测试平台中,比较好的方法是使用回调函数,此方法可以建立一个灵活的测试平台,不需要限定覆盖率的采样时间。 program automatic test; Environment env; initial begin Deiver_cbs_coverage dcc; env = new(); env.gen_Cfg(); env.build(); //实例化覆盖组实例 dcc = new(); env.drv.cbs.push_back(dcc); env.run(); env.wrap(); end endprogram class Driver_cbs_coverage extends Driver_cbs; covergroup CovPort; ... endgroup //回调函数中触发覆盖组采样 virtual task post_tx(Transaction tr); CovPort.sample(); endtask endclass AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 9.4.2 使用事件触发覆盖组 event trans_ready; covergroup CovPort @(trans_ready); coverpoint ifc.cb.port; endgroup AI生成项目 java 运行 1 2 3 4 与直接调用sample方法相比,使用事件触发的好处在于可以借助已有的事件进行触发覆盖组采样。 9.4.3 使用SV断言进行触发 如果已经有了一个诸如事件结束等有用事件的SVA,那就可以增加一个事件触发来唤醒覆盖组。 module mem(simple_bus sb); bit [7:0] data.addr; event write_event; //时序检查通过触发事件write_event cover property (@(posedge sb.clock) sb.write_ena == 1) -> write_event; endmodule program automatic test(simple_bus sb); //阻塞在事件write_event,直到事件被触发开始采样 covergroup Write_cg@($root.top.m1.write_event); coverpoint $root.top.m1.data; coverpoint $root.top.m1.addr; endgroup Write_cg wcg; initial begin wcg = new(); sb.write_ena <= 1; ... #10000 $finish; end endprogram AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 9.5 数据采样 当你在覆盖点上指定一个变量或表达式时,SV便会创建很多"仓(bin)"来记录每个数值被捕捉到的次数,这些仓是衡量功能覆盖率的基本单位。 9.5.1 个体仓和总体覆盖率 为了计算出一个点上的覆盖率,首先必须确定所有可能数值的个数,这也被成为域。一个仓中可能有一个或多个值,覆盖率就是采样值的数目除以与中仓的数目。如:一个3 bit变量覆盖点的域是0:7,正常情况下会除以8个仓,如果在仿真过程中有7个仓的值被采样到,那么报告会给出这个点的覆盖率是7/8或是87.5%。所有这些点组合在一起便构成了一个组的覆盖率,而所有组合组合在一起就可以给出整个仿真数据库的覆盖率。 9.5.2 自动创建仓 SV会自动为覆盖点创建仓。他通过被采样的表达式的域来确定可能跟值的范围。对于一个位宽N位的表达式,有2^N个可能值。对于枚举类型,其域就是署名值的个数。 9.5.3 限制自动创建仓的数目 覆盖组选项auto_bin_max指明了自动创建仓的最大数目,缺省值是64。 如果覆盖点变量或表达式的值域超过指定的最大值,SV会把值域范围平均分配给auto_bin_max个仓。如:一个16 bit变量有65536个可能值,所以64个bin中每一个都覆盖率1024个值(65536/64)。实际这种自动分配值域的方式不实用,因为不容易找到没有被覆盖的数值。实际多用明确定义仓的范围或者把仓的值数量限制在8或者16。 covergroup CovPort; coverpoint tr.point {options.auto_bin_max=2;} //分成2个仓 endgroup AI生成项目 java 运行 1 2 3 上例中只是八auto_bin_max作为一个覆盖点的选项来用,其实也可以把它用作整个组的选项。 covergroup CovPort; options.auto_bin_max = 2; //对覆盖点port和data均起作用 coverpoint tr.port; coverpoint tr.data; endgroup AI生成项目 java 运行 1 2 3 4 5 9.5.4 对表达式进行采样 如果需要对表达式进行采样,需要根据实际的运算调整最大的仓数。 class Transaction; rand bit [2:0] hdr_len; //[0:7] rand bit [3:0] payload_len; //[0:15] rand bit [3:0] kind; //[0:15] endclass Transaction tr; covergroup CovLen; len16: coverpoint {tr.hdr_len + tr.payload_len}; len32: coverpoint {tr.hdr_len + tr.payload_len + 5'b0}; endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 因其中的表达式进行了加法运算,所以值的可能范围为[0,22],因此再定义最大仓数量为2^3就不合适了,所以在len32中使用了5‘b0将位宽拓展到了5bit,SV会自动创建2^5(32)个仓来收集数据。 9.5.5 命名覆盖点的仓 可以对仓名指定明确的仓名,以增加覆盖率报告的准确度。SV会自动为枚举类型的仓命名。直接看例子。 covergroup CovKind; coverpoint tr.kind { bins zero = {0}; //一个名为zero的仓代表kind==0 bins lo = {[1:3], 5}; //一个名为lo的仓代表1:3和5 bins hi[] = {[8:$]}; //8个独立的仓:8...15,[]会为其内的值各建立一个仓 bins misc = default; //1个仓代表剩余的所有的值 } //注意这里不带分号 endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 当你定义仓时,实际上是把用来计算覆盖率的数值限制在你感兴趣的范围内,此时SV不再自动创建仓。计算功能覆盖率时只会使用你创建的仓。建议使用default仓标识语句来捕捉那些可能已经被忽略的数值。 使用$符号指定区间的上下界。 int i; covergroup range_cover; coverpoint i{ bins neg = {[$:-1]}; //下界 bins zero = {0}; bins pos={[1:$]}; //上界 } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9.5.6 条件覆盖率 可以使用关键字iff给覆盖点添加条件。应用场景常为在复位期间关闭覆盖以忽略掉一些杂散的触发。 covergroup CoverPort; //当reset==1时不要手机覆盖率数据 coverpoint port iff (!bus_if.reset); endgroup AI生成项目 java 运行 1 2 3 4 也可以使用start和stop函数来控制覆盖组里的各个独立的实例。 initial begin CovPort ck = new(); # 1ns ck.stop(); //复位期间停止收集覆盖率数据 bus_if.reset=1; # 100ns bus_if.reset=0; //复位结束 ck.start(); //收集覆盖率数据 ... end AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 9.5.7 为枚举类型创建仓 对于枚举类型,SV会为每个可能值创建一个仓。 typedef enum{INIT, DECODE, IDLE} fsmstate_e; fsmstate_e pstate, nstate; covgroup cg_fsm; coverpoint pstate; endgroup AI生成项目 java 运行 1 2 3 4 5 auto_bin_max在收集枚举类型的覆盖率时不起作用。 9.5.8 翻转覆盖率 covergroup CoverPort; coverpoint port{ bins t1=(0=>1), (0=>2), (0=>3); } endgroup AI生成项目 java 运行 1 2 3 4 5 使用范围表达式可以快速地确定多个转换过程。表达式(1,2 => 3,4)创建了四个翻转过程,分别是(1=>3), (1=>4), (2=>3), (2=>4)。 还可以确定任何长度的翻转次数。(0=>1=>2)(0=>1=>1=>2)(0=>1=>1=>1=>2)是不一样的。可以使用缩略形式来表示(0=>1=>1=>1=>2)(0=>1[*3]=>2)。1[*3:5]表示1重复3~5次。 9.5.9 在状态和翻转中使用通配符 使用关键字wildcard来创建多个状态或翻转。在表达式中,任何X,Z或?都会被当成0或1的通配符。 9.5.10 忽略数值 使用ignore_bins排除掉那些不用来计算功能覆盖率的数值。 bit [2:0] low_ports_0_5; //只使用数值0-5 covergroup CoverPort; coverpoint low_ports_0_5{ ignore_bins hi = {[6,7]}; //忽略最后的两个仓 } endgroup AI生成项目 java 运行 1 2 3 4 5 6 ignore_bins和auto_bin_max可以结合使用。 bit [2:0] low_ports_0_5; covergroup CoverPort; coverpoint low_port_0_5{ options.auto_bin_max = 4; //仓最大数量为4 ignore_bins hi = {[6:7]}; //忽略最后两个值 } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 上例中被忽略掉的仓hi不会被用于计算覆盖率。 9.5.11 不合法的仓 有些采样数值不仅应该被忽略,而且如果出现还应该报错。此情形最好在测试平台中使用代码进行检测,但也可以使用illegal_bins对仓进行标识。如果在覆盖组中发现了不合法的数值,那就是你得测试程序或者bin定义出了问题。 bit [2:0] low_ports_0_5; //只使用数值0-5 covergroup CoverPort; coverpoint low_ports_0_5{ illegal_bins hi = {[6, 7]}; //如果出现便报错 } endgroup AI生成项目 java 运行 1 2 3 4 5 6 9.5.12 状态机的覆盖率 使用代码覆盖率工具来自定提取状态寄存器,状态以及翻转轨迹,查看翻转覆盖率,状态机覆盖率。 9.6 交叉覆盖率 交叉覆盖率可以同时测量两个或者两个以上覆盖点的值。注当你想测量两个变量的交叉覆盖率,其中一个有N种取值,另一个由M种取值,SV需要NxM个交叉仓来存储所有的组合。 9.6.1 基本的交叉覆盖率 SV使用cross关键字来记录一个组里两个或两个以上覆盖点的组合值。cross语句只允许带覆盖点或者简单的变量名。如果你想使用表达式,层次化的名字或者对象中的变量。例如handle.variable,必须首先对coverpoint里的表达式使用标号,然后把这个标号用在cross语句里。 class Transaction; rand bit [3:0] kind; rand bit [2:0] port; endclass Transaction tr; covergroup CovPort; kind: coverpoint tr.kind; //创建覆盖点kind port: coverpoint tr.port; //创建覆盖点port cross kind, port; endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 9.6.2 对交叉覆盖仓进行标号 可以对各个覆盖点的仓进行单独标号,SV在创建交叉仓时就会使用这些名称。 covergroup CovPortKind; prot: coverpoint tr.port; { bins port[] = {[0:$]}; } kind: coverpoint tr.kind { bins zero = {0}; //仓zero代表0 bins lo = {[1:3]}; //仓lo代表1~3 bins hi[] = {[8:$]}; //8个独立的仓 bins misc = default; //一个仓代表剩余的所有值 } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 9.6.3 排除掉部分交叉覆盖仓 使用ignore_bins可以减少仓的数目。在交叉覆盖中,可以使用binsof和intersect分别指定覆盖点和数值集,这样可以使单个的ignore_bins结构清除掉很多个体仓。 covergroup Covport; port: coverpoint tr.port {bins port[] = {[0:$]};} kind: coverpoint tr.kind{ bins zero = {0}; bins lo = {[1:3]}; bins hi[] = {[8:$]}; bins misc = default; } cross kind, port{ //排除掉所有port为7和任意kind值组合的仓,因kind为4bit,所以此语句排除掉了16个仓 ignore_bins hi=binsof(port)intersect{7}; //忽略掉port为0和kind为9,10,11的组合,一共3个仓 ignore_bins md=binsof(port)intersect{0}&& binsof(kind)intersect{9:11}; //忽略掉kind定义中的lo包含的所有数值 ignore_bins lo=binsof(kind.lo); } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 注:binsof使用的是小括号(),而intersect指定的是一个范围,所以使用的是大括号{}。 9.6.4 从总体覆盖率的度量中排除掉部分覆盖点 一个组的总体覆盖率是基于所有简单覆盖点和交叉覆盖率的。如果只希望对一个coverpoint上的变量或表达式进行采样,而这个coverpoint将会被用到cross语句中,那么应该把他的权重设置成0,这样他就不会对总体的覆盖率造成影响。 covergroup CovPort; kind: coverpoint tr.kind { bins zero={0}; bins lo={[1:3]}; bins hi[]={[8:$]}; bins misc=default; option.weight=5; //在总体中所占的分量 } port: coverpoint tr.port { bins port[]={[0:$]; option.weight=0; //在总体中不占任何分量 } } cross kind, port {option.weight = 10;} //给予交叉更高的权重 endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 9.6.5 交叉覆盖的替代方法 假设有两个随机比特变量a和b,他们带着三种感兴趣的状态,{a==0, b==0}, {a==1, b==0}和{b==1}。 使用仓名的交叉覆盖率 class Transaction; rand bit a, b; endclass covergroup CrossBinNames; a: coverpoint tr.a { bins a0={0}; bins a1={1}; option.weight=0; } b: coverpoint tr.b { bins b0={0}; bins b1={1}; option.weight=0; } ab: cross a, b { bins a0b0=binsof(a.a0) && binsof(b.b0); bins a1b0=binsof(a.a1) && binsof(b.b0); bins ba=binsof(b.b1); } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 使用binsof的交叉覆盖率 class Transaction; rand bit a, b; endclass covergroup CrossBinsofIntersect; a: coverpoint tr.a { option.weight=0; } b: coverpoint tr.b { option.weight=0; } ab: cross a, b { bins a0b0=binsof(a)intersect{0} && binsof(b)intersect{0}; bins a1b0=binsof(a)intersect{1} && binsof(b)intersect{0}; bins b1=binsof(b)intersect{1}; } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 使用通配符来定义交叉覆盖率 covergroup CrossManual; ab: coverpoint{tr.a, tr.b} { bins a1b0 = {2'b00}; bins a1b0 = {2'b11}; wildcard bins b1 = {2'b?1}; } endgroup AI生成项目 java 运行 1 2 3 4 5 6 7 8 9.7 通用的覆盖组 SV允许创建一个通用的覆盖组,这样在对它进行实例化时可以指定一些独特的细节。SV不允许把覆盖组的触发参数传递给实例,作为变通,可以把覆盖组放到一个类里,然后把触发参数传递给构造函数。 9.7.1 通过数值传递覆盖组参数 bit [2:0] port; covergroup CoverPort(int mid); coverpoint port { bins lo = {[0:mid-1]}; bins hi = {[mid:$]}; } endgroup CoverPort cp; initial begin cp = new(5); //通过构造函数传递参数 end AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 9.7.2通过引用传递覆盖组参数 如果不仅想在调用构造函数时使用数值,还希望覆盖组在整个仿真过程中可以对数值进行采样,那么可以通过引用的方式来指定需要进行采样的变量。 bit [2:0] port_a, port_b; covergroup CoverPort(ref bit [2:0] port, input int mid); coverpoint port{ bins lo = {[0:mid-1]}; bins hi = {[mid:$]}; } endgroup CoverPort cpa, cpb; initial begin cpa = new(port_a, 4); cpb = new(port_b, 2); end AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 注:上例中,与任务和函数相似,覆盖组的参数在方向上遵循就近缺省的原则。如果mid遗漏了input的方向,则参数mid的方向就是ref。 9.8 覆盖选项 使用SV提供的选项为覆盖组指定额外的信息。选项分为两种类型,一种是实例选项,用于特定的覆盖组实例;一种是类型选项,用于所有的覆盖组实例。类似于类中的静态数据成员,选项可以放在覆盖组中并对组里的所有覆盖点有效,也可以防在单个覆盖点中以便实现更加精细的控制。 9.8.1 单个实例的覆盖率 如果测试平台对一个覆盖组进行了多次实例化,那么缺省情况下,SV会把所有实例的覆盖率数据汇集到一起。如果需要对每个实例单独查看覆盖率,则使用option的per_instance选项来指定单个实例的覆盖率。 covergroup CoverLength; coverpoint tr.length; option.per_instance = 1; //将此covergroup的每个实例单独计算覆盖率,不合并 endgroup AI生成项目 java 运行 1 2 3 4 注:选项per_instance只能放在覆盖组里,不能用于覆盖点和交叉点。 9.8.2 覆盖组的注释 可以在覆盖率报告中增加注释以使报告更易于分析。 //为覆盖组添加注释 covergroup CoverPort; type_option.comment = "Section 3.2.14 Port number"; coverpoint port; endgroup AI生成项目 java 运行 1 2 3 4 5 注:如果有多个实例,可以为每个实例加入单独的注释,前提是同时也是用了per-instance选项。 //为每个覆盖组实例指定注释 covergroup CoverPort(int lo, hi, string comment); option.comment=comment; option.per_instance=1; coverpoint port { bins range={[lo:hi]}; } endgroup ... CoverPort cp_lo = new(0,3,"Low port numbers"); CoverPort cp_hi = new(4,7,"High port numbers"); AI生成项目 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 9.8.3 覆盖阈值 使用option.at_least可以设置覆盖阈值,即一个仓被命中覆盖阈值后,此仓才被认为被覆盖到。 option.at_least如果定义咋覆盖组里,那么会用作所有的覆盖点。如果定义在一个点上,那么就只对该点有效。 9.8.4 打印空仓 缺省情况下,覆盖率报告只会给出带有采样值的仓。使用cross_num_print_missing选项可以让仿真和报告工具给出所有的仓,尤其是没有命中的仓。 covergroup CovPort; kind: coverpoint tr.kind; port: coverpoint tr.port; cross kind, port; option.cross_num_print_missing = 1000; endgroup AI生成项目 java 运行 1 2 3 4 5 6 9.8.5 覆盖率目标 一个覆盖组或覆盖点的目标是达到该组或该点被认为已经完全覆盖的水平。缺省情况下时100%的覆盖率。 covergroup CoverProt; coverpoint port; option.goal=90; //覆盖率目标设定为90% endgroup AI生成项目 java 运行 1 2 3 4 9.9 在仿真过程中进行覆盖率统计 在仿真进行的过程中,可以查询功能覆盖率的水平,允许你检查是否已经达到覆盖目标,并且可以对随机测试施加控制。 在全局层面上,使用getcoverage可以得到所有覆盖组的总覆盖率。get_coverage可以得到所有覆盖组的总覆盖率。get c ​ overage可以得到所有覆盖组的总覆盖率。get_coverage返回一个介于0~100的实数,该系统任务可以查询到所有的覆盖组。 可以使用get_coverage()和get_inst_coverage()函数来缩小测量范围。 CoverGroup::get_coverage(); //使用覆盖组名作用域调用 CgInst::get_coverage(); //使用覆盖组实例名作用域调用 cgInst.get_inst_coverage(); //通过实例获取实例的覆盖率 AI生成项目 java 运行 1 2 3 以上函数的用处是:在一个长的测试中检测覆盖率数据。如果覆盖率水平在给定数量的事务或周期内之后并无提高,那么这个测试就应该停止了。
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值