我有一个包含10个元素的数组。如何在不重复的情况下以随机顺序输出这些内容。
发布于 2013-09-27 14:21:00
对于测试平台,使用OSVVM随机库在数组中生成随机索引。或者您可以对其进行混洗(结合使用Fischer-Yates Algorithm和随机库)。
如果需要综合,则将数组放入RAM块中,并生成随机地址(例如,使用线性反馈移位寄存器)。
请注意,这些都不是完全随机的,只有伪随机的。如果您正在尝试任何远程加密,它们不太可能是您想要的。
发布于 2013-09-27 16:43:56
对于测试平台,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-27 12:57:58
接近随机性的一个好方法是使用线性反馈移位寄存器。
https://stackoverflow.com/questions/19047989
复制相似问题