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 |