我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的Systemverilog数组约束示例:
1、如何约束动态数组的最后一个元素为特定值。(事先不知道数组的大小)
randintsome_dynamic_array[]; constraint last_elem_c { some_dynamic_array[some_dynamic_array.size() - 1] == 5; }上面是最先想到的写法,但是会报错,因为SV约束语法不允许使用size()或任何其他随机值作为索引。所以只能修改代码:
constraint last_elem_c { foreach(some_dynamic_array[i]) if (i == some_dynamic_array.size() - 1) some_dynamic_array[i] == 5; }2、约束数组中必须包含一个特定的值2。
constraint contains_c { 2 inside { some_dynamic_array }; }相反,如果我们约束数组中不包含值2呢?
constraint not_contains_c { !(2 inside { some_dynamic_array }); }3、约束数组中每个值都是唯一的。
constraint all_elems_unique_c { unique { some_dynamic_array }; }这个约束非常简短高效,等价于下面这段冗长的代码:
constraint all_elems_unique_c { foreach (some_dynamic_array[i]) foreach (some_dynamic_array[j]) if (i != j) some_dynamic_array[i] != some_dynamic_array[j]; }上面这段代码虽然冗长,确是我们开发数组约束的一个通用框架。 4、约束2个数组相等。如果数组是packed可以直接使用==,如果数组是unpacked,则不行。 packedarray约束:
rand bit[9:0][3:0] some_packed_array, some_other_packed_array; constraint packed_arrays_equal_c { some_packed_array == some_other_packed_array; }unpackedarray约束:
rand bit[3:0] some_unpacked_array[10], some_other_unpacked_array[10]; constraint unpacked_arrays_equal_c { foreach (some_other_unpacked_array[i]) some_other_unpacked_array[i] == some_unpacked_array[i]; }
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Verilog
+关注
关注
28文章
1343浏览量
109973 -
System
+关注
关注
0文章
165浏览量
36878 -
代码
+关注
关注
30文章
4741浏览量
68326 -
约束
+关注
关注
0文章
82浏览量
12717 -
数组
+关注
关注
1文章
414浏览量
25905
原文标题:一些有趣的数组相关的SystemVerilog 约束
文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
Foreach对Associative Array的constraint约束问题记录分享
systemverilog constraint中的foreach可以对数组进行遍历和约束,常用于普通数组,队列或者动态数组。
用几个深度学习框架串起来这些年历史上的一些有趣的插曲
清明节这几天有些时间写了这篇文章,从我的视角,用几个深度学习框架串起来这些年历史上的一些有趣的插曲,和技术背后的一些故事,免得宝贵的记忆随着时间在脑中淡去。
简述SystemVerilog的随机约束方法
上一篇文章介绍了SystemVerilog的各种随机化方法,本文将在其基础上引入SystemVerilog的随机约束方法(constraints)。通过使用随机
使用SystemVerilog解决数组问题
数独是一种非常流行的游戏,数独本质上也是一个约束问题,所以我们可以让SystemVerilog的约束求解器来帮助我们解决。
SystemVerilog中“软约束”与“硬约束”的应用示例
示例中采用的是“硬约束”,因为定义在类中的约束与随机时指定的内嵌约束“矛盾”,所以导致约束解析器解析随机失败,即“硬约束”要求所有
发表于 03-15 16:56
•4562次阅读
列举一下有趣的Systemverilog数组约束示例
上面是最先想到的写法,但是会报错,因为SV约束语法不允许使用size()或任何其他随机值作为索引。
SystemVerilog的随机约束方法
上一篇文章《暗藏玄机的SV随机化》介绍了SystemVerilog的各种随机化方法,本文将在其基础上引入SystemVerilog的随机约束方法(constraints)。通过使用随机
评论