【芯片验证】面试题·对深度为60的数组进行复杂约束的技巧

朋友发给我的芯片验证笔试题,觉得很有意思,和大家分享一下。

面试题目

class A中一个长度为60的随机数组rand int arr[60],如何写约束使得:

1.每个元素的值都在(0,100]之间,且互不相等;

2.最少有三个元素满足勾股数要求,比如数组中包含3,4,5三个点;

请以解约束最快的角度,完成class A的简单代码示意。

解题思路

原始代码其实就是这样嘛:

class A;

  rand int arr[60];
  constraint arr_cons{};

endclass: A

那现在面临两个约束要求,看上去都是比较复杂的(第一个是不是有类似的随机函数可以做?太久不做验证了记不住了)。所以楞写约束肯定是不行的,或者像耿直的朋友这样做必然也不好:

我当时回答

先随, 然后post randomize的时候判断,没有就fatal

他说不行,要确保随机成功…

你可能感兴趣的:(尼德兰的喵全内容专栏,芯片前端面经,算法,面试,职场和发展,芯片,IC,芯片验证)