Переменная SystemVerilog automati c в потоках - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть один вопрос об автоматических c переменных в потоках SystemVerilog.

1.

initial begin
  for (int j=0; j<3; j++)
    fork
    $write(j); 
  join_none
end

Это отображает «3 3 3». Я понимаю это так: для l oop fini sh его работа (разверните код до 3-х строк), а затем начинается симуляция со значением j, равным 3, поэтому все функции записи отображают 3:

 $write(j);
 $write(j);
 $write(j);

2.

initial begin
  for (int j=0; j<3; j++)
    fork
    automatic int k = j;
    $write(k);
  join_none
end

На этот раз мы используем автоматическую c переменную k (кстати, j также автоматическая c переменная), и каким-то образом она работает по-другому: в каждой итерации k хранит текущее значение of j, а затем начинается симуляция с различными значениями:

$write(k=j when j was 1);
$write(k=j when j was 2);
$write(k=j when j was 3);

3.

initial begin
  for (int j=0; j<3; j++)
    fork
    automatic int k;
    k = j;
    $write(k);
  join_none
end

Это работает так же, как 1-е. Почему?

Может кто-нибудь объяснить это шаг за шагом, пожалуйста?

...