Generieren Sie in Verilog eine n-Bit-Zufallszahl


7

Ich kann in Verilog leicht eine Zufallszahl von 32 Bit Breite erzeugen $random. Gibt es eine Möglichkeit, eine Zufallszahl von genau nBits zu generieren (sagen wir n = 70)?

Ich denke, ich könnte viele 32-Bit-Zufallszahlen verketten und mich dann auf die erforderliche Anzahl von Bits beschränken, aber das scheint ein Hack zu sein.


3
Scheint mir ein vernünftiger Hack zu sein, da der Verilog-Simulator seine Berechnungen tatsächlich unter Verwendung der zugrunde liegenden Maschinenarchitektur durchführen muss, die wahrscheinlich 32 oder 64-Bit-Wörter anstelle von Einzelbits gleichzeitig behandelt.
Das Photon

Antworten:


8

Wenn Sie SystemVerilog verwenden können, können Sie eine beliebige Anzahl beliebiger Breite zufällig auswählen. Deklarieren Sie es entweder als randinnerhalb einer Klasse oder verwenden Sie std::randomize. Hier ist ein einfaches Beispiel:

module top;

  bit[69:0] vec;

  initial begin
    assert(std::randomize(vec));
    $display("vec = %070b", vec);
  end

endmodule

Wenn Sie sich an den einfachen alten Verilog halten müssen, ist der von Ihnen vorgeschlagene Hack meiner Meinung nach die beste, einfachste und möglicherweise einzige Wahl. Ich glaube nicht, dass irgendetwas in der Sprache hilfreich ist, da $randomeine 32-Bit-Zahl zurückgegeben wird.

Wenn Sie einfach vermeiden möchten, neue Variablen zu deklarieren und explizit zu verketten, können Sie Folgendes tun.

vec[31:0]  = $random;
vec[63:32] = $random;
vec[69:64] = $random;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.