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

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

src.zip
0.01MB
9.pdf
0.71MB

 

VLSI 설계 및 실험보고서 LAB 09 # Folded FIR Filter 1. 개요 지난 실험에서 사용한 FIR filter의 최소 동작 가능 클럭 주기가 10ns라고 가정하자. 그런데 입력이 50ns마다 들어온다면, FIR filter는 처음 10ns 동안 모든 연산을 마치고 남은 40ns 동안에는 유휴 상태가 될 것이다. 하지만 오른쪽 그림과 같이 한 개의 multiplier와 한 개의 adder만을 사용해서 매 10ns 마다 총 다섯 번의 연산을 하도록 filter의 구조를 개선한다면, 더 적은 area를 사용해 유휴 상태 없는 효율적인 회로를 만들 수 있다. 본 실험에서는 위와 같이 두 개의 clock을 가지는 회로를 설계한다. 붉은색 회로는 푸른색 회로보다 다섯 배 더 느리게 동작하며, 입력을 지연시켜 다섯 개의 입력을 푸른색 회로에 제공한다. 푸른색 회로는 다섯 개의 입력을 가지고 각각 coefficient와 곱연산 후 값을 누적시키는 작업을 다섯 번 반복한다. 푸른색 회로가 다섯 번 동작하는 50ns(10ns x 5)의 시간과 입력이 들어오는 주기가 일치하기 때문에, 유휴 상태 없는 최적의 회로가 된다. 푸른색 회로는 다섯 번 연산을 반복하는 동안 기존에 계산했던 값(누적 합)을 기억하고 있어야 하기 때문에 adder의 끝단에 flip-flop을 추가하였다. 푸른색 회로 내부의 counter를 이용해 누적 합을 초기화할지 여부를 선택하는 MUX도 사용하였다. 더불어, 푸른색 회로는 ‘5 빠른 클럭’ 주기로 값을 출력해야 붉은색 회로의 입력과 주기가 일치하기 때문에, 출력 주기를 조정하기 위한 MUX와 flip-flop을 출력 단에 추가하였다. 그림에는 나타나지 않았지만 붉은색 회로에는 메모리와, 메모리 입출력을 위해 메모리 address를 계산하는 로직을 추가하였다. ‘매 느린 클럭’마다 메모리에서 값을 읽어와 flip-flop들에 전달하며, 동시에 푸른색 회로의 출력을 메모리에 저장한다. 2. Timing Diagram 구현한 folded FIR filter의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형을 확인하였다. 사전에 만들어진(주어진) 총 256개의 input vector data와 252개의 output vector data를 이용해 정상 동작 여부를 확인한 결과 모든 vector data가 구현한 filter의 출력과 파형이 일치하였다. 따라서 회로가 올바르게 동작함을 확인할 수 있었다. 또, 출력 결과를 저장하는 메모리에도 순차적으로 값이 잘 저장되고 있음을 확인할 수 있었다. 더불어, 입출력단에 연결된 flip-flop들과 filter 내에서 사용한 flip-flop(multiplier, adder 전후의 flip-flop)에 의하여 느린 clock을 기준으로 7 cycle의 latency가 발생함을 확인할 수 있었다. 3. Synthesize Result 합성 후 folded FIR filter의 ‘느린 클럭 회로’의 block diagram은 위와 같았다. 합성 시 메모리를 제외하고 합성하였으며, 따라서 메모리와 메모리 address 계산을 위한 counter들은 합성에서 제외되었다. 입력을 지연시키는 ‘느린 클럭 회로’의 경우 flip-flop으로만 구성되었으므로 critical path가 큰 의미는 없으나, ‘빠른 클럭 회로’의 출력으로부터 ff_out(출력 flip-flop)까지의 회로가 critical path임을 확인할 수 있었다. ‘빠른 클럭 회로’의 block diagram은 위와 같았다. Coefficient를 지연시키는 flip-flop(ff_c)로부터 나와 multiplier와 adder를 거쳐 합을 지연시키는 flip-flop(ff_sum)까지의 회로가 critical path임을 확인할 수 있었다. Behavior level로 회로를 설계하였기 때문에 adder와 multiplier는 design compiler에 내장된 회로가 사용되었다. 4. Timing Report 지난 실험에서 구현한 direct-form FIR filter의 동작 가능한 최소 클럭 주기가 9.4ns이었기 때문에, 해당 클럭에 약 5배인 50.0ns를 ‘느린 클럭 주기’의 초기값으로 설정 후 점차 낮추어가며 회로가 동작할 수 있는 가장 빠른 클럭을 찾아보았다. ‘빠른 클럭 주기’는 ‘느린 클럭 주기’의 0.2배가 되도록 클럭을 설정하였다. 각 클럭 주기에 대한 slack값과 state는 아래와 같았다. 아래 표에서 clk20은 ‘느린 클럭’, clk100은 ‘빠른 클럭’을 의미한다. 클럭 주기(ns) Data required time(ns) Slack State clk20 clk100 clk20 clk100 clk20 clk100 clk20 clk100 50.0 10.00 49.65 9.57 9.28 0.09 MET MET 45.0 9.00 44.65 8.68 8.28 0.16 MET MET 40.0 8.00 39.65 7.68 7.28 0.00 MET MET 35.0 7.00 34.65 6.68 6.28 0.00 MET MET 30.0 6.00 29.65 5.69 5.28 -0.66 MET VIOLATED33.0 6.60 32.65 6.29 5.88 -0.12 MET VIOLATED34.0 6.80 33.65 6.49 6.08 0.00 MET MET 33.5 6.70 33.15 6.39 5.98 0.00 MET MET 33.3 6.66 32.95 6.35 5.94 0.00 MET MET 33.1 6.62 32.75 6.31 5.90 0.00 MET MET 따라서, ‘느린 클럭 회로’를 기준으로 본 회로가 동작할 수 있는 가장 낮은 클럭 주기는 33.1ns이고, 약 30.2MHz의 클럭에서 가장 빠르게 작동할 수 있다는 것을 확인할 수 있었다. 이때의 timing report는 아래와 같았다. [3. Synthesize Result]에서 설명한 바와 같이 ‘빠른 클럭 회로’의 출력(filter/ff_out)으로부터 출력 flip-flop(ff_out)까지의 회로가 critical path임을 확인할 수 있었다. ‘빠른 클럭 회로’의 timing report는 아래와 같았으며, 마찬가지로 coefficient를 지연시키는 flip-flop(ff_c)에서 multiplier(mult_22)와 adder(add_24)를 거쳐 합을 지연시키는 flip-flop(ff_sum) 까지의 회로가 critical path임을 확인할 수 있었다. 5. Area Report & Power Report 본 회로의 total cell area는 97650.02μm², total dynamic power는 10.3076mW임을 알 수 있었다. 자세한 분석은 아래 [6. Non-folded FIR과의 비교]에 후술하였다. 6. Non-folded FIR과의 비교 지난 실험에서의 non-folded FIR filter(direct-form)와 비교해 보았을 때, folded FIR filter가 3.52배 더 느리게 동작함을 확인할 수 있었다. 또한 total dynamic power는 48.7% 감소하였고, total cell area는 62.2% 감소하였다. Non-folded FIR filter (previous practice) Folded FIR Filter (current practice) Maximum frequency 106.4 MHz 30.2 MHz Area Combinational Area 232989.73 μm² 72982.43 μm² Noncombinational Area 25480.41 μm² 24667.59 μm² Total Cell Area 258470.14 μm² 97650.02 μm² Total Dynamic Power 20.0962 mW 10.3076 mW 개념상으로는 각각 다섯 개의 multiplier와 adder가 한 개로 줄었기 때문에 total cell area가 80% 감소해야 하지만, non-folded FIR filter에서 사용하지 않았던 MUX의 면적이나 회로가 기본적으로 차지하는 면적들에 의해 개념상으로 계산했던 감소폭보다는 적게 감소하였음을 확인할 수 있었다. 더불어, 다섯 ‘빠른 cycle’이 지나는 동안 기존에 계산했던 값들을 기억하고 있어야 하기 때문에 non-folded FIR filter에 비해 더 많은 flip-flop들이 사용되었는다. 따라서 noncombinational area의 경우 거의 차이가 없음을 확인할 수 있었다. 마찬가지로 power도 큰 폭으로 줄었음을 확인할 수 있었다. 만약 clock이 같아서 단위시간당 처리할 수 있는 입력의 수가 같다면 유사한 값을 가졌을 것으로 보이나, non-folded FIR filter가 약 3.52 배 빠르게 동작하기 때문에 더 많은 power를 소모한 것으로 추정된다. 따라서 이러한 분석 결과를 통해, 만약 입력이 106.4MHz보다 빠르게 들어온다면 지난 실험에서 설계한 low-cost FIR filter를, 30.2MHz ~ 106.4MHz 사이의 속도로 들어온다면 non-folded FIR filter를 사용해야겠지만, 그렇지 않은 느린 입력의 경우 위의 두 filter보다 본 실험에서 설계한 folded FIR filter 를 사용하는 것이 면적 면에서 더 효율적임을 알 수 있었다.

반응형
profile

while(1) work();

@유호건

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

검색 태그