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

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

4.pdf
1.15MB
src.zip
0.01MB

 

VLSI 설계 및 실험보고서 LAB 04 # 2-stage 22bit Ripple Carry Adder 1. 개요 2-stage 22bit ripple carry adder의 경우 기존의 22bit ripple carry adder 사이에 flipflop단을 하나 더 추가하여 pipeline을 만들고, 두 stage에 걸쳐서 연산이 이루어지도록 개선한 회로이다. 기존에는 한 클럭당 22개의 full adder를 거쳐야 하기 때문에 연산에 많은 시간이 필요하였으나, pipeline을 추가하게되면 한 클럭당 11개의 full adder만 거치기 때문에 더 적은 연산 시간이 소요된다. 따라서 더 빠른 클럭으로 회로를 동작시킬 수 있다. 다만 중간에 filpflop이 추가되어 pipeline이 형성되므로, pipeline이 없는 회로에 비해 출력이 한 클럭 늦게 나타난다는 단점이 있다. 지난 실험에서는 pipeline이 없는 22bit ripple carry adder의 최대 클럭과 area, power를 확인하였으며 그 값은 아래 표와 같았다. 이번 실험에서는 pipeline을 추가한 22bit ripple carry adder를 구현하여 그 특성을 확인하고 지난 실험과 비교한다. 22bit ripple carry adder 최대 클럭 Area Power 175.4 Mhz (5.7 ns) 22021.656250 µm² 4.6980 mW 2. Timing Diagram 구현한 2-stage 22bit ripple carry adder의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형을 확인하였다. 사전에 만들어진(주어진) 총 100개의 vector data를 이용해 정상 동작 여부를 확인한 결과 모든 vector data에 대해 mat_sum과 sum_rca 파형이 일치하였다. 따라서 정확한 출력이 나옴을 확인할 수 있었다. 다만 입출력단에 연결된 flipflop들과 pipeline에 의해 클럭 두 주기 만큼 늦게 출력이 나왔다. 3. Synthesize result 합성 후 2-stage 22bit ripple carry adder의 block diagram은 첫 번째 사진과 같았다. 입력단의 flipflop(a_in1)으로부터 11bit ripple carry adder를 거쳐 sum out flipflop(추가한 pipeline에 의한 flipflop)까지의 path가 critical path임을 확인할 수 있었다. Pipeline을 추가하지 않았을때는 입력부터 출력까지 critical path가 이어졌지만, pipeline을 추가하자, critical path가 절반으로(입력부터 pipeline까지) 줄어든 것을 확인할 수 있었다. 이는 한 클럭 내에서 모든 연산을 수행하지 않고 절반의 연산만을 수행하기 때문이다. 두 번째 사진은 rca1(11bit ripple carry adder)의 block diagram이다. 이는 지난 실험에서의 22bit ripple carry adder와 같이 모든 full adder를 지나는 path가 critical path임을 확인할 수 있었다. 4. Timing Report 클럭 주기를 초기에 6.0ns로 설정 후 점차 낮추어가며 회로가 동작할 수 있는 가장 빠른 클럭을 찾아보았다. 각 클럭 주기에 대한 slack값과 state는 아래와 같았다. 클럭 주기(ns) Data required time(ns) Slack(ns) State 6.0 5.51 1.03 MET 5.0 4.50 0.62 MET 4.0 3.51 0.01 MET 3.0 2.51 -0.38 VIOLATED 3.5 3.00 0.01 MET 3.3 2.81 -0.08 VIOLATED 3.4 2.91 0.00 MET 따라서, 본 회로가 동작할 수 있는 가장 낮은 클럭 주기는 3.4ns이고, 약 294.1MHz의 클럭에서 가장 빠르게 작동할 수 있다는 것을 확인할 수 있었다. 이때의 timing report는 아래와 같았다. [3. Synthesize result]에서 확인한 critical path의 각 요소별 delay를 확인할 수 있었다. 5. Area Report, Power Report 클럭 주기를 3.4ns로 설정하였을 때 area report는 좌측 사진, power report는 우측 사진과 같았다. 6. Pipeline 유무에 따른 비교 22bit ripple carry adder 최대 클럭 Area Power without pipeline 175.4 Mhz (5.7 ns) 22021.656250 µm² 4.6980 mW with pipeline 294.1 Mhz (3.4 ns) 24966.146484 µm² 8.1303 mW [1. 개요]에서 예상한 바와 같이 pipeline을 추가해 2-stage로 회로를 설계하자 동작 가능한 최대 클럭이 1.68배 높아졌음을 확인할 수 있었다. 한 클럭당 사용되는 full adder의 수가 절반으로 줄었기 때문에 클럭이 2배 높아져야 하지만, pipeline을 위해 추가한 flipflop의 Q-delay 등의 요인으로 인하여 실제로는 2배보다는 적게 클럭이 증가하였음을 알 수 있었다. 또한 추가한 flipflop에 의해 회로의 면적은 소폭 증가(13% 증가) 하였으며, 두배 가까운 속도로 동작이 이루어지기 때문에 사용 전력 또한 증가(73% 증가) 하였음을 알 수 있었다. # 2-stage 20bit Carry Select Adder 1. 개요 2-stage 22bit carry select adder의 경우 기존의 20bit carry select adder 사이에 flipflop단을 하나 더 추가하여 pipeline을 만들고, 두 stage에 걸쳐서 연산이 이루어지도록 개선한 회로이다. 기존에는 4개의 full adder와 4개의 MUX를 거치는 path(입력의 LSB부터 출력까지의 path)가 critical path였으나, pipeline을 추가하게 되면 4개의 full adder를 거치는 신호 또는 4개의 MUX를 거치는 신호가 critical path가 된다. 즉 기존의 critical path는 8개의 컴포넌트를 거쳐갔지만, pipeline 추가로 인해 4개의 컴포넌트만 거치는 path로 개선된다. 본 실험에서는 pipeline이 없는 20bit carry select adder와 pipeline을 추가한 20bit carry select adder를 구현하여 최대 클럭과 area, power를 확인하고 비교한다. 2. Timing Diagram 구현한 2-stage 20bit carry select adder(sum_pipelined 파형)와 주어진 20bit carry select adder(sum 파형)의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형을 확인하였다. 사전에 만들어진(주어진) 총 100개의 vector data를 이용해 정상 동작 여부를 확인한 결과 모든 vector data에 대해 mat_sum, sum, sum_pipelined 파형이 일치하였다. 따라서 정확한 출력이 나옴을 확인할 수 있었다. 2-stage 20bit carry select adder의 경우 입출력단에 연결된 flipflop들과 pipeline에 의해 클럭 두 주기 만큼 늦게 출력이 나왔다. 2-stage 20bit carry select adder는 pipeline이 없기 때문에 한 주기 만큼 늦게 출력이 나왔지만, 2-stage adder와의 비교를 위해 의도적으로 출력단에 flipflop을 하나 더 추가하여 두 주기 만큼 늦은 출력이 나오도록 조절하였다. 3. Synthesize result 먼저 주어진 파이프라인이 없는 20bit carry select adder를 합성하였다. 합성 후 block diagram은 첫 번째 사진과 같았다. 입력단의 flipflop(B_IN)으로부터 20bit carry select adder를 거쳐 출력단의 flipflop(SUM_OUT)까지의 path가 critical path임을 확인할 수 있었다. [2. Timing Diagram]에서 파형의 비교를 위해 출력단에 하나의 불필요한 파이프라인을 추가(sum_out2)하였으나, flipflop의 딜레이는 carry select adder의 delay에 비해 무시할 수 있을 정도로 작기 때문에 critical path에는 영향을 미치지 않았다. 다음으로, 파이프라인을 추가한 2-stage 20bit carry select adder를 합성하였다. 합성 후 block diagram은 첫 번째 사진과 같았다. 입력단의 flipflop(A_IN)으로부터 4bit full adder(com14)를 거쳐 추가한 pipeline의 flipflop(out1)까지의 path가 critical path임을 확인할 수 있었다. 2-stage ripple carry adder와 마찬가지로 pipeline을 추가하지 않았을때는 입력부터 출력까지 critical path가 이어졌지만, pipeline을 추가하자, critical path가 절반으로(입력부터 pipeline까지) 줄어든 것을 확인할 수 있었다. 두 번째 사진은 4bit full adder(com14)의 block diagram이다. 파이프라인이 없는 ripple carry adder와 마찬가지로 모든 full adder를 지나는 path가 critical path임을 확인할 수 있었다. 4. Timing Report 먼저 파이프라인이 없는 20bit carry select adder의 클럭 주기를 초기에 6.0ns로 설정 후 점차 낮추어가며 회로가 동작할 수 있는 가장 빠른 클럭을 찾아보았다. 각 클럭 주기에 대한 slack값과 state는 아래와 같았다. 클럭 주기(ns) Data required time(ns) Slack(ns) State 6.0 5.50 0.30 MET 5.0 4.50 0.01 MET 4.0 3.50 0.00 MET 3.0 2.50 -0.37 VIOLATED 3.5 3.01 0.00 MET 3.3 2.80 -0.02 VIOLATED 3.4 2.90 0.00 MET 따라서, 파이프라인이 없는 20bit carry select adder 회로가 동작할 수 있는 가장 낮은 클럭 주기는 3.4ns이고, 약 294.1MHz의 클럭에서 가장 빠르게 작동할 수 있다는 것을 확인할 수 있었다. 이때의 timing report는 아래와 같았다. [3. Synthesize result]에서 확인한 critical path의 각 요소별 delay를 확인할 수 있었다. 다음으로 파이프라인을 추가한 2-stage 20bit carry select adder의 클럭 주기를 초기에 4.0ns로 설정 후 점차 낮추어가며 회로가 동작할 수 있는 가장 빠른 클럭을 찾아보았다. 각 클럭 주기에 대한 slack값과 state는 아래와 같았다. 클럭 주기(ns) Data required time(ns) Slack(ns) State 4.0 3.50 0.19 MET 3.0 2.50 0.00 MET 2.0 1.50 -0.23 VIOLATED 2.5 2.02 0.00 MET 2.3 1.82 0.00 MET 2.2 1.70 -0.02 VIOLATED 따라서, 2-stage 20bit carry select adder 회로가 동작할 수 있는 가장 낮은 클럭 주기는 2.3ns이고, 약 434.8MHz의 클럭에서 가장 빠르게 작동할 수 있다는 것을 확인할 수 있었다. 이때의 timing report는 아래와 같았다. [3. Synthesize result]에서 확인한 critical path의 각 요소별 delay를 확인할 수 있었다. 5. Area Report 좌측은 클럭 주기를 3.4ns로 설정한 파이프라인이 없는 20bit carry select adder의 area report이며, 우측은 클럭 주기를 2.3ns로 설정한 파이프라인이 있는 2-stage 20bit carry select adder의 area report이다. 자세한 분석은 [7. Pipeline 유무에 따른 비교]에 후술하였다. 6. Power Report 좌측은 클럭 주기를 3.4ns로 설정한 파이프라인이 없는 20bit carry select adder의 area report이며, 우측은 클럭 주기를 2.3ns로 설정한 파이프라인이 있는 2-stage 20bit carry select adder의 area report이다. 자세한 분석은 [7. Pipeline 유무에 따른 비교]에 후술하였다. 7. Pipeline 유무에 따른 비교 20bit carry select adder 최대 클럭 Area Power without pipeline 294.1 Mhz (3.4 ns) 27454.466797 µm² 8.1276 mW with pipeline 434.8 Mhz (2.3 ns) 30996.177734 µm² 14.3978 mW [1. 개요]에서 예상한 바와 같이 pipeline을 추가해 2-stage로 회로를 설계하자 동작 가능한 최대 클럭이 1.48배 높아졌음을 확인할 수 있었다. 한 클럭당 사용되는 컴포넌트(MUX와 full adder)의 수가 절반으로 줄었기 때문에 클럭이 2배 높아져야 하지만, pipeline을 위해 추가한 flipflop의 Q-delay 등의 요인으로 인하여 실제로는 2배보다는 적게 클럭이 증가하였음을 알 수 있었다. 또한 추가한 flipflop에 의해 회로의 면적은 소폭 증가(13% 증가) 하였으며, 두배 가까운 속도로 동작이 이루어지기 때문에 사용 전력 또한 증가(77% 증가) 하였음을 알 수 있었다. # 2-stage 22bit Square Root Carry Select Adder 1. 개요 2-stage 22bit square root carry select adder의 경우 기존의 22bit square root carry select adder 사이에 flipflop단을 하나 더 추가하여 pipeline을 만들고, 두 stage에 걸쳐서 연산이 이루어지도록 개선한 회로이다. 그림은 2-stage 16bit square root carry select adder이며, 2-stage 22bit square root carry select adder의 경우 뒤에 6bit adder단을 하나 더 추가하여 구현한다. (MUX와 full adder의 delay가 같다고 가정한다면) 기존에는 한 클럭당 7개의 컴포넌트를 거쳐야 하기 때문에 연산에 많은 시간이 필요하였으나, pipeline을 추가하게되면 한 클럭당 4개의 컴포넌트만 거치기 때문에 더 적은 연산 시간이 소요된다. 따라서 더 빠른 클럭으로 회로를 동작시킬 수 있다. 다만 중간에 filpflop이 추가되어 pipeline이 형성되므로, pipeline이 없는 회로에 비해 출력이 한 클럭 늦게 나타난다는 단점이 있다. 지난 실험에서는 pipeline이 없는 22bit square root carry select adder의 최대 클럭과 area, power를 확인하였으며 그 값은 아래 표와 같았다. 이번 실험에서는 pipeline을 추가한 22bit ripple carry adder를 구현하여 그 특성을 확인하고 지난 실험과 비교한다. 22bit square root carry select adder 최대 클럭 Area Power 303.0 Mhz (3.3 ns) 30349.222656 µm² 9.8281 mW 2. Timing Diagram 구현한 2-stage 22bit square root carry select adder의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형을 확인하였다. 사전에 만들어진(주어진) 총 100개의 vector data를 이용해 정상 동작 여부를 확인한 결과 모든 vector data에 대해 mat_sum과 sum_sca 파형이 일치하였다. 따라서 정확한 출력이 나옴을 확인할 수 있었다. 다만 입출력단에 연결된 flipflop들과 pipeline에 의해 클럭 두 주기 만큼 늦게 출력이 나왔다. 3. Synthesize result 합성 후 2-stage 22bit square root carry select adder의 block diagram은 위와 같았다. 입력단에 추가된 파이프라인(b_in3)으로부터 2bit adder(com54)와 MUX 두 개(com56, com66)를 거쳐 출력까지의 path가 critical path임을 확인할 수 있었다. Pipeline을 추가하지 않았을때는 입력부터 출력까지 critical path가 이어졌지만, pipeline을 추가하자, critical path가 절반으로(pipeline부터 출력까지) 줄어든 것을 확인할 수 있었다. 이는 한 클럭 내에서 모든 연산을 수행하지 않고 절반의 연산만을 수행하기 때문이다. 또한 pipeline을 추가함으로써 기존에 7개의 컴포넌트를 지나던 path(기존의 critical path) 가 (3개의 컴포넌트 + 4개의 컴포넌트)를 지나는 path로 분리되었기 때문에 4개의 컴포넌트를 지나는 path가 새로운 critical path가 되었음을 알 수 있었다. 4. Timing Report 클럭 주기를 초기에 5.7ns로 설정 후 점차 낮추어가며 회로가 동작할 수 있는 가장 빠른 클럭을 찾아보았다. 각 클럭 주기에 대한 slack값과 state는 아래와 같았다. 클럭 주기(ns) Data required time(ns) Slack(ns) State 5.7 5.20 1.74 MET 4.0 3.50 0.04 MET 3.0 2.50 0.01 MET 2.0 1.51 -0.32 VIOLATED 2.5 2.01 0.00 MET 2.3 1.82 -0.06 VIOLATED 2.4 1.91 0.00 MET 따라서, 본 회로가 동작할 수 있는 가장 낮은 클럭 주기는 2.4ns이고, 약 416.7MHz의 클럭에서 가장 빠르게 작동할 수 있다는 것을 확인할 수 있었다. 이때의 timing report는 아래와 같았다. [3. Synthesize result]에서 확인한 critical path의 각 요소별 delay를 확인할 수 있었다. 5. Area Report, Power Report 클럭 주기를 2.4ns로 설정하였을 때 area report는 좌측 사진, power report는 우측 사진과 같았다. 6. Pipeline 유무에 따른 비교 22bit square root carry select adder 최대 클럭 Area Power without pipeline 303.0 Mhz (3.3 ns) 30349.222656 µm² 9.8281 mW with pipeline 416.7 Mhz (2.4 ns) 34048.515625 µm² 14.9551 mW [1. 개요]에서 예상한 바와 같이 pipeline을 추가해 2-stage로 회로를 설계하자 동작 가능한 최대 클럭이 1.38배 높아졌음을 확인할 수 있었다. 한 클럭당 사용되는 full adder의 수가 절반으로 줄었기 때문에 클럭이 2배 높아져야 하지만, pipeline을 위해 추가한 flipflop의 Q-delay 등의 요인으로 인하여 실제로는 2배보다는 적게 클럭이 증가하였음을 알 수 있었다. 또한 추가한 flipflop에 의해 회로의 면적은 소폭 증가(12% 증가) 하였으며, 두배 가까운 속도로 동작이 이루어지기 때문에 사용 전력 또한 증가(52% 증가) 하였음을 알 수 있었다.

반응형
profile

while(1) work();

@유호건

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

검색 태그