while(1) work();
반응형
본 게시글은 KUEE 정보공개 프로젝트에 포함된 글입니다.
https://blog.youhogeon.com/65

본 자료의 저작권은 모두 저에게 있으며
학업에 참고 자료로만 사용하시길 바랍니다.
부득이하게 인용해야 하는 경우 반드시 출처(KUEE 정보공개 프로젝트)와 링크를 남겨주시길 바랍니다.

1.pdf
0.36MB
src.zip
0.00MB

 

LAB 01 VLSI 설계 및 실험보고서 # Ripple Carry Counter 1. Ripple Carry Counter Ripple Carry Counter는 클럭이 들어올 때 마다(posedge 또는 negedge마다) 출력값을 반전시키는 T-Flipflop을 이용해 구현한다. 클럭마다 값이 반전되기 때문에 두 클럭마다 값이 원래대로 돌아온다. 즉, 클럭의 두 배 주기를 가지는 신호가 출력된다. 이러한 T-Flipflop의 출력을 다음 T-Flipflop의 입력(클럭)으로 넣어주면 초기 클럭의 네 배 주기를 가지는 신호가 출력된다. 이러한 T-Flipflop의 성질을 이용하여 계수기를 구현할 수 있다. 그러나 클럭을 실제 클럭이 아니라 다른 신호를 이용하는 경우 delay가 발생하여 회로에 치명적인 문제(오 작동)를 일으킬 수 있다. 더불어, T-Flipflop마다 클럭이 상이하기 때문에 reset 값을 1로 할당하더라도 T-Flipflop의 클럭 상태에 따라 초기화가 이루어지지 않는 T-Flipflop이 생길 수 있다는 단점이 있다. 2. Timing Diagram Counter는 클럭마다 값을 1씩 증가시키기 때문에 위 사진과 같은 Timing Diagram을 가진다. (Q0가 LSB, Q3이 MSB) 실제로 베릴로그 코드를 이용해 D-Flipflop, T-Flipflop, Ripple Carry Counter를 구현하여 시뮬레이션을 돌려본 결 과 아래와 같은 Timing Diagram을 얻을 수 있었다. 클럭의 negedge마다 q값이 1씩 증가하는 모습을 보였다. 그러나 195ps가 되는 시 점에 reset 신호에 1을 할당하였음에도 정상적으로 초기화되지 않는 것을 확인할 수 있 었는데, 이는 기본 클럭을 클럭으로 가지는 첫 번째 T-Flipflop을 제외한 나머지 T-Flipflop의 경우 클럭의 변동이 없었기 때문에 동기 reset 신호에 초기화되도록 설계 된 본 Ripple Carry Counter의 값이 초기화되지 않았기 때문이다. 또한, 5Bit Counter이기 때문에 11111 이후에는 00000부터 다시 계수가 이루어짐 을 알 수 있었다. 3. Synthesize result 구현한 코드를 바탕으로 Design Compiler를 이용해 회로를 합성한 결과 위 사진과 같은 schematic을 확인할 수 있었다. 설계한 바와 같이 T-Flipflop의 출력이 다음 T-Flipflop의 입력(클럭)으로 들어감을 schematic 상에서도 확인할 수 있었다. 4. Timing Report 본 회로의 Timing Report는 위와 같았다. 2ns의 클럭을 사용하였을 때 slack이 MET State임을 확인하였다. 5. Area Report 본 회로의 Area Report는 위와 같았다. Total cell area가 1327μm²임을 확인할 수 있었다. # Adder Based Counter 1. Adder Based Counter Adder Based Counter는 가산기(adder)를 이용해 구현한 계수기이다. Flipflop의 출 력을 1을 가산하는 가산기의 입력으로 넣고, 가산기의 출력을 다시 Flipflop의 입력으로 넣는 방식으로 구현한다. 위에서 구현한 Ripple Carry Counter와 달리 모든 회로 (Adder, Flipflop)가 기본 클럭만을 사용하기 때문에 delay가 적게 발생하며, reset이 되지 않는 문제가 발생하지 않는다. 2. Timing Diagram Adder Based Counter도 마찬가지로 동일한 역할을 하는 계수기이기 때문에 Delay가 없는 이상적인 회로라고 가정한다면 Ripple Carry Counter와 동일한 Timing Diagram을 가진다. 위 Timing Diagram은 Adder Based Counter의 시뮬 레이션 결과이다. 실제로 클럭(의 negedge)마다 1씩 가산이 잘 이루어지고 있음을 확 인할 수 있었으며, 195ps에 reset에 1을 할당하자 200ps(195ps 이후의 첫 번째 negedge)에 정상적으로 초기화가 이루어졌음을 확인할 수 있었다. Ripple Carry Adder와 마찬가지로 5Bit Counter이기 때문에 11111 이후에 00000부터 다시 계수가 이루어짐을 확인할 수 있었다. 3. Synthesize result 구현한 코드를 바탕으로 Design Compiler를 이용해 회로를 합성한 결과 위 사진과 같은 schematic가 나왔다. 설계한 바와 같이 레지스터의 출력이 다음 가산기에 1과 함 께 입력으로 들어가고, 가산기의 출력이 레지스터의 입력으로 들어감을 확인할 수 있었 다. 4. Timing Report 본 회로의 Timing Report는 위와 같았다. 2ns의 클럭을 사용하였을 때 slack이 MET State임을 확인하였다. 클럭을 서서히 낮추며 사용 가능한 maximum clock frequency를 찾아보았다. 각 클럭별로 slack과 state는 아래와 같았다. 클럭(ns) Data arrival time Slack State 2 1.66 0.14 MET 1.8 1.46 0.01 MET 1.7 1.36 0.01 MET 1.6 1.28 0.03 MET 1.5 1.18 0.00 MET 1.4 1.08 0.00 MET 1.3 0.98 -0.11 VIOLATED 1.35 1.03 -0.05 VIOLATED 1.38 1.06 -0.02 VIOLATED 1.39 1.07 -0.01 VIOLATED 따라서 본 회로의 maximum clock frequency는 1.40ns임을 알 수 있었고 그 때 의 Timing report는 아래와 같았다. Register에서 27.8%, Adder에서 54.6%의 시간이 소요되었다. 따라서 본 회로의 critical path는 레지스터에서 값을 내보낼 때와 adder에서 가산 후 출력을 레지스터로 전달하는 부분임을 알 수 있었다. 5. Area Report 본 회로의 Area Report는 위와 같았다. Total cell area가 1626μm²임을 확인할 수 있었다. 이는 Ripple Carry Counter의 Total cell area에 비해 22.5% 큰 값이다.

반응형
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그