0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一些有趣的数组相关的SystemVerilog约束

芯片验证工程师 来源:芯片验证工程师 2023-03-08 13:12 次阅读

我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的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

    文章

    1325

    浏览量

    109298
  • System
    +关注

    关注

    0

    文章

    161

    浏览量

    36567
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12637
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25593

原文标题:一些有趣的数组相关的SystemVerilog 约束

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Foreach对Associative Array的constraint约束问题记录分享

    systemverilog constraint中的foreach可以对数组进行遍历和约束,常用于普通数组,队列或者动态数组
    的头像 发表于 08-21 09:31 856次阅读
    Foreach对Associative Array的constraint<b class='flag-5'>约束</b>问题记录分享

    一些关于电脑的相关知识

    一些关于电脑的相关知识
    发表于 06-01 16:24

    systemverilog学习教程

    systemverilog一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    Systemverilog个牛人总结

    Systemverilog数据类型l 合并数组和非合并数组1)合并数组:存储方式是连续的,中间没有闲置空间。例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个
    发表于 08-27 14:50

    SystemVerilog中的操作方法

    SystemVerilog提供了几个内置方法来支持数组搜索、排序等功能。
    的头像 发表于 10-31 10:10 1832次阅读

    SystemVerilog中可以嵌套的数据结构

    SystemVerilog中除了数组、队列和关联数组等数据结构,这些数据结构还可以嵌套。
    的头像 发表于 11-03 09:59 1221次阅读

    简述SystemVerilog的随机约束方法

    上一篇文章介绍了SystemVerilog的各种随机化方法,本文将在其基础上引入SystemVerilog的随机约束方法(constraints)。通过使用随机约束,我们可以将随机限制
    的头像 发表于 01-21 17:03 1587次阅读

    网络和变量的未压缩数组

    SystemVerilog有两种类型的数组:压缩数组和非压缩数组。压缩数组是连续存储的位的集合,通常称为向量。非压缩
    的头像 发表于 02-09 14:50 491次阅读
    网络和变量的未压缩<b class='flag-5'>数组</b>

    使用SystemVerilog解决数组问题

    数独是一种非常流行的游戏,数独本质上也是一个约束问题,所以我们可以让SystemVerilog约束求解器来帮助我们解决。 约束求解器的精妙之处就是,我们只描述
    的头像 发表于 03-08 14:06 972次阅读

    SystemVerilog中“软约束”与“硬约束”的应用示例

    示例中采用的是“硬约束”,因为定义在类中的约束与随机时指定的内嵌约束“矛盾”,所以导致约束解析器解析随机失败,即“硬约束”要求所有
    发表于 03-15 16:56 2780次阅读

    列举一下有趣Systemverilog数组约束示例

    上面是最先想到的写法,但是会报错,因为SV约束语法不允许使用size()或任何其他随机值作为索引。
    的头像 发表于 05-04 17:35 548次阅读

    一些有趣数组相关SystemVerilog约束

    我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的**Systemverilog数组约束
    的头像 发表于 05-30 11:13 449次阅读

    带你了解SystemVerilog中的关联数组

    SystemVerilog中,我们知道可以使用动态数组实现数组元素个数的动态分配,即随用随分
    的头像 发表于 06-09 09:46 4680次阅读
    带你了解<b class='flag-5'>SystemVerilog</b>中的关联<b class='flag-5'>数组</b>

    SystemVerilog的随机约束方法

    上一篇文章《暗藏玄机的SV随机化》介绍了SystemVerilog的各种随机化方法,本文将在其基础上引入SystemVerilog的随机约束方法(constraints)。通过使用随机约束
    的头像 发表于 09-24 12:15 468次阅读

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的头像 发表于 11-22 09:17 314次阅读
    分享<b class='flag-5'>一些</b><b class='flag-5'>SystemVerilog</b>的coding  guideline