网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-05-30 11:13

人气:

作者:admin

标签: 相关  有趣  一些    数组 

导读:我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的**Systemverilog数组约束**示例...

我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的Systemverilog数组约束示例:

1、如何约束动态数组的最后一个元素为特定值。(事先不知道数组的大小)

rand int some_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,则不行。

packed array约束:

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;
}

unpacked array约束:

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];
}
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信