Generieren Sie eine n-Bit-Zufallszahl in Verilog

Ich kann in Verilog mit $random. Gibt es eine Möglichkeit, eine zufällige Anzahl von genau nBits zu generieren (z. B. n = 70)?

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

Scheint mir ein vernünftiger Hack zu sein, da der Verilog-Simulator seine Berechnungen tatsächlich mit der zugrunde liegenden Maschinenarchitektur durchführen muss, die wahrscheinlich mit 32- oder 64-Bit-Wörtern und nicht mit einzelnen Bits gleichzeitig umgeht.

Antworten (1)

Wenn Sie SystemVerilog verwenden können, können Sie eine Zahl beliebiger Breite randomisieren. 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 das einfache alte Verilog halten müssen, denke ich, dass der von Ihnen vorgeschlagene Hack der beste, einfachste und möglicherweise die einzige Wahl ist. Ich glaube nicht, dass es in der Sprache etwas gibt, das hilft, da $randomeine 32-Bit-Zahl zurückgegeben wird.

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

vec[31:0]  = $random;
vec[63:32] = $random;
vec[69:64] = $random;