0

私は10個の要素の配列を持っています。これらを繰り返さずにランダムな順序で出力するにはどうすればよいですか。

4

4 に答える 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 は順列の最大数です。順列とカバレッジ モデルは、生成された順列ごとにストレージを必要とします。

于 2013-09-27T16:43:55.883 に答える
1

テストベンチの場合は、OSVVMランダム ライブラリを使用して、配列にランダム インデックスを生成します。または、それをシャッフルすることもできます (ランダム ライブラリと連携してFischer-Yates Algorithmを使用)。

合成する必要がある場合は、配列を RAM ブロックに配置し、ランダム アドレスを生成します (たとえば、線形フィードバック シフト レジスタを使用します)。

これらはどれも適切にランダムではなく、擬似ランダムであることに注意してください。リモートで暗号化を試みている場合、それらがあなたの望むものになる可能性は低いです。

于 2013-09-27T14:21:00.353 に答える
0

ランダム性に近づける良い方法は、線形フィードバック シフト レジスタを使用することです。

http://en.wikipedia.org/wiki/Linear_feedback_shift_register

于 2013-09-27T12:57:58.247 に答える
0

これがシミュレーションのみの場合は、ieee.math_real からの一様な手順を使用して 0 から 1 の間の実数を取得し、それを配列のインデックス範囲にスケーリングできます。

于 2013-09-27T14:11:41.463 に答える