반가산기
- 2진수 1비트 덧셈 연산하는 회로
- 자리 올림을 입력 받지 않아 반쪽짜리 가산기란 의미
전 가산기
- Full Adder
- 자리올림을 포함한 전체 덧셈 회로
- 전 가산기 = 반가산기 2개 + OR 게이트
4 비트 가산기
- 전가산기 4개를 이어 만듬
A3210 B3210
- 0011 + 1011
A B C
1. 1+1+0(C) = 0(S)/1(C)
2. 1+1+1(C) = 1(S)/1(C)
3. 0+0+1(C) = 1(S)/0(C)
4. 0+1+0(C) = 1(S)/0(C)
=> 0011 + 1011 = 1110
8비트 가산기 기호
기억장치와 가산기의 연결
- 가산기를 사용 후 결과를 기억할 수 없음 -> 기억장치와 가산기를 연결
1. 8비트 가산기 입력으로 D 플립플롭 램 연결
2. 램 위에 스위치 연결
3. 입력 A의 플립플롭 위에 멀티플랙서 MUX 추가 -> 스위치 or 가산기 결과 둘 중하나를 선택해서 보냄
2-입력-1-출력-멀티플렉서
- 멀티플렉서(Multiplexor:MUX) : 2개의 입력 신호 중 1개를 선택해서 출력
가산기의 계산
- 10 + 4+ 18 + 21 + 36 + 37 + 5의 계산
- 10(A), 4, 18, ..., 5는 입력 B를 통해서 입력
1. 처음에는 스위치 A와 스위치 B로 입력
2. 가산기의 계산 결과가 입력 A로 다시 들어감
가산기 + 기억 장치의 계산 흐름
레지스터
- 연산 장치의 값을 저장하기 위한 작은 메모리
- 중간에 레지스터가 없는 경우 가산기 출력 동시에 바로 입력이되어 잘못된 계산 수행 가능하여 이를 방지
- 레지스터는 플립플롭/SRAM/DRAM 중 가장 빠른 플립플롭으로 만듬
2진수의 음수 표현
- MSB를 부호 비트(sign bit)로 사용
- 0110100 : MSB가 0이므로 양수, 0110100(2) = +52(10)
- 1110100 : MSB가 1이므로 음수, 1110100(2) = -52(10)
2진수의 뺄셈
- 2진수의 뺄셈 = 2진수 + 2진수의 2의 보수
- 1111 - 0010 = 1101
- 1111 + 1110(0010의 2의 보수) = 1101
=> 뺼셈을 덧셈으로 구현 가능
전자석 -> 릴레이 -> 인버터 -> (+피드백 연결) -> 오실레이터 (클럭)
게이트 : 트랜지스터 -> 논리 게이트
기억 장치 : R-S 래치 -> R-S 플립플롭 -> J-K 플립플롭 -> D 플립플롭 -> 1바이트 램 -> 8 바이트 램
-> 8바이트 플립플롭 램 + 어드레스 디코더 + 쓰기 스위치 + 읽기 버퍼/SRAM/DRAM
연산 장치 : 반 가산기 -> 전 가산기 -> 8비트 가산기
프로그램 카운터+주기억 장치가 추가 된 회로
- 가산기 + 레지스터 회로는 일일이 계산할 값과 CLK를 넣어야 계산 됨
- 10, 4, 18, 21, 36, 37을 한번에 입력한 후 디지털 회로가 알아서 계산하도록 자동화
-> 프로그램 카운터 + 주기억 장치 추가
DEMUX
- demultiplexor)의 약어
- 멀티 플렉서의 반대 동작. 하나의 입력을 여러 곳 중 하나로 출력
주기억장치 64KB SRAM
- 64KB 크기 -> 0x0000 ~ 0xFFFF 범위 -> 2^10(키로바이트) * 2^6(64)
-> 2^16 이므로 어드레스 디코더는 16비트 주소 핀 필요
- 1바이트(8비트) 입력과 1바이트(8비트) 출력
프로그램 카운터
- Program Counter(PC)
- 명령어의 위치(주기억 장치 메모리 주소)를 가리킴
-> 주기억 장치의 어드레스 디코더와 연결
- 아직 명령어 개념 설명 전이므로 8비트 가산기 계산 결과 값이 저장되는 위치를 가리킴
- 카운터는 1씩 증가 -> 다음 주소를 가리키기위해서
프로그램 카운터 전용 16비트 가산기
- CLK가 한번 입력 될때마다 프로그램 카운터 출력 값을 1씩 증가
주기억 장치로 PC 입력하기
- 1 + 9 + 10 + 12 + 21 + 40 + 37 연산
1. 위 7개 수를 주기억 장치에 입력
- R/W : 0(쓰기 모드)
- 스위치 8개로 8비트 2진수로 입력
- 각 수를 입력 할때마다 SRAM, PC에 CLK 입력
=> 7개의 수가 0x0000 ~ 0x0006 까지 SRAM에 저장
2. PC의 CLR 신호에 1을 주어 PC 카운터 저장 값을 0으로 바꿈
-> PC가 가리키는 주소는 한칸씩 내려감
3. 0x0000을 레지스터 A에 입력하기
- 2번 단계서 프로그램 카운터 값을 0으로 바꿈 -> 0x0000이 SRAM에 전달
- R/W에 1로 읽기 상태 + 0x0000(Address Decoder) -> 해당 주소 값이 출력
- DEMUX의 SEL을 0으로 -> SRAM 출력은 A로 간다 -> 레지스터 A 위 MUX를 SEL 1하여 레지스터 A로 입력시킴
4. 0x0001을 B에 입력하기
- PC의 CLK가 입력되어 PC가 1 증가
- ADDRESS DECODER는 0x0001번지 읽음
- DEMUX SEL을 1로 지정하여 레지스터 B로 전달
5. 0x0006까지 연산
- 레지스터 값을 A+B 연산 후 레지스터 A의 먹스 SEL 0으로 설정하면 연산 결과를 레지스터 A에 저장
- PC 카운터가 1씩 증가하여 0x0000 ~ 0x0006 까지 값이 출력되며 덧셈 연산
=> 연산 종료 시 PC의 값은 7이 됨.
6. 계산 결과를 다시 주기억 장치에 저장하기
- 0x0007의 값이 레지스터 A에 남음 -> SRAM에다 저장 필요
- SRAM 위에 3입력 MUX 추가하여 레지스터 A와 B의 출력 + 8개 스위치를 받도록 연결
- 3입력 먹스 : 스위치 입력 (0,0), 레지스터 A 출력 (1, 0), 레지스터 B 출력 (0, 1)
- PC가 7을 가리킬 때, SEL0[1], SEL1[0]으로 하여 레지스터 A 값을 SRAM으로 전달
- SRAM의 R/W를 0으로 하여 쓰기 모드시 0x0007에 연산 결과를 저장
로드와 스토어
- 로드 : 주기억 장치 값을 읽어 레지스터 A,B에 옮김
- 스토어 : 레지스터 값을 주기억 장치에 저장
=> 컴퓨터 작업은 로드와 스토어들의 연산
* 그레픽 카드를 제어하는 주소에 스토어 시 모니터에 그림, 글씨 출력
* 사운드 카드 제어하는 주소에 스토어 시 소리가 출력
=> 데이터를 스토어하는 위치에 따라 출력 형식이 바뀜
'컴퓨터과학 > 컴퓨터, OS' 카테고리의 다른 글
기계어~OPCODE (0) | 2020.04.25 |
---|---|
ALU~보조기억장치 (0) | 2020.04.24 |
메모리~램 (0) | 2020.04.23 |
인버터~플립플롭 (0) | 2020.04.23 |
디지털 ~ 릴레이 (0) | 2020.04.23 |