我有一个包含10个元素的数组。如何以随机顺序输出这些而不重复。
答案 0 :(得分:1)
对于测试平台,使用OSVVM随机库为数组生成随机索引。或者你可以随意改变它(使用与随机库一致的Fischer-Yates Algorithm)。
如果需要合成,则将数组放入RAM块,然后生成随机地址(例如使用线性反馈移位寄存器)。
请注意,这些都不是正确随机的,只是伪随机的。如果你正在尝试任何远程加密,它们不太可能是你想要的。
答案 1 :(得分: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!排列和覆盖模型将需要存储每个生成的排列。
答案 2 :(得分:0)
接近随机性的好方法是使用线性反馈移位寄存器。
答案 3 :(得分:0)
如果这仅用于模拟,您可以使用ieee.math_real中的统一过程来获得0到1之间的实数,并将其缩放到数组的索引范围。