首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
1
篇与
的结果
2025-06-03
sv中的功能覆盖率常用用法
下面是ieee文档自我提取的一些用法,这一篇的用法,更加全面:covergroup常用用法;covergroup cg_0; cp_name coverpoint signal_name{ bins bin_name0 = {[0:63],65};//两个bin, [0:63],65, 只要有里面的值收到了,就全覆盖 bins bin_name1[] = { [127:150],[148:191] }; // 65个bin,即[]中的每一个值都是一个bin; bins bin_name2 = { [1000:$] };//$表示结尾,即最大值; bins bin_name3[] = default;//其他的所有值,都划分到other, 也是要全部都收到; } endgroupbins with的用法; cp_name: coverpoint signal_name{ bins bin_name[] = {[0:255]} with (item % 3 == 0);//0-255中3的余数为0的部分,构成bin; } 也可以将with的内容封装成function; coverpoint b { bins func[] = b with (myfunc(item)); }wildcard; wildcard bins g12_15 = { 4'b11?? };//只要在1100~1111间的任何一个踩到了,就收到了; wildcard bins g12_15_array[] = { 4'b11?? };//加了[], 会给每一个符合条件的都产生一个binignore_bins; 当没有明确定义某一个coverpoint的bins时,EDA仿真工具会生成和收集所有可能的bins,当其中某些bins在RTL中永远都不可能覆盖到,可以使用ignore_bins进行忽略covergroup cg23; coverpoint a { ignore_bins ignore_vals = {7,8};//不收集7,8; ignore_bins ignore_trans = (1=>3=>5);//不收集1,3,5这个序列; } endgroupillegal_bins; 某个值不可能收到,收到后报错;起到类似checker的作用;covergroup cg3; coverpoint b { illegal_bins bad_vals = {1,2,3}; illegal_bins bad_trans = (4=>5=>6); } endgroupcross;bit [31:0] a_var; bit [3:0] b_var; covergroup cov3 @(posedge clk); A: coverpoint a_var { bins yy[] = { [0:9] }; } CC: cross b_var, A;//两个coverpoint进行cross; endgroupcross中指定bins;int i,j; covergroup ct; coverpoint i { bins i[] = { [0:1] }; } coverpoint j { bins j[] = { [0:1] }; } x1: cross i,j; x2: cross i,j { ignore_bins i_zero = binsof(i) intersect { 0 };//i中不包含0; //binsof(x) intersect (y);//x的取值中,只收取为y的值; } endgroupbinsof 与 && / ||的组合;covergroup address_cov () @ (posedge ce); ADDRESS : coverpoint addr { bins addr0 = {0}; bins addr1 = {1}; } CMD : coverpoint cmd { bins READ = {0}; bins WRITE = {1}; bins IDLE = {2}; } CRS_USER_ADDR_CMD : cross ADDRESS, CMD { bins USER_ADDR0_READ = binsof(CMD) intersect {0};//默认的bins本来应该是2*3=6个,但是这里只定义了两个bins <addr0,READ> <addr1,READ> bins u2 = binsof(ADDRESS.addr0) || binsof(CMD.READ);// bins 数目为4,包括<addr0,READ>,<addr0,WRITE>,<addr0,IDLE>,<addr1,READ> bins u3 = binsof(ADDRESS.addr0) && binsof(CMD.READ);// bins 数目为1,包括<addr0,READ> } CRS_AUTO_ADDR_CMD : cross ADDRESS, CMD { ignore_bins AUTO_ADDR_READ = binsof(CMD) intersect {0}; ignore_bins AUTO_ADDR_WRITE = binsof(CMD) intersect {1} && binsof(ADDRESS) intersect{0}; }(原文链接:https://blog.csdn.net/bleauchat/article/details/90445713)matches; 感觉上像是一个下线; bins apple = X with (a+b < 257) matches 127;// 127~257? 带参数的covergroup;module mod_m; logic [31:0] a, b; covergroup cg(int cg_lim); coverpoint a; coverpoint b; aXb : cross a, b { function CrossQueueType myFunc1(int f_lim); for (int i = 0; i < f_lim; ++i) myFunc1.push_back('{i,i}); endfunction bins one = myFunc1(cg_lim); bins two = myFunc2(cg_lim); function CrossQueueType myFunc2(logic [31:0] f_lim); for (logic [31:0] i = 0; i < f_lim; ++i) myFunc2.push_back('{2*i,2*i}); endfunction } endgroup cg cg_inst = new(3);//每一个例化的时候再指定参数; endmodule结果如下:cg_inst.aXb.one = <0.0> , <1.1>,<2.2>cg_inst.aXb.two = <0.0>,<2.2>,<4.4>,instance;每个覆盖率例化的时候,是所有的合在一起收集,还是每个例化的地方,单独收集对应的覆盖率; 每个覆盖率单独例化的时候,可以指定最终呈现的名字;covergroup g1 (int w, string instComment) @(posedge clk) ; // track coverage information for each instance of g1 in addition // to the cumulative coverage information for covergroup type g1 option.per_instance = 1; // comment for each instance of this covergroup option.comment = instComment;一些基本的选项,通常不使用; //auto_bin_max, cross_auto_bin_max, goal, weight等等; //参考如下:(221条消息) [SV]SystemVerilog Coverage Options用法總結及案例_元直数字电路验证的博客-CSDN博客_coveragegroup option也可以参考table 19-2;设置采样时刻;一般来讲,是不指定采样时刻,然后再rm中比对通过后,手动sample, 可以保证采集数据的合理性和正确性;也可以指定拍拍采集;covergroup g1 (int w, string instComment) @(posedge clk) ;数据边界描述;[ $ : value ] => The set of values less than or equal to value[ value : $ ] => The set of values greater or equal to value————————————————版权声明:本文为CSDN博主「newyork major」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/zhangshangjie1/article/details/129121286
2025年06月03日
29 阅读
0 评论
0 点赞