朋友發給我的芯片驗證筆試題,覺得很有意思,和大家分享一下。
面試題目
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
他說不行,要確保隨機成功…
</