我有一个包含 10 个元素的数组。如何以随机顺序输出这些而不重复。
问问题
752 次
4 回答
1
对于测试平台,OSVVM 的 RandomPkg 使这很容易。
library osvvm ;
use osvvm.RandomPkg.all ;
...
RandProc : process
variable RV : RandomPtype ;
variable IndexVals : integer_vector(0 to 9) := (others => integer'low) ;
begin
for i in IndexVals'range loop
-- min max ExcludeList
IndexVals(i) := RV.RandInt( 0, 9, IndexVals) ;
end loop ;
如果连续随机生成的 10 个元素的排列需要与前一个不同,则问题会变得更加有趣。为此,我将使用覆盖模型。虽然,10 大约是我想要这样做的最大排列数,尽管有 n! 排列和覆盖模型将需要存储每个生成的排列。
于 2013-09-27T16:43:55.883 回答
1
对于测试平台,使用OSVVM随机库为您的数组生成随机索引。或者你可以随机播放它(使用Fischer-Yates 算法和随机库)。
如果需要合成,则将数组放入 RAM 块中,并生成随机地址(例如使用线性反馈移位寄存器)。
请注意,这些都不是正确随机的,只有伪随机。如果您正在尝试任何远程加密,它们不太可能是您想要的。
于 2013-09-27T14:21:00.353 回答
0
接近随机性的一个好方法是使用线性反馈移位寄存器。
于 2013-09-27T12:57:58.247 回答
0
如果这仅用于模拟,您可以使用 ieee.math_real 中的统一过程来获取 0 到 1 之间的实数,并将其缩放到数组的索引范围。
于 2013-09-27T14:11:41.463 回答