【问题标题】:random number array in VerilogVerilog中的随机数数组
【发布时间】:2011-05-17 06:29:37
【问题描述】:

我想测试 Verilog 模块的所有可能输入组合。我已经能够通过构建一个带有嵌套 for 循环的数组来生成这些输入。但是我想以随机顺序遍历数组。如何做到这一点,或者有没有办法生成一个包含所有可能输入的数组,这些输入已经是随机顺序的?

【问题讨论】:

  • 我不确定我是否理解。您说您“不想以随机顺序遍历数组”-但嵌套的 for 循环不会是随机的?另外,你能解释一下“生成一个包含所有可能输入的数组,这些输入已经是随机顺序”的意思吗?
  • 如果您的目标是遍历输入中所有可能的有效组合,而不执行相当于 1、2、3、4、5 等的操作,但也不重复输入?跨度>
  • 也许您正在寻找shuffle algorithm
  • @Andy,你能把它贴在答案中,这样我就可以投票了吗?我以前从未听说过这种算法,但我可以立即看到它们在验证设置中的用途。我想知道 SystemVerilog 是否将这类事情作为其受约束的随机内容的一部分。
  • @Marty:SystemVerilog 的数组有一个shuffle 方法。

标签: arrays random verilog system-verilog


【解决方案1】:

如果您想重新排列测试用例列表,例如洗牌,可以使用一种称为Fisher–Yates shuffle 的算法来执行此操作。或者,如果您使用的是 SystemVerilog,toolic 会指出数组有一个内置的 shuffle 方法。

【讨论】:

  • 当然,我们都在假设神经漫游者想要什么。无论如何,对这个解决方案的一个警告是,如果有大量有效刺激(例如,在 ALU 中添加两个 32 位整数),那么 shuffle 方法将需要在测试开始时消耗所有内存。如果改为使用单射哈希函数 (en.wikipedia.org/wiki/Perfect_hash_function),则不会出现零时间内存分配问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多