2017-08-14 174 views
-1

c =Σ(a [i] * b [i])考虑两个数组a和b。两个数组a和b的MAC操作的结果c应小于1024.使用SystemVerilog约束来实现以上条件。两个数组的大小可以从1到n,每个数组元素存储1个字节。我们必须随机化这两个数组。如何在SystemVerilog约束中实现求和方程?

+1

这是一个家庭作业问题或一个面试问题? –

+0

这是一个面试问题。 – Rottenengg

+1

然后我会给你一个提示。在约束中使用'sum()with()'方法。 –

回答

3

现在,我已经看到了聊天解决方案,我给你我在想什么

constraint c_sum { c == a.sum() with (a[item.index] * b[item.index]); c < 1024;} 
+0

我使用上述约束获得以下结果: c = 53 a = 225 b = 188 c = 53 a = 4 b = 217 c = 53 a = 210 b = 94 c = 53 a = 110 b = 181 c = 53 a = 99 b = 9 c = 53 a = 254 b = 36 c = 53 a = 252 b = 177 c = 53 a = 222 b = 33 c = 53 a = 37 b = 103 c = 53 a = 114 b = 15 c = 53 a = 239 b = 166 – Rottenengg

+0

代码:rand logic [7:0] a []; rand逻辑[7:0] b []; rand逻辑[20:0] c; 约束CONST1 {a.size <30;} 约束CONST2 {a.size == b.size;} 约束c_sum { Ç== a.sum()具有:(a [item.index] * b [item.index]); c <1024;} – Rottenengg

+0

你会溢出。 (int [(a [item.index])* int'(b [item.index])) –