본 게시글은 KUEE 정보공개 프로젝트에 포함된 글입니다.
https://blog.youhogeon.com/65
본 자료의 저작권은 모두 저에게 있으며
학업에 참고 자료로만 사용하시길 바랍니다.
부득이하게 인용해야 하는 경우 반드시 출처(KUEE 정보공개 프로젝트)와 링크를 남겨주시길 바랍니다.
LAB 02 VLSI 설계 및 실험보고서 #1. 8 to 1 Multiplexer 1. 개요 Multiplexer(이하 MUX)는 입력으로 여러개의 신호를 받고 그 중 하나의 신호를 출 력으로 내보내는 회로이다. Select bit(S0 ~ S2 신호)을 이용해 어떠한 입력 신호를 출력으로 내보낼지 결정한다. 본 실험에서는 8 to 1 MUX를 gate level과 behavior level로 구현하여 각각을 합성한 뒤, 합성된 회로를 비교한다. 2. Timing Diagram 구현한 Gate Level 8 to 1 MUX와 Behavior Level 8 to 1 MUX를 테스트하기 위해 테스트벤치 코드를 작성하여 파형을 확인하였다. 두 MUX의 파형은 완전히 일치하 였으며, select bit에 따라 적절한 input 신호가 output으로 나타남을 확인할 수 있었 다. 3. Synthesize result Gate Level 8 to 1 MUX의 합성 전 후 diagram은 위와 같았다. 합성 전, Verilog 코드에서 설계한 바와 같이 AND, NOT, OR게이트를 통해 회로가 구성되었음 을 확인할 수 있었고, 합성 후 두 개의 4 to 1 MUX와 한 개의 2 to 1 MUX를 이용 해 회로가 만들어졌음을 확인할 수 있었다. Behavior Level 8 to 1 MUX의 합성 전 후 diagram은 위와 같았다. Verilog 코 드에서 case문을 사용해 MUX를 구현하였는데, case문은 합성 전 좌측 사진과 같이 여 러개의 AND, NOT, OR로 분석됨을 확인할 수 있었다. 합성 후에는 Gate Level MUX 와 마찬가지로 두 개의 4 to 1 MUX와 한 개의 2 to 1 MUX를 이용해 회로가 만들어 졌음을 확인할 수 있었다. 합성 후 두 가지 방식으로 구현한 MUX는 diagram 상으로 완전히 동일하였다. 따 라서 두 MUX는 완전히 동일하게 동작할 것을 예상할 수 있다. 4. Timing Report 본 회로의 timing report는 위와 같았다. 좌측은 Behavior Level로 설계한 MUX 이고, 우측은 Gate Level로 설계한 MUX이다. 위에서 예상한 바와 같이 두 MUX는 완 전히 동일하기 때문에 동일한 delay를 가짐을 확인할 수 있었다. 또한, 두 회로의 critical path는 select bit인 s1이 output인 out으로 가는 경로임 을 알 수 있었다. 5. Area Report 본 회로의 area report는 위와 같았다. 좌측은 Behavior Level로 설계한 MUX이 고, 우측은 Gate Level로 설계한 MUX이다. 위에서 예상한 바와 같이 두 MUX는 완전 히 동일하기 때문에 동일한 면적을 가지고, port, net, cell, reference의 개수도 동일 함을 확인할 수 있었다. #2. 12bit Full Adder 1. 개요 Full adder는 a, b, c_in을 입력으로 받은 뒤 이 세 값을 더해 sum(합)과 c_out (자리올림)으로 출력하는 회로이다. 1bit full adder의 회로는 위 사진과 같으며 진리표 는 아래 표와 같다. 이러한 1bit full adder를 여러개 이으면 아래 사진과 같이 다중 bit full-adder를 만들 수 있다. 본 실험에서는 gate level로 구현한 1bit full adder 를 12개 사용해 12bit full adder를 구현한다. a b c_in sum c_out 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 2. Timing Diagram 구현한 12bit full adder의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형 을 확인하였다. 사전에 만들어진(주어진) 총 100개의 vector data를 이용해 정상 동작 여부를 확인한 결과 모든 vector data에 대해 정확한 출력이 나옴을 확인할 수 있었다. 3. Synthesize result 합성 후, 12bit full adder의 block diagram은 위와 같았다. 초록색 사각형은 각각 의 1bit full adder를 의미하며 빨간색 선은 critical path를 의미한다. 구현한 코드와 같이 12개의 1bit full adder가 입출력 wire를 통해 연결되어있음을 확인하였다. 또한 입력의 LSB(a[0])가 12개의 1bit full adder를 거치며 출력(sum[12])가 되는 path 가 본 회로의 critical path임을 알 수 있었다. 이는 뒤의 1bit full adder가 앞의 1bit full adder로부터 c_out 신호를 입력(c_in)으로 받아야 정상적으로 연산이 수행될 수 있기 때문이다. 4. Timing Report 본 회로의 timing report는 위와 같다. 12개의 full adder를 거치며 발생하는 모든 delay들이 나타나있다. 각각의 1bit full adder에서의 연산은 0.5ns ~ 0.8ns 사이에 이루어지지만, 마지막 1bit full adder는 앞선 11개의 1bit full adder의 연산이 이루 어지고 난 뒤에 연산이 이루어지므로 전체적인 회로의 data arrival time은 8.7ns임을 확인할 수 있었다. 5. Area Report 본 회로의 area report는 위와 같았다. 지금까지 실험한 다른 회로들에 비해 훨씬 큰 면적을 가짐을 알 수 있었는데, 이는 12개의 full adder를 직렬 구조로 가지기 때문 으로 추측할 수 있으며, 실제 block diagram 상에서도 이러한 구조를 확인할 수 있다. #3. 12bit Full Adder with Flip-Flops 1. 개요 앞서 구현한 12bit full adder의 입출력에 flip-flops을 이용해 12bit full adder가 클럭을 가지도록 구조를 변경하였다. 이 때 입력 a, b를 이용해 계산된 결과는 한 클럭 이 지나고 나서 출력된다. 한 클럭이 지났을 때 모든 sum bit가 동시에 출력되어야 하 기 때문에 한 클럭 내에 12개의 1bit full adder가 모두 연산이 이루어져야 하고, 따라 서 본 회로의 clock 주기는 12개의 1bit full adder가 연산되는 시간보다 길게 설정해 주어야 한다. clock을 너무 높게 설정하면(주기를 너무 짧게 설정하면) 뒤의 1bit full adder가 동작하기 전에 sum bits가 출력되므로 정상적인 연산이 수행되지 못한다. 2. Timing Diagram 구현한 12bit full adder with flip-flops의 동작을 테스트하기 위해 테스트벤치 코 드를 이용해 파형을 확인하였다. 사전에 만들어진(주어진) 총 100개의 vector data를 이용해 정상 동작 여부를 확인한 결과 모든 vector data에 대해 정확한 출력이 나옴을 확인할 수 있었다. 다만 앞서 구현했던 12bit full adder와는 달리 출력값이 한 클럭 늦게 나타남을 확인할 수 있었다. 3. Synthesize result 합성 후, 12bit full adder의 block diagram은 위와 같았다. 빨간색 선은 critical path를 의미한다. 입력의 LSB(b_q reg 0)가 12개의 1bit full adder를 거치며 출력 (sum reg 11)가 되는 path가 본 회로의 critical path임을 알 수 있었다. 이는 뒤의 1bit full adder가 앞의 1bit full adder로부터 c_out 신호를 입력(c_in)으로 받아야 정상적으로 연산이 수행될 수 있기 때문이다. 4. Timing Report 회로의 clock 주기를 5ns로 설정하였을 때, 본 회로의 timing report는 위와 같았 다. 이 때 slack값이 0.36으로 MET state 이었기 때문에 clock을 조금 더 높여가며 적절한 clock을 찾아보았다. 각 clock에 대한 slack값과 state는 아래와 같았다. 클럭 주기(ns) Data required time Slack State 5 4.51 0.36 MET 4 3.51 -0.64 VIOLATED 4.5 4.01 -0.14 VIOLATED 4.7 4.21 0.06 MET 4.6 4.11 -0.04 VIOLATED 4.66 4.17 0.02 MET 4.64 4.15 0.00 MET 4.63 4.14 -0.01 VIOLATED 따라서 본 회로의 적절한 클럭 주기는 4.64ns이고, 약 215.5Mhz의 클럭에서 가장 빠르게 정상 작동하는 것을 알 수 있었다. 5. Area Report 본 회로의 area report는 위와 같았다. 12bit full adder에 비해 훨씬 많은 개수의 port, net, cell을 가지기 때문에 면적 또한 460%가까이 증가하였다.