如何用VHDL实现数组元素的随机顺序输出

如何用VHDL实现数组元素的随机顺序输出,vhdl,Vhdl,我有一个10个元素的数组。如何在不重复的情况下以随机顺序输出这些内容 接近随机性的一个好方法是使用线性反馈移位寄存器 如果这仅用于模拟,您可以使用ieee.math_real中的统一过程来获取介于0和1之间的实数,并将其缩放到阵列的索引范围。对于测试台,使用随机库在阵列中生成随机索引。或者您可以洗牌(使用与随机库一致的) 如果需要合成,则将阵列放入RAM块,并生成随机地址(例如使用线性反馈移位寄存器) 请注意,这些都不是完全随机的,只是伪随机的。如果您正在尝试任何远程加密,它们不太可能是您想要的

我有一个10个元素的数组。如何在不重复的情况下以随机顺序输出这些内容

接近随机性的一个好方法是使用线性反馈移位寄存器


如果这仅用于模拟,您可以使用ieee.math_real中的统一过程来获取介于0和1之间的实数,并将其缩放到阵列的索引范围。

对于测试台,使用随机库在阵列中生成随机索引。或者您可以洗牌(使用与随机库一致的)

如果需要合成,则将阵列放入RAM块,并生成随机地址(例如使用线性反馈移位寄存器)


请注意,这些都不是完全随机的,只是伪随机的。如果您正在尝试任何远程加密,它们不太可能是您想要的。

对于测试台,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!排列和覆盖模型将需要存储生成的每个排列

请在这个问题上再补充一些细节。这是测试台代码吗?它需要合成吗?什么是“元素”?技术很简单:使用伪随机数生成器对数组进行寻址,如果已经使用了一个,则存储一个,在这种情况下,使用下一个。实现在很大程度上取决于它是否应该是可合成的…@zennehoy这必须是可合成的。元素在我的例子中是整数。@BennyBarns它必须是一个可合成的代码。