blocking 연산자가 있을 때 우변에 있는 변수값이 좌변으로 전부 넘어가기 전에는 다음 문장을 실행하지 않는다. 반면에 non-blocking 연산자는 우변에 있는 뭐가 있던 다음 문장과 같이 실행 된다.


기억의 의미


blocking 연산자가 있을 때 다음과 같은 문장이 있다고 하면

m = ~(a | b);    ----------- ㄱ
y = ~(m & c)    ----------- ㄴ


'ㄱ' 문장이 전부 실행된 후에 'ㄴ'을 실행하게 되는데 이때 'ㄱ' 문장을 통해서 변수 m 에 있던 값들은 바뀌게 된다. 그리고 'ㄴ' 문장을 실해할 때 바뀐 m 값으로 '~(m & c)' 연산 결과가 변수 y 로 치환된다. 즉, 'ㄴ' 문장을 실행 할때 이전의 변수 m 값을 기억할 필요없이 흘러가는 대로 지금 있는 변수 m 값을 이용하면 된다. 따라서 'ㄱ' 문장은 래치로 생성되지 않고 조합논리 회로 NOR가 생성되게 되는 것이다.


반면에 위 문장에 non-blocking 연산자가 있다면


m <= ~(a | b);    ----------- ㄱ
y <= ~(m & c)    ----------- ㄴ

'ㄱ' 문장을 실행하는 동시에 'ㄴ' 문장을 실행하게 된다. 현재 변수 m에 들어 있는 값을 이용하여 '~(m & c)'를 실행하게 되는것이다. 즉, 이전의 변수 m값을 기억할 필요가 있는 것. 따라서 'ㄱ' 문장은 래치로 생성되게 된다.

'Language > verilog HDL' 카테고리의 다른 글

Assignment  (0) 2016.11.23
Gate delay, net delay  (0) 2016.11.23
Gate-level, Dataflow, Behavoral modeling  (0) 2016.11.22
Behavioral, RTL, Gate level  (0) 2016.11.22
Little endian, Big endian  (0) 2016.11.16
Posted by 나무길 :