我有一段代碼表現出以下行爲。我期望看到10個並行線程,例如第一個線程:j = 0和第五個線程:j = 4,全部在模擬時間0納秒運行。此外,j = i和$ display並行運行,因此在$ display執行時,j仍然是x。爲什麼輸出始終在fork join_none中輸出j = 5?
module tb;
integer i,j;
initial
for(i=0;i<5;i++)
fork
j = i;
$display("Value of j is %d at time=%d \n", j, $time);
join_none
endmodule
我收到以下輸出。有人可以請解釋。我在使用VCS的EDAPlayground上嘗試過。
Value of j is 5 at time= 0
Value of j is 5 at time= 0
Value of j is 5 at time= 0
Value of j is 5 at time= 0
Value of j is 5 at time= 0
感謝您的解釋。但我的問題在於,不是如何避免這種輸出,而是爲什麼在我的代碼中看到這種行爲,爲什麼j = x不打印5次? –
默認情況下,模塊或程序塊變量是靜態的,這意味着它的內存在仿真結束之前不會被解除分配。在你的情況下,因爲for循環值更新爲5首先j更新爲5,因爲我保持價值5,並從來沒有解除分配導致5,但在這種情況下自動答案中提到的只有內存在所有過程完成後都會被取消分配。 – Emman