ALU–상태 레지스터–시프터–제어단어
연산 기호
Electronic symbol - Wikipedia
From Wikipedia, the free encyclopedia Pictogram used to represent various electrical and electronic devices or functions Common circuit diagram symbols (US ANSI symbols) An electronic symbol is a pictogram used to represent various electrical and electroni
en.wikipedia.org
1) 산술논리연산장치(ALU)
역할
레지스터에서 온 두 입력(A, B)에 대해 산술/논리 연산을 수행하는 조합논리 회로. 결과는 버스/레지스터로 나가고, 부수적으로 상태 플래그(C,Z,N,V)를 산출.
구성 느낌
- 입력 선택: MUX_A, MUX_B가 각각 ‘어느 레지스터를 A/B로 보낼지’를 선택
- 핵심 연산부: 가산기(전가산기들의 병렬 연결) + 논리 게이트 묶음
- 연산선택: F[ ](예: 4비트)가 어떤 연산을 할지 고름
대표 연산(예)
- 산술: ADD(A+B), SUB(A−B), INC(A+1), DEC(A−1), NEG(2의 보수), PASSA(A), PASSB(B)
- 논리: AND, OR, XOR, NOT(A), NAND, NOR, XNOR
- (필요시) 비교: CMP(A−B) → 결과는 버리지 않고 플래그만 갱신
F[3:0] (또는 s2 s1 s0 sX, 4비트 제어 코드, opcode/selector)에 매핑
원칙: 논리 연산은 Cin 무시, 산술/회전 일부만 Cin 사용.
g=0 -산술/논리
s2 s1 s0 | cin | Mnemonic | F(출력식) | 오퍼랜드·Carry-in 해석
---------+-----+----------+----------------------------+------------------------------------------
0 0 0 | x | PASSA | F = A | A=사용, B=무시, cin=무시
0 0 1 | x | PASSB | F = B | A=무시, B=사용, cin=무시
0 1 0 | 0 | ADD | F = A + B | A=사용, B=사용, cin=0(강제)
0 1 0 | 1 | ADC | F = A + B + 1 | A=사용, B=사용, cin=1(외부 입력)
0 1 1 | 1 | SUB | F = A + (~B) + 1 (=A−B) | A=사용, B=사용(~B), cin=1 → borrow 없음
0 1 1 | 0 | SBC | F = A + (~B) + 0 (=A−B−1) | A=사용, B=사용(~B), cin=0 → borrow 1
1 0 0 | x | AND | F = A AND B | A=사용, B=사용, cin=무시
1 0 1 | x | OR | F = A OR B | A=사용, B=사용, cin=무시
1 1 0 | x | XOR | F = A XOR B | A=사용, B=사용, cin=무시
1 1 1 | x | NOT | F = ~A | A=사용(반전), B=무시, cin=무시
g=1 쉬프트/회전/증감
s2 s1 s0 | cin | Mnemonic | F(출력식) | 오퍼랜드·Carry-in 해석
---------+-----+----------+-----------------------------------------+-----------------------------------------------
0 0 0 | x | INC | F = A + 1 | A=사용, B=0(강제), cin=1(내부 강제) ※가산기 재사용
0 0 1 | x | DEC | F = A − 1 (=A + ~1 + 1) | A=사용, B=1(강제, 내부 ~1), cin=1(내부 강제)
0 1 0 | x | SHL | F = A << 1 | A=사용, B=무시, cin=무시, C=MSB 유출 비트
0 1 1 | x | SHR | F = A >> 1 (LSR/ASR 중 설계로 결정) | A=사용, B=무시, cin=무시, C=LSB 유출 비트
1 0 0 | 0 | ROL0 | F = (A << 1) | 0 | A=사용, B=무시, cin=0(강제), C=MSB 유출 비트
1 0 0 | 1 | ROL | F = (A << 1) | 1 | A=사용, B=무시, cin=1(외부 입력), C=MSB 유출
1 0 1 | 0 | ROR0 | F = (A >> 1) | (0 << (n−1)) | A=사용, B=무시, cin=0(강제), C=LSB 유출
1 0 1 | 1 | ROR | F = (A >> 1) | (1 << (n−1)) | A=사용, B=무시, cin=1(외부 입력), C=LSB 유출
1 1 0 | x | PASSA | F = A | A=사용, B=무시, cin=무시 (예비/유지보수용)
1 1 1 | x | NOP/RES | F = F | 변경 없음(예비 코드로 예약)
실제 설계에서는 “어떤 코드가 어떤 연산인지” 표로 고정해 놓고, 제어단어의 F 필드가 그 코드를 내보냅니다.
2) 상태 레지스터(플래그 레지스터)
역할
ALU/시프터 수행 직후 결과의 성질(상태)을 기억. 분기/조건부 연산의 근거.
자주 쓰는 플래그
- Z (Zero, 결과가 0인지): 결과가 0이면 1
- N (Sign, 부호가 뭔지): 결과의 최상위 비트(MSB, 부호비트)가 1이면 1
- C (Carry, 올림작업이 있었는지): 무부호 덧셈의 자리올림 / 뺄셈의 자리빌림 발생 시 1
- V (Overflow, 오버플로우가 있었는지): 부호 있는 덧셈/뺄셈에서 수 범위 초과(산술 오버플로) 시 1
주의점(시프터 포함 시)
- ADD 후 바로 SHL(왼쪽 시프트)을 하면 최종 결과는 시프터 출력. 플래그를 ALU 결과 기준으로 잡을지, 시프터 결과 기준으로 잡을지 아키텍처 정책으로 정해야 해요. 보통 “마지막에 데이터 경로에 있는 블록” 기준(= 시프터 결과)으로 플래그를 갱신합니다.
3) 시프터(Shifter)
역할
ALU 결과(또는 A/B 입력)를 비트 단위로 이동/회전.
대표 동작(예)
- SHL(논리 왼쪽 시프트): LSB에 0 주입, MSB 탈락 → C에 탈락 비트 저장 가능
- SHR(논리 오른쪽): MSB에 0 주입
- SAR(산술 오른쪽): MSB(부호) 유지하며 우시프트
- ROL/ROR(회전): 탈락 비트가 반대편으로 들어옴
- RCL/RCR(캐리 포함 회전): C까지 포함해 1비트 링처럼 굴림
- NOP: 시프트 없음(통과)
실장 팁
멀티플렉서 체인으로 1/2/4/8비트 단위 선택 시프트를 저지연으로 구성하거나, 배럴 시프터 구조를 사용.
4) 제어단어(Control Word)
정의
“이번 클럭에서 무엇을 할지”를 한 덩어리 비트로 표현한 제어변수(선택신호)의 묶음.
예시 시스템(문제에서 준 스펙)
- 레지스터 7개: R1~R7
- ALU 연산 12개
- 시프터 연산 6개
- 제어단어 필드 구성(총 16비트)
- A[2:0] : ALU A 입력 소스 선택 (3비트 → 8개 소스 가능)
- B[2:0] : ALU B 입력 소스 선택 (3비트)
- D[2:0] : 목적지 레지스터 선택 (3비트)
- F[3:0] : ALU 연산 선택 (4비트 → 16개 중 12개 사용)
- H[2:0] : 시프터 연산 선택 (3비트 → 8개 중 6개 사용)
합계 3+3+3+4+3 = 16비트. 하드웨어에서는 이 16비트가 각 블록의 선택선으로 펴져 들어갑니다.
A/B/D/H 인코딩 예
- A/B/D는 (000~110) → R1~R7, 111 → (상수0/1/PC 등 확장) 같은 식으로 정의해 둘 수 있어요.
- H는 000:NOP, 001:SHL, 010:SHR, 011:SAR, 100:ROL, 101:ROR, 110~111:미정 등.
제어단어 작성 예 1
R3 ← R1 − R2 (시프트 없음)
- A = code(R1)
- B = code(R2)
- D = code(R3)
- F = SUB
- H = NOP
→ CW = A | B | D | F | H (비트 자리에 맞춰 결합)
제어단어 작성 예 2
R0 ← SHL( R1 + R2 )
- A = R1, B = R2, D = R0, F = ADD, H = SHL
- (정책) 플래그는 시프터 결과 기준으로 SETF=1 시 래치
실제 마이크로코드/제어기억장치에서는 위 제어단어들이 순서대로 저장되어 있고, 제어장치(하드와이어드 FSM 또는 마이크로시퀀서)가 이를 읽어 각 사이클에 배포합니다.
5) 마이크로연산 실행 흐름
예: R0 ← SHL( R1 + R2 )
- 소스 선택: A←R1, B←R2 (A/B MUX 선택)
- ALU 연산: F=ADD → Sum 산출, 임시 C/V 계산
- 시프터: H=SHL → 최종 결과 ShOut
- 플래그 래치: SETF=1 → Z/N/C/V 갱신(시프터 기준)
- 적재: D=R0, LD_R0=1 → R0에 기록
6) ALU/시프터가 수행하는 연산
ALU 산술(예)
- ADD, ADC(캐리포함), SUB, SBB(보로우 포함), INC, DEC, NEG, CMP(플래그만)
ALU 논리(예) - AND, OR, XOR, NOT, (옵션) NAND/NOR/XNOR, CLEAR(0), SET(−1)
시프터(예) - SHL/SHR/SAR/ROL/ROR, (옵션) RCL/RCR, NOP
플래그 발생 규칙(대표)
- Z: 결과 == 0
- N: 결과 MSB
- C: ADD 시 최상위 자리올림, SUB 시 A<B(무부호 기준)일 때 1, 시프트 시 탈락 비트
- V: 부호있는 연산에서 오버플로(예: A=+127, B=+1, 8비트 ADD → −128)
'Computer > Computer Architecture' 카테고리의 다른 글
| 처리장치(I) (0) | 2025.10.13 |
|---|---|
| 컴퓨터 명령어(II) (0) | 2025.10.13 |
| 디지털논리회로(II) 및 컴퓨터 명령어(I) (0) | 2025.10.13 |
| 컴퓨터 구조의 개요 및 디지털논리회로(I) (0) | 2025.10.13 |