Generieren von Zufallszahlen - seed änderungen nur einmal
Generiere ich eine Zahl in verilog zwischen 0 bis 10000 in einer Schleife wie diese:
wire rand;
integer i, seed;
initial
begin
i=1;
seed=0;
while (i<10)
begin
force rand = $random(seed) % 10000;
end
end
das problem, dass Saatgut änderungen nur einmal und in den rest der Iterationen bleibt die gleiche. (Ich sehe die Werte in ModelSim).
- so legen Sie die Samen auf null, keine änderungen an Sie und Frage mich, warum es nicht geändert?
- Ich verstehe, dass $random ist das gleiche wie $dist_uniform(Saatgut,0,1000) und auf diese Weise die Samen-änderungen mit jeder iteration. Ich habe versucht den gleichen code mit Gewalt rand = $dist_uniform(Saatgut,0,1000) und das Ergebnis ist das gleiche. das eigentliche problem ist, dass rand bleiben die gleichen in jeder iteration der Schleife.
- der rand ist nur 1 bit breit
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte es mit einigen geringfügigen änderungen, zufällige Zahl, die breiter als 1 bit, falls erforderlich, und führen nicht in 0-Zeit. Eine for-Schleife wäre besser als eine while-Schleife hier.
initial
block das ist, was die regs sind für.integer
ist fast das gleiche wiereg[31:0]
kann und dass die Laufwerk-Eingänge.reg
. Diese könnten tun, was Sie wollen, es sei denn, die Kraft ist, wurde für eine andere Ebene der Hierarchie.Nicht, müssen Sie irgendeine Art von Verzögerung innerhalb dieser Schleife? AFAIK wäre es einfach Durchlaufen alle 10 Iterationen augenblicklich, und würde am Ende nur zwingen
rand
den letzten generierten Wert.Auch, wo sind Sie Inkrementieren
i
? Oder hast du nur trimmen heraus, dass vor dem einfügen des Codes?