Ich bin verwirrt zwischen diesen drei Funktionen und ich fragte mich nach einer Erklärung. Wenn ich den Bereich festlege, wie mache ich den Bereich exklusiv oder inklusive? Sind die Bereiche inklusive oder exklusiv, wenn ich den Bereich nicht festlege?urandom_range(), urandom(), random() in Verilog
Antwort
Neben der Antwort von @ dave_59, gibt es weitere wichtige Unterschiede:
i) $random
gibt eine 32-Bit-Integer; $urandom
und $urandom_range
geben vorzeichenlose 32-Bit-Ganzzahlen zurück.
ii) Der Zufallszahlengenerator für $random
wird in IEEE Std 1800-2012 angegeben. Mit demselben Seed erhalten Sie in jedem SystemVerilog-Simulator genau die gleiche Sequenz von Zufallszahlen. Dies ist bei $urandom
und $urandom_range
nicht der Fall, wo das Design des Zufallsgenerators dem EDA-Anbieter überlassen ist.
iii) Jeder Thread verfügt über einen eigenen Zufallszahlengenerator für $urandom
und $urandom_range
, während es nur einen Zufallszahlengenerator für $random
zwischen allen Threads (dh nur ein für die gesamte Simulation) geteilt wird. Dies ist sehr wichtig, da es für jeden Thread separate Zufallszahlengeneratoren gibt, die Ihnen bei der Simulation helfen, eine Eigenschaft mit der Bezeichnung zufällige Stabilität zu verbessern. Angenommen, Sie verwenden einen Zufallszahlengenerator, um einen zufälligen Stimulus zu erzeugen. Angenommen, Sie finden einen Fehler und beheben ihn. Dies könnte leicht die Reihenfolge ändern, in der die Threads (dh initial
undBlöcke) ausgeführt werden. Wenn diese Änderung die Reihenfolge geändert hat, in der Zufallszahlen generiert wurden, würden Sie nie wissen, ob der Fehler behoben wurde, weil Sie ihn behoben haben oder weil sich der Stimulus geändert hat. Wenn Sie für jeden Thread einen Zufallszahlengenerator haben, ist Ihr Testbench weit weniger anfällig für einen solchen Effekt - Sie können viel sicherer sein, dass der Bug verschwunden ist, weil Sie ihn behoben haben. Diese Eigenschaft heißt zufällige Stabilität.
Also, wie @ dave_59 sagt, sollten Sie nur $urandom
und $urandom_range
verwenden.
Vielen Dank für die Einsicht! –
@ Matthew Taylor - aber wenn es ein Problem mit einer Nummer gibt, würden Sie nicht wissen, die Samen (im Falle von $ urandom und $ urandom_rang), so wird es schwierig, den Bug zu repreduce. – sara8d
@ sara8d können Sie den Seed für jeden Thread festlegen. –
Sie sollten nur $urandom
und $urandom_range
verwenden. Diese beiden Funktionen bieten eine bessere Qualität der Zufallszahlen und eine bessere Initialisierung und Stabilität der Seeds als $random
. Der durch $ urandom_range angegebene Bereich ist immer inklusive.
Obwohl $random
die exakt gleiche Folge von Zufallszahlen für jeden Aufruf generiert, ist es äußerst schwierig, dieselbe Aufrufreihenfolge beizubehalten, sobald Änderungen am Design oder an der Testbench vorgenommen werden. Noch schwieriger, wenn mehrere Threads gleichzeitig Zufallszahlen generieren.
- 1. tcsh Zufallszahl aus/dev/random und/dev/urandom
- 2. Generate Random Enum mit System Verilog
- 3. RSA_generate_key() mit prngd anstelle von/dev/random oder/dev/urandom
- 4. Arbeite NUR mit/dev/random in Java
- 5. Warum Perl, Ruby verwenden/dev/urandom
- 6. Python: Random Systemzeit Seed
- 7. Wie zufällig ist urandom?
- 8. measure dev/urandom efficiency
- 9. Wie liest man/dev/random in Python
- 10. RISCV VERILOG HDL-Code
- 11. Python: nicht urandom Modul (O X)
- 12. Aufgabe in Verilog
- 13. BCD Adder in Verilog
- 14. Array Ausgang in Verilog
- 15. Xst: 3002 in Verilog
- 16. Exponentieller Zerfall in Verilog
- 17. Speichercodefehler in Verilog
- 18. Langsame Serviceantwort Zeiten: Java SecureRandom &/dev/random
- 19. Lernressourcen Verilog
- 20. Verilog-Taktgeneratorfehler?
- 21. Java Socket/TCP und/dev/urandom
- 22. Verilog Datentypen
- 23. Verilog Fragen
- 24. Seeding random in django
- 25. Wird/dev/urandom thread-sicher gelesen? Dieser
- 26. Random int ohne 'random' zu importieren
- 27. Wofür steht "net" in Verilog?
- 28. Ist $ readmem in Verilog synthetisierbar?
- 29. Wie Fixpunkt Wert in Verilog?
- 30. Ändern des Parameterwerts in Verilog
Diese sind vollständig in der freien IEEE Std 1800-2012 angegeben. Siehe Abschnitt 18.13 Systemfunktionen und Methoden für Zufallszahlen. – toolic
'$ urandom_range()' und '$ urandom()' stammen aus SystemVerilog [IEEE Std 1800-2012] (http://standards.ieee.org/getieee/1800/download/1800-2012.pdf). Verilog ist sein Vorgänger – Greg