2016-12-15 2 views
0

Gibt es eine Möglichkeit, $ urandom/$ random mit dem Bereich zu verwenden?

gelang es mir, es mit Max-Bereich in der folgenden Art und Weise zu tun (in diesem Fall 11 ist die maximale Reichweite):

temp = (($urandom(9)%11)); 

Aber wie kann ich es für max und min tun, zum Beispiel max = 11 , min = 8.

Antwort

1

Sie benötigen $urandom_range, zB:

temp = $urandom_range(maxVal,minVal); 

minVal ist optional; Der Mindestwert ist Null, wenn Sie ihn auslassen.

+0

Ich kann $ urandom_range nicht verwenden, weil ich Samen verwenden möchte. – sara8d

+1

@ sara8d '$ urandom_range' wird auf die gleiche Weise wie' $ urandom' gesetzt. Wie das gemacht wird, ist herstellerspezifisch. Wie "$ random" gesetzt wird, ist im Verilog-Standard definiert, aber wenn Sie '$ random' verwenden, erhalten Sie nur einen Zufallszahlengenerator, so dass Sie eine schlechte _random stability_ erhalten. –

+0

das ist der Grund, dass jede Transaktion einen anderen Samen erhalten wird. – sara8d

1

Beachten Sie auch, dass Argumente für $ urandom_range int vorzeichenlos sind, also -1 wird als eine sehr positive Zahl behandelt und wenn minVal größer als maxVal ist, werden sie automatisch getauscht.

$ urandom_range ist sehr praktisch, aber man könnte auch bei std :: aussehen randomize() und haben ein in-line-Einschränkung ein 'innen', zum Beispiel mit:

ok = std::randomize(a) with {a inside {0, [12:23], 42}; }; 

Werfen Sie einen Blick auf https://www.edaplayground.com/x/3yEW

+0

@ jonesofcam- Ich kann Randomize (() nicht verwenden, weil ich ModelSim verwende, das es nicht unterstützt. – sara8d

Verwandte Themen