800 likes | 1.11k Views
32 비트 캐리 예측 덧셈기 (CLA). RCA(Ripple Carry Adder) Simple but slow due to the long carry propagation path. CLA(Carry Look ahead Adder) 의 원리. Carry generate function G i = A i • B i : C i-1 에 관계없이 C i =1 이 됨 . Carry propagation function P i = A i B i : C i-1 에 따라 C i 가 생성됨 .
E N D
32비트 캐리 예측 덧셈기(CLA) RCA(Ripple Carry Adder) Simple but slow due to the long carry propagation path
CLA(Carry Look ahead Adder)의 원리 • Carry generate function • Gi = Ai • Bi : Ci-1에 관계없이 Ci=1 이 됨. • Carry propagation function • Pi = Ai Bi : Ci-1에 따라 Ci가 생성됨. • Pi, Gi 는 동시에 생성가능. • Si = (Ai Bi) Ci-1 = Pi Ci-1로 쓸수 있음. • Ci = Ai • Bi + (Ai Bi) • Ci-1 = Gi + Pi • Ci-1로 쓸 수 있음. • 따라서 • C0 = G0 + P0 • C-1 • C1 = G1 + P1 • C0 = G1 + G0 • P1 + P0 • P1 • C-1 • C2 = G2 + P2 • C1 = G2 + G1 • P2 + G0 • P1 • P2 + P0 • P1 • P2 • C-1 …. • Pi와 Gi동시 발생되므로, C0만을 이용하여 Ci(i>0) 를 모두 동시에 구할 수 있다
CLA 의 블록 다이어그램 PGU : Propagate / Generic unit CLU : Carry Look ahead Unit : C(nio)생성, SU : Summation Unit
하위레벨 component의 VHDL 모델링 • 32 비트 CLA 를 4비트 BCLU (Block CLU)와 8비트 CLU를 이용하여 2-level 로 모델링 함.
BCLU • 32 비트 CLU는 fanin이 너무 크기 때문에, 8개의 4비트 BCLU 와 1개의 8비트 CLU 를 이용하여 그림과 같이 구성한다.
Cont’d • 임의의 k 번째(0 =< k =< 7) BCLU 는 각 비트의 Pi, Gi와 1-비트의 Cin을 입력으로 C4k, C4k+1, C4k+2와 블록 전달함수 Pk*, 블록 발생함수 Gk*를 출력으로 생성한다. • C4k+3 = Gk* + Pk* • Cin으로 표시됨. • Gk*, Pk*는 상위레벨 CLU에 입력되어, C4k+3(k=0….7)을 동시에 생성하는데 사용됨. • Gk* = G4k+3 + G4k+2 • P4k+3 + G4k+1 • P4k+3 • P4k+2 + G4k • P4k+3 • P4k+2 • P4k+1 • Pk* = P4k • P4k+1 • P4k+2 • P4k+3
8-bit CLU(Carry Look ahead Unit) • C-1과 8개의 BCLU에서 온 Pk*, Gk* 를 입력으로, (C4k+3, 0=<k=<7) 생성. • C4k+3 = Gk* + Gk-1 • Pk* + …+ G0* • Pk* • Pk-1* •… + C-1 • Pk* • Pk-1* •… P0* (0=<k=<7)
SU(Summation Unit) • 32-비트 Pi, 32-비트 Ci를 입력으로, 32-비트의 합 Si(0=<i=<31) 생성 • 블록다이아그램
전체 CLA의 모델링 • Block Diagram
CLA 설계에 대한 검증 • TB-CLA : 두개의 입력파일 “in_file1”과 “in_file2”를 읽어 들여 덧셈을 수행함. 연산결과 Carry와 Sum을 “out_file1”, “out_file2”에 기록함. => 테스트 입력파일 수정만으로 새로운 테스트 가능(source 수정 없이) • Library std.textio.all; 추가 필요 • VHDL 모델
UIM(Universal Indirect Multiplier) UIM 32-비트 CLA 이용 US(Unsigned), SM(Signed Magnitude), OC(One’s Complement), TC(Two’s Complement) 의 4 가지 Fixed-point number system 으로 표현되는 수의 곱셈을 add-shift 방식의 간접 곱셈을 통해 수행하는 32-비트 곱셈기
0 0 1 1 (3) X 0 1 0 1 (5) 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 (15) (피승수) (승수) <- 승수가 1 이면 피승수를 더함. <- 승수가 0 이면 0 을 더함. <- 승수가 1 이면 피승수를 더함. <- 승수가 0 이면 0 을 더함. (곱셈 결과) UIM(Universal Indirect Multiplier) • add-shift 방식 곱셈
UIM(Universal Indirect Multiplier) • Data Path 구조 • MR: 승수, AX: 피승수 저장, 최종결과: AC-MR에 저장 • MR 은 한 바이트씩 오른쪽으로 shift • 입력 X, Y: Mode(US, SM, OC, TC) 결정 • 수의 모드에 따른 UIM의 동작(Slide 5) • Data load, cycle, n-비트 add-shift에 n-cycle 소요 • SM 의 경우 음수인 피 연산자의 부호 비트를 보수 취하는 동작 필요 • OC 의 경우 음수인 피 연산자와, 연산 결과 값을 1의 보수를 취하기 위해 두 사이클 더 필요 • TC: 1의 보수에 1을 더하기 위해 OC 보다 두 사이클 더 필요 • n=32 인 경우 • US(=33), SM(=35), OS(=35), TC(=37) 사이클씩 필요함
UIM 제어기 • UIM 제어기 • 표 4.1 에 따른 동작 제어 위해 C0 ~ Cn+4사이클 제어 신호 발생 • 각 Register 에 대한 제어신호(2비트씩) 할당
Package 선언 • Package 선언 • 필요한 함수 선언 위해 “Arith-Pack” Package • Function cmp: 1의 보수 취하기 • Function shiftr: 1-비트 carry와 32-비트 수를 1-비트 오른쪽으로 이동시키는 함수 • Function INC: 2의 보수 구하기 위해 1의 보수 후에 1 증가시키는 함수
AC 레지스터 • AC 레지스터 • MR과 함께 shift 됨 • EAC(enable 신호)가 활성화된 상태에서 ac0와 ac1의 값에 따라 rising edge 에서 AC load, clear, 1의 보수, 1의 증가 기능 수행함
MR 레지스터: 승수저장, 부분 곱 하위 부분 저장[VHDL 소스]