在Verilog中有system task $random來產生亂數,
其需要一個亂數種子才能讓每次產生的亂數不同.
以下使用時間產生亂數種子的方法.
產生的NowInSeconds帶入$random(NowInSeconds),
則每次可得不同的亂數.
From : http://www.edaboard.com/thread75097.html
integer FP; integer fgetsResult; integer sscanfResult; integer NowInSeconds; reg [8*10:1] str; // call "date" and put out time in seconds since Jan 1, 1970 (when time began, no doubt) // and put the results in a file called "now_in_seconds" $system("date +%s > now_in_seconds"); // open the file for reading FP = $fopen("now_in_seconds","r"); // get a string from the open file - "fgetsResult" should be a 1 - you can test // that for completeness if you'd like fgetsResult = $fgets(str,FP); // convert the string to an integer - "sscanfResult" should also be a 1, and // you can test that, too, sscanfResult = $sscanf(str,"%d",NowInSeconds); // close the file... $fclose(FP); // closes the file // use the number as a seed... process::self.srandom(NowInSeconds);
沒有留言:
張貼留言