하지만 Tccq는 contamination Delay로 정해진 값이기 때문에 수정할 수 있는 것은 Tcd밖에 없습니다.
그래서 Shortest Path에 Buffer를 추가하여 지연시간을 늘려 Hold Time보다 키우는 방법을 사용합니다.
Tc ≥ Tpcq + Tpd + Tsetup + Tskew
여기서 좌항 - 우항 = Slack 이 나오는데 이 값은 꼭 양수여야 합니다.
PS / PL
Zynq 7000 SoC는 아래와 같이 구성되어 있습니다.
PS(Processing System)와 PL(Programable Logic)으로 나눌 수 있고,
Main Processor와 Peripheral로도 나눌 수 있습니다.
Main Processor인 CPU에서는 AMBA BUS 뿐 아니라 PL도 Peripheral입니다.
PS
PS에 대한 구조도입니다. 살펴보면 I/O Port는 MUX를 통해 외부와 연결되고, 아래쪽은 AXI를 사용해서 연결되는 모습을 볼 수 있습니다.
Structure Logic Transformation
Pipelining
Fine-Grain Pipelining
Parallel Processing
이 작업으로 수행할 때 알아야 할 중요한 두 가지가 있습니다.
Throughput : 입력을 얼마나 자주 넣어줄 수 있는가
Latancy : 입력이 출력으로 나오는 시간
사실 제일 중요한 건 Throughput입니다.
Throughput은 clk의 주기와 관련이 있습니다. clk의 주기를 줄이면 줄일수록 Throughput이 증가합니다.
그러나, Thold, Tsetup의 한계가 있기 때문에 C.L에서의 소요시간(Delay)을 줄이는 것이 관건입니다.
위 사진처럼 세탁기와 건조기로 예시를 들겠습니다. 세탁기는 30분, 건조기는 1시간의 시간이 소요된다고 가정하겠습니다. 위 그림처럼 진행한다면 90분이 지난 후에 건조가 완료되어 결과가 나오게 됩니다.
Pipelining
하지만 위처럼 진행한다면 output이 출력되는 Thruoughput을 늘릴 수 있겠죠?
이러면 1 CLK Cycle을 기존 90분에서 60분으로 줄일 수 있습니다.Latency는 기존 90분에서 120분으로 늘었지만, 1/90 min의 Throughput에서 1/60 min으로 향상할 수 있습니다.
이걸 회로에 적용한다면 값을 저장하는 Register를 추가하여 Throughput을 늘릴 수 있습니다.
위 같은 회로가 있다고 하면 Critical Path를 찾고 그 선을 가로지르는 선을 그리고 Pipeline Register를 추가하면 됩니다.
Pipeline
장점
Critical Path의 Delay를 줄일 수 있기 때문에, 더 빠른 Clock을 사용가능합니다.
Throughput을 증가시킵니다.
단점
Pipeline Register 추가로 인한 면적이 증가됩니다.
Latency가 증가됩니다.
전력 소모가 증가합니다.
Fine-Grain Pipelining
3-tap FIR Filter
Fine-Grain Pipelining은 Logic 내부에서 나누는 겁니다.
예를 들어 위 그림에 있는 3-tap FIR를 예로 들겠습니다.
기존 a, b, c의 Delay가 8ns라고 가정하고 그다음 Adder의 Delay가 2ns라고 하겠습니다. 그러면 현재 회로의 Longest Path는 10ns가 되겠네요.
하지만 Fine-Grain Pipelining을 사용하여 Logic 내부에서 구분해 Register를 추가할 수 있습니다.Fine-Grain Pipelining을 사용해서 m1은 5ns. m2는 3ns의 지연으로 나누었다고 한다면, Longest Path를 5ns로 줄일 수 있습니다. 이는 Throughput을 줄여 동작 속도를 올릴 수 있게 도와줍니다.
Parallel Processing
전체 모듈을 병렬처리하는 방법이 있습니다.
10ns의 Delay를 갖는 모듈이 있다면 2개를 배치하고 5ns 마다 input을 받게 하는 방법입니다.