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