列举一下有趣的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];}


国产品牌之光,长城汽车借力自动化加速数字化转型
印度严格控制从中国进口的电子产品质量验证
怎样理解4G物联网模块的数据传输原理
数字图像处理入门基础知识(步骤)
借助隔离技术将太阳能光伏发电系统整合于智能电网
列举一下有趣的Systemverilog数组约束示例
用我们的UART到Wi-Fi桥接为现有硬件添加连通性
LGD与三星建供货关系或压缩大尺寸电视面板资源
我国首款自主标准自主协议RFID芯片隆重登场
米尔科技MYD-AM335X-Y开发板 介绍
PPEC项目简讯:风光互补充电控制器
Silicon Labs发布Thread 1.1兼容软件,加速推动市场采用Thread协议
智能家居将会很快普及吗
什么是蝶型封装
电动车发动机再制造和再利用技术的研究
技术精英与蓝牙产品创新研发者齐聚Bluetooth世界大会
电容器按照功能分类的详细介绍(三)
狂遭差评的《红警OL》暴露痛点 玩家“红警”情怀被湮灭
华为鸿蒙系统怎么升级?
电力公司遇上物联网技术会有什么故事发生