【问题标题】:How to implement Summation equation in SystemVerilog constraints?如何在 SystemVerilog 约束中实现求和方程?
【发布时间】:2017-08-15 06:26:17
【问题描述】:

c=∑(a[i]*b[i]) 考虑两个数组 a 和 b。两个数组 a 和 b 的 MAC 运算结果 c 应该小于 1024。使用 SystemVerilog 约束来实现上述条件。两个数组的大小可以从 1 到 n,每个数组元素存储 1 个字节。我们必须随机化两个数组。

【问题讨论】:

  • 这是作业题还是面试题?
  • 这是一道面试题。
  • 那我给你个提示。在约束中使用sum() with() 方法。
  • 感谢戴夫的提示。我最初的猜测是使用相同的方法。但是我无法编写一种方法来随机化具有给定约束的数组的每个元素。我应该声明一个函数来实现求和方程并在约束块内调用该函数吗?
  • 您可以使用一种 sum() 方法进行约束。任何更多的提示都会给出解决方案。

标签: system-verilog


【解决方案1】:

现在我已经在聊天中看到了你的解决方案,我会告诉你我的想法

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

【讨论】:

  • 我使用上述约束得到以下结果: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
  • 代码:rand logic [7:0] a [];兰德逻辑 [7:0] b [];兰德逻辑[20:0] c;约束 const1 {a.size
  • 你快溢出来了。试试with (int'(a[item.index]) * int'(b[item.index]))
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多