Blocking 과 Non-blocking 방식의 차이에 대해 알아보자.
Blocking vs Non - Blocking
1) Blocking
assign 시에 " = "를 사용하는 방식이다. 일반적인 SW 코드와 같이 순차적으로 실행이 된다.
initial begin
a = 0;
b = a;
end
위의 코드처럼 blocking 방식을 사용하면 동일 시간에는 순차적으로 실행된다. 따라서, 위의 코드에서 해당 initial 구문 실행 시, 최종적으로 a = 0, b = 0이 된다. "blocking" 이라는 이름과 같이, b에 a값이 assign 되기 전에 a에 0이 assign 되도록 blocking 해준다고 생각 할 수 있다.
2) Non - Blocking
assign 시에 " <= " 방식을 사용한다. Blocking 방식과 가장 큰 차이는 동일 시간에서는 모두 동시에 실행된다는 것이다.
initial begin
a <= 0;
b <= a;
end
위의 코드는 Blocking 예시에서 assign 방식만 Non-blocking 방식으로 바꾼 것이다. 같은 initial 문에 들어있는 " a <= 0 " 과 " b <= a " 은 동일한 시간이므로 동시에 실행되어야 한다. 따라서, 위의 initial 문이 실행되면, a = 0, b = x 가 될것이다. 다만, 이전 시간에서 a 값이 존재한다면 그 값이 b에 대입되어 있을 것이다.