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에서 synthesize해본 결과
각 module의 size는 다음과 같이 측정되었다.
(물론 synthesize 결과로 module간 logic을 공유하므로 정확하지 않다.)
CLA_ADDER_2는 매 bits마다 carry를 계산해서 넘겨주는 뻘module이다. slow model에서
input부터 output port(cout)까지의 propagation delay는 다음과 같은 모습을 보인다.
따라서 CLA adder < CSLA < RCA < 뻘module
순으로 빠르다는 것을 알 수 있다.
하지만 RCA의 size가 1/2 수준인 것을 볼 수 있는데
이에서 꼭 high-speed module이 필요하지 않다면
RCA를 사용하는 것에서 더 efficiency를 얻을 수 있다는 것을 알 수 있다.
CLA adder같은 모두다 알고있는 module을 쓸려니
그림도 하나도 안넣게 되었......
어제 광운대 컴퓨터소프트웨어학과 4학년 이모씨가
저건 책에 다 있는내용아니냐 그래서
CLA만 쓸려다가 CSLA까지 썼따
딜레이 비교까지 썼따
하이튼 다음은 그 외 (책에 안나오는) 자잘한 adder들에 대해 한번






댓글
댓글 쓰기