6월, 2011의 게시물 표시

Pipelined MIPS Processor

이미지
거창하게 pipelined MIPS proessor라고 써놓았지만 만드는 방법에 대한 얘기는 아니다 이번 학기에 5-stage pipelined MIPS processor를 구성하고 주어지는 app에 대한 ASIP으로 optimization한 적이 있는데 그것에 대한 얘기 일단 현재 만들어진 것의 performance는 다음과 같다. 요건 compilation report total logic elements가 5235개 인것을 확인할 수 있다. 자세한 내용은 일단은 ALU multiplier가 포함된 size이며 multiplier는 booth encoding을 하지 않은(...) tree구조의 multiplier가 사용되었다. 그래서 먼저 booth encoding부터 시작해야겠고, register file에 swap logic이 있기 때문에 그 부분에 사용된 로직이 크다.(딜레이도 크다... 굉장히) 그래서 clock rate는 28.67MHz(period는 35ns)인데, swap logic이 추가되기 전에는 multiplication도 25ns까지 나왔지만 갑자기 부왘 하고 그래서 output port(이거 안뽑아주고 리셋하고 클락만 넣으면  극강 synthesize해버려서 작동을 안한다-_-) 당연히 ALU와, register file에 접근할 때 두 경우를 일단 반으로 뚝 짤라주면 간단하게도 큰 성능향상이 얻어질 수 있을것 같다. 요건 35ns로 simulation한 결과 x = 12의 sum of factorial(∑(n!))이 3179ns에 얻어지며 10개의 수를 bubble sort한 결과(register를 8개만 사용했을 때)가 2907ns에 얻어지는 것을 확인할 수 있다. 일단은 계절*-_-*학기를 마쳐야하지만 요걸 심각하게 pipelining해보는 것이 주...

Carry Look-ahead / Carry Select Adder

이미지
그리하여 carry look-ahead 라는 logic이 등장하게 되는데, 이것은 전단계에서 발생할 carry를 기다리지 말고 sum을 주구장창 계산하고 있을때  미리 carry를 계산해서 넣어준다는 adder이다. 이는 다음과 같은 연산에 의해 가능해지는데, 로 해당하는 block의 carry out을 얻을 수 있다. 이를 다음 단계의 carry out에 대입하고, 또 하고, 또 하면 다음 그림과 같은 4-bits carry look-ahead block을 만들 수 있다. 한 gate의 delay를 d라고 할 때, 이 4-bits CLA block에서는 처음 p, g를 뽑을 때 1d 그리고 그로부터 Cout을 뽑을 때 2d의 delay가 발생한다. 그렇다면 최종 3d RCA에서는 각 Cout을 발생하는 데 2d의 delay가 발생하므로 4-bits에서는 8d만큼의 delay가 발생한다. 이 CLA block을 사용하여 또한 serial 연결하여 많은 bit 를 가진 수를 연산할 수 있는데, 물론 각 block의 carry는 ripple되는 것과 마찬가지이지만 어쨌거나 RCA보다 빠르긴 빠르다. Carry Select Adder는 전단계에서 carry를 받아서 계산하지 않고 0 혹은 1 두가지 경우를 모두 계산한 뒤 위와 같이 구성한 CLA block에서 연산한 carry에 따라 이를 multiplex하여 결과값을 얻는다. CSLA(걍 CSA라고 쓰면 skip, save 등 다른 adder들과 혼동의 우려가 있다)에서는  CLA adder와 달리 8-bits block을 보통 사용하는데 이는 MUX의 추가에 따른 delay 때문이다. 하여튼간 CSLA를 구성해본 모습은 다음과 같다. 요건 8-bits CLA unit 오호 이렇게 따로따로 32-bits adder를 구현하고 Quartus에서 sy...

RCA

이미지
Ripple carry adder는 간단히 full adder를 serial 연결하여 구성한다. 그러면 아래와 같은 그림을 얻을 수 있는데, 요렇게 하면 간단히 4-bit add operate를 수행할 수 있다. 그러나... 다음 단계의 FA는 전 단계 FA에서 Cout을 발생시켜서 넘겨줄 때까지 기다린 후에 연산을 수행하기 때문에 delay가 크다. 총 delay t는 각 full adder의 delay를 모두 합친 값이 된다. 따라서 critical path는 모든 FA에서 carry가 발생할 때이며 각 FA의 input에 a|b = 0 이 성립하지 않는 이상 carry out은 carry input(전단계의 carry out)에 의존하므로 기대할 수 있는 delay도 크다. 장점은, 1.작다. 2. 만들기가 쉽다. 3. 작아서 전력소모가 작다. 와 같은 별 매력없는 장점을 가지고 있다. 4-bits 연산이나 8-bits 연산 등 optimization하지 않아도 충분히 빠른 결과를 얻을 수 있을 때 사용될 수 있다. (아니면 상위 module을 미친듯이 pipelining을 하거나......) 후문으로는 이번에 Digital logic 1을 재수강할때 중간고사 대체로 8-bits RCA를 만들었었는데.... 보고서에 full adder를 boolean equation을 K-map도 안그리고 뽑아냈다고 감점을 훈훈하겤ㅋㅋㅋㅋ B+ 맞았는데 조교가 짜증나니까 그냥 넘어가기로 한닼 하이튼간 그리하여.... A. Weinberger횽과 J. L. Smith횽이 1958년에 Carry Lookahead Adder를 발표하게 된닼ㅋㅋ 그럼 다음은 CLA에 대해 쓰겠구나