728x90

반가산기

- 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에 옮김

- 스토어 : 레지스터 값을 주기억 장치에 저장

=> 컴퓨터 작업은 로드와 스토어들의 연산

 * 그레픽 카드를 제어하는 주소에 스토어 시 모니터에 그림, 글씨 출력

 * 사운드 카드 제어하는 주소에 스토어 시 소리가 출력

 => 데이터를 스토어하는 위치에 따라 출력 형식이 바뀜

300x250

'컴퓨터과학 > 컴퓨터, OS' 카테고리의 다른 글

기계어~OPCODE  (0) 2020.04.25
ALU~보조기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
인버터~플립플롭  (0) 2020.04.23
디지털 ~ 릴레이  (0) 2020.04.23

+ Recent posts