[SRAM-PIM Core Circuit] Design 4-bit Adder

"4-bit Adder"

HA & FA

HA(Half Adder)
→ 1-bit 이진수 2개를 더하는 회로
→ 입력 2개(A, B) & 출력 2개(Sum, Carry)
→ 이전 자리에서 올라온 Carry를 받을 수 없음

FA(Full Adder)
→ 1-bit 이진수 2개와 하위 단계에서 올라온 Carry까지 포함하여 총 3-bit를 더하는 회로
→ 입력 3개(A, B, Cin) & 출력 2개(Sum, Cout)

RCA (Ripple Carry Adder) (Ex. 0010 + 0110 + 1010 + 1111 = 100001)

→ 하위 bit에서 발생한 Carry가 상위 bit로 순차적으로 전달
→ Full Adder를 일렬로 연결한 구조로, i번째 FA의 Carry 출력이 i+1번째 FA의 Carry 입력으로 연결
→ 회로 설계가 매우 단순하고 전력 소모↓
→ 상위 bit는 하위 bit의 계산이 끝날 때까지 기다려야 하므로, bit 수가 늘어날수록 Delay 증가

Result
2 : "input.ckt" 파일의 전체 내용을 불러옴
3 : 공정 모델 코너 "toplevel.l"에서 "top_tt" 부분만 불러옴
5~6 : [전압원 이름] [(+) 노드] [(-) 노드] [전압 크기]
8~10 : 상수 값 설정
12~15 : 0010 (bit에 "1"이 저장된 port는 501ps에서 1V로 변환)
17~20 : 0110 (bit에 "1"이 저장된 port는 501ps에서 1V로 변환)
22~25 : 1010 (bit에 "1"이 저장된 port는 501ps에서 1V로 변환)
27~30 : 1111 (bit에 "1"이 저장된 port는 501ps에서 1V로 변환)
32 : 10ps 간격으로 2ns까지 Simulation 진행
33 : 그래프를 확인하기 위한 파일 생성

3번째 줄을 주석처리 한 이유 : "input.ckt"파일에 동일한 코드가 있어서 중복으로 오류 발생


                왼쪽 그림 : 0010 + 0110        |        가운데 그림 : 왼쪽 결과 + 1010        |        오른쪽 그림 : 가운데 결과 + 1111

100001
500ps 부근에서 튀는 원인은 이전 단계에서 Carry를 받지 못해서이고, 이후 Carry값을 받고 안정해진다.

CSA (Carry Save Adder) (Ex. 0010 + 0110 + 1010 + 1111 = 100001)

→ 3개 이상의 수를 더할 때 효율적이며, Carry를 상위 bit로 바로 보내지 않고, 다음 단계로 저장
→ 각 bit 위치에서 독립적으로 덧셈을 수행, 입력 3개를 받아 Sum과 Carry, 두 개의 벡터로 출력(3:2)
→ Carry Propagation(전파)가 발생하지 않아 속도가 매우 빠르며, bit 수와 상관없이 Delay 일정
→ 최종적으로 두 개의 벡터(Sum, Carry)를 하나로 합치기 위해 마지막 단계에 RCA 또는 CLA 같은 일반 가산기 하나 필요

3단계 LSB는 입력이 하나뿐이므로 오른쪽 그림과 같이 그냥 전선으로 연결하여 출력 값을 나타내도 된다.


Result
RCA의 sp 파일과 동일

왼쪽 그림 : 0010 + 0110 + 1010        |        가운데 그림 : 왼쪽 결과 + 1111        |        오른쪽 그림 : 가운데 결과 RCA 계산

100001
500ps 부근에서 튀는 원인은 이전 단계에서 Carry를 받지 못해서이고, 이후 Carry값을 받고 안정해진다.

댓글

이 블로그의 인기 게시물

[Mini-NPU RTL] NN Reference Model

[Mini-NPU RTL] TPU (Study Paper)