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 나무길 :

Assignment

2016. 11. 23. 09:06 from Language/verilog HDL

할당문은 객체에 값을 주는 기본적인 방법이며, Verilog에는 다음과 같은 두 가지 형태의 할당이 있다.

- net형 객체에 값을 할당하는 연속 할당(continuous assignment)

- variable 자료형의 객체에 값을 할당하는 절차형 할당(procedural assignment)


* net은 실제로 전선이라고 생각하기. 이는 무조건 continuous 일수 밖에 없다. 약간 analog 느낌.



Continuous assignment


연속할당문은 assign 문을 이용하여 net 형 객체에 스칼라 또는 벡터 형태의 값을 할당하며, 우변 수식의 값에 변화(event)가 발생했을 때 좌변의 객체에 값의 할당이 일어남. 연속할당문은 논리식으로 표현된 조합회로의 모델링에 이용될 수 있다. 


게이트가 net 객체를 구동하는 것과 동일한 방식으로 net 객체를 구동하며, 우변의 수식은 net 객체를 연속적으로 구동하는 조합논리회로라고 생각할 수 있다.



Procedural assignment


절차형 할당문은 always, initial, task, function과 같은 procedure(절차)내부에서 사용되며, 시뮬레이션의 실행 흐름이 procedure 내의 할당문에 도달했을 때 할당을 위한 트리거가 발생된다. 연속 할당문은 문장의 실행에 의해서가 아니라 우변 수식의 값 변화(event)에 의해 좌변의 net 객체에 값이 할당되는 하드웨어적인 특성을 갖는다. 반면에 절차형 할당문은 우변 수식의 event 발생과는 무관하게 해당 문장의 실행에 의해 좌변 variable에 값이 할당되는 소프트웨어적인 특성을 갖는다.

절차형 할당문의 실행은 event 제어, 지연 제어, if 문, case 문, 반복문 등에 의해 제어될 수 있다. 절차형 할당문은 다시 blocking 할당문과 nonblocking 할당문으로 구분된다.




Verilog 소스코드 내에서 연속 할당문들의 순서는 시뮬레이션 결과에 영향을 미치지 않으나, always, initial 구문 내에서 절차혀여 할다움ㄴ들의 순서는 시뮬레이션 결과에 영향을 미칠 수 있다.

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

blocking과 nonblocking 연산자 의미  (0) 2016.11.27
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 나무길 :

Gate delay, net delay

2016. 11. 23. 08:32 from Language/verilog HDL

Gate delay


게이트 지연은 논리 게이트의 입력에서부터 출력까지의 신호 전달지연(propagation delay)을 말한다. 하나의 출력에 대해 상승지연, 하강지연, 턴-오프(turn-off)지연 등 세가지의 지연 값을 지정할 수 있다.




net delay


net 지연은 net를 구동하는 구동자의 값이 변하는 시점에서부터 net의값이 갱신되는 시점까지 소요되는 시간을 의미하며, 상승지연, 하강지연, 턴-오프 지연 등 세가지의 지연을 지정할 수 있다.

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

blocking과 nonblocking 연산자 의미  (0) 2016.11.27
Assignment  (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 나무길 :