У меня есть один вопрос об автоматических 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-е. Почему?
Может кто-нибудь объяснить это шаг за шагом, пожалуйста?