나는 포크 Verilog 코드를 결합 구현하기 위해 노력하고 있지만, 뭔가 잘못이다 b
은 매우 모호한 값 때문에병렬 포크가 정확히 병렬로 결합합니까?
reg [7:0] a, b;
initial fork
a = 0; // initial
b = 0; // initial
#1 a = 1;
#1 b = a + 1; // is b 1 or 2?
join
위의 코드는 혼란 스럽다. 아시다시피, 포크 결합은 병렬로 작동하므로 b
은 1이어야합니다. 맞습니까?
나의 시뮬레이션 결과는 'b'가 2가 아니라는 것입니다.하지만 내 생각에는 1이되어야합니다. 왜냐하면 a가 아직 1이 아니기 때문입니다.
나는 이와 같은 몇 가지 예제 코드를 작성하려고합니다.
Initial
$display("initial time = %d", $time);
Fork
#1000 $display("spend time = %d at #1000", $time);
#5 $display("spend time = %d at #5", $time);
#50 $display("spend time = %d at #50", $time);
join
$display("main process time = %d", $time);
end
다음과 같이 나타납니다. 시간을 보내 1000 주요 처리 시간 1000
0 지출 시간 5 지출 시간 50 그래서이 실험에서, 나는 포크에 대해 그것을 가지고 초기 시간은 가입 할 수 있습니다.
그래서이 중 하나를 더 좋아합니다. FK 1, 0, 200 떨어져하지만 결과 이상 이해하지 않는 경우
Initial begin
'Ifdef FK
fork
'endif
$display ("initial time %d , $time);
a<=0;
b<=0;
#100 a<=1;
#100 b<=a+1;
'Ifdef FK
join
'Endif
$display ("the output a,b %d %d time %d, a,b, $time);
End
결과는 또한이 0, 0, 100 같다. 그들은 왜 0,0,100과 1,0,200을 가지고 있습니까?
당신이 그것을 시뮬레이션 할 때 당신은 무엇을 어떻게해야합니까? – Morgan