본문 바로가기
digital logic/knowlege

관성지연, 전달지연

by 파란하늘코더 2020. 10. 20.
반응형

인터넷에서 verilog code를 보다보면 아래와 같은 구문들이 가끔 눈에 보인다

 

wire #10 A;

always @(posedge clk) B <= #20 C;

 

입사 초반에는 그냥 신호가 delay 되어서 처리되는 거구나라는 생각만 했지

 

이것이 의미하는 것이 뭔지 한번 좀 공부를 하려고 한다.

 

먼저 기초 원리를 위해 책을 하나 샀는데, verilog 기본기는 이 책으로 다 설명이 되어서 편한거 같다

 

여기 나온 내용과 구글링 하면서 이해한 내용을 바탕으로 간략하게 정리를 하려고 한다.

 

1. 관성지연(inertial delay)  

  

 

위와 같이 선언을 하게되면 in1 or in2가 값이 변할때 10만큼의 단위 시간뒤에 변한 값이 반영이 되는 것이다

 

만약 in1 or in2 중 어느것이라도 10만큼의 지연시간 이내에 값이 바뀐다면, 연산을 하는 순간에는 변경된 값으로 연산을 한다.

 

simulation으로 살펴보자

 

10만큼의 단위 시간만큼의 관성지연이 있기 때문에 20ns부터 시작하는 sig_1 의 변화를 out에서는 반영을 하지 못한다

 

또안 0~10ns 까지는 값을 출력하지못해 x가 뜨는 것을 확인 할 수가 있다.

 

그 이후에 생긴 15ns 짜리 enable이 생겼을 때는 10ns만큼 뒤에 out이 high로 반영된 것을 확인 할 수가 있다.

 

위의 책을 보면 관성지연을 선언하는 방법으로는 

 

이런식으로 표현하는데 모두 같은 기능이다

 

2. 전파지연(transport delay)

실제 chip에서는 각종 배선들이 복잡하게 배열되어 있다.

 

이때 특정 경로의 wire의 길이가 다른 wire보다 많이 길어 전기적인 신호가 늦게 도착하게 되는 경우가 발생하는데

 

이 delay를 전파 지연이라하며 아래와 같이 선언해준다.

이렇게 하면 b가 변화된 event를 detect하여 그 시점부터 10단위시간 만큼 뒤에 a에 전달이 되게 되는데

 

이때는 관성지연처럼 10ns보다 작은신호가 오더라도 상관없이 전부 data가 전달이 된다

 

simulation을 보면 아래와 같다.

해당 코드는 아래와 같이 설계 했는데 위의 결과를 설명하면 

blocking assignment로 인해 모든 data가 넘어가서 처리가 되지 않는 것이다.

(blocking assignment에 대한 설명은 이전글 참조)

 

한마디로 위의 코드가 입력값을 받는 지점은 위의 점선인 부분만 동작을 하게 되는 것이다

 

첫번째 점선에서 data를 입력받은뒤에 10ns동안 처리가 되지않고 전파지연이 발생하여 전달하느라 

 

sig_1이 falling이 되는 event를 넘어간 것이다.

 

따라서 코드를 아래와 같이 non-blocking assignment로 바꿔주게 되면

위와 같은 결과가 나오게 된다

 

 

※ 관성지연, 전파지연과 blocking, non-blocking에 따라 조합이 여러가지가 나오는데 아래 블로그에

   설명을 어느정도 해놔서 따로 포스팅은 안하겠다.

   (근데 결과값이 한개 이상한게 있어서 나중에 sim 결과는 추가하기로 함)

 

blog.naver.com/PostView.nhn?blogId=beahey&logNo=220541290522&categoryNo=62&parentCategoryNo=62&viewDate=&currentPage=1&postListTopCurrentPage=&from=postList&userTopListOpen=true&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=1

 

'digital logic > knowlege' 카테고리의 다른 글

blocking vs non-blocking assignment(feat. race condition)  (0) 2020.10.19
signed arithmetic  (0) 2020.10.16
Clock gating  (0) 2020.10.14
CDC(Clock domain crossing)  (3) 2020.10.13

댓글