본문 바로가기

2-2/디지털 설계 및 실험

[디지털 설계 및 실험] Verilog vol10. Timing and Delays

Delay는 여러가지 종류가 있다.

 

💻 Distributed Delay

먼저, Distributed Delay는 element마다 딜레이를 주는 방식이다. 여기서 element는 gate를 의미한다.

Delay값들은 회로의 element 각각에 할당되어지며, input이 달라지면, 결과값은 delay후 변화하게 된다.

세세하게 딜레이를 줄 수 있지만, 속도가 느리다는 단점이 존재한다.

 

 

 

💻 Lumped Delay

Lumped Delay는 모듈마다 딜레이를 주는 방식이다. 앞서, Distributed Delay는 element마다 딜레이를 주었지만, 이것은 마지막 최종출력단 앞에 있는 gate에 누적되는 딜레이를 뭉탱이로 준다. 그림을 보면 바로 감이 올것이다.

속도가 빠르다는 장점이 존재한다.

 

 

 

💻 Pin-to-Pin Delays

Pin-to-Pin Delays는 path를 입력 ~ 출력을 지정해준다. 그리고 딜레이를 path마다 하나하나 다 주는 방식이다.

다른말로는 path delays 라고도 불린다.

 

a-e-out은 a에서 e를 거쳐 out으로 간다는 소리다.

 

 

💻 Specify Blocks

앞서 말한 Pin-to-Pin 딜레이는 input 핀과 output 핀의 사이의 delay를 나타내준다고 하였다.

Specify Block은 Pin-to-Pin delay 모델링에 사용된다.

 

pin-to-pin timing delay를 모듈 path마다 다 할당해준다. 그리고 회로 timing check를 해주고, 위 파란색 박스 안 처럼 specify, endspecify로, path delay를 지정해주면 된다.

 

input과 output 사이의 연결에도 여러가지 경우가 있는데 확인해보자.

 

 

 

💻 Parallel connection

입력과 출력 모두 배열일때 사용가능하다.

각 index마다 일대일 대응이 되며, 각 일대일대응된 비트마다 delay를 부여해줄 수 있다.

 

 

이 방법은 입력과 출력의 bit width가 다르면 쓸 수 없다.

 

 

 

💻 Full connection

방금 parallel connection이 일대일 대응이라면 이것은 모든 가능한 연결을 다 고려해준다. 

그리고 이것은 입력과 출력의 bit width가 달라도 해줄 수 있다.

 

 

파란색 박스안처럼 full connection을 진행할 수 있다.

(a*>out) = 9;라는 코드가 있다고 치자. a는 32비트이고 out은 16비트라고 보자.

그렇다면 가능한 모든 경우를 고려하므로 우리는 32*16 = 352개의 parallel connection을 해준 결과를 얻게 된다.

 

 

 

💻 Timing Checks

정말 매우 중요한 것이다.

베릴로그에선 system task로 timing check를 할 수 있게 도와준다. 이것들은 모두 specify block 안에 있어야 된다.

 

Timing check는 setup time과 holu time으로 나뉘어진다.

 

setup time은 data가 active clock edge 전에 도착해야하는 최소 시간이다. 이 시간 안에는 데이터가 와야한다.

hold time은 active clock edge 이후에 데이터가 변해서는 안되는 최소시간이다. 이시간 동안에는 안정화를 유지해야 한다.

각각을 지정해주는 task를 보자.

각각 3,5만큼의 time을 지정해준 것이다.