728x90

1. 소개

 

목표

- 컴퓨터가 어떻게 동작하는지

- 문제를 어떻게 처리하는지

- 하드웨어와 소프트웨어를 어떻게 개발하는지

 

객체 지향 언어로 작성한 코드 예시

(아래는 이 책에서 구현하는 Jack이라는 언어를 사용)

class Main {
	function void main(){
    	do Output.printString("Hello World");
        do Output.println(); //new string
        return;
    }
}

 

코드

- 텍스트 파일에 저장된 문자들

 

어떻게 프로그램이 동작할까?

1. 코드를 파싱

2. 의미를 분석

3. 컴퓨터가 이해하는 저급 언어로 변환

 

기계어

- 2진법으로 구성된 추상적인 언어

- 기계어로 코딩하려면 하드웨어 아키텍처에 대해 알아야 함

 

하드웨어 아키텍처

- 레지스터, 메모리, ALU 등 하드웨어 장치들로 구성

 

하드웨어 장치

- 위 하드웨어 장치들은 논리 게이트로 만들어짐.

 

논리 게이트

- AND, NOT, OR, NAND, NOR 등

 

스위치 회로

- 하드웨어 구성에 필요한 스위치에 트랜지스터를 사용

 

우리가 그동안 배운 컴퓨터 시스템은 빙산의 일각이며,

아래의 내용들을 이해해서 프로그램 코딩 구현 뿐만이아니라 하드웨어와 소프트웨어를 다룰수 있게 됨.

=> 이 기술들을 이해할 수 있도록 밑바닥 부터 컴퓨터를 만들어 보자

 

컴퓨터

- 논리 게이트로 만들 수 있음.

 

모듈

- 매우 복잡하니 모듈이란 개념으로 분리해서 다룸

 

추상화

- 예술과 과학 분야 에서 자주 사용

- 생각이나 특정 개채를 분리하기 위한 개념

 

컴퓨터 과학에서 추상화

- 매우 많이 쓰임

- 이 개체가 뭘하는건지를 의미함

- 어떻게 동작하는지 세부적인건 X

=> 사용자들은 어떻게 만들어지는지 몰라도 되고 쓰는 법만 알면 됨.

 

개발자의 추상화

- 하드웨어/소프트웨어 개발자는 인터페이스라 부르는 추상화 작업을 자주 해야함

- 추상화를 한 층 한층하면서 상위 레벨로 올라가 다양한 역활을 하게 됨

 

컴퓨터 시스템 설계 추상화

- 탑다운 방식으로 나타낼 수 있음.

 -> 고 레벨 추상화를 단순화

- 바텀 업으로 나타 낼 수 있음

 ->저 래밸 추상화를 모아 복잡하게 상위로

 

탑 다운으로 보는 학습 내용

- 고급 언어

- 고급 언어 ~ 하드웨어

    -> 고급 언어를 기계어로 변환 과정

-하드웨어 플랫폼

 

고급언어

 

개발자가 개발시 필요한 것

- 고급 언어와 라이브러리

 

예시 do Output.printString("Hello world").

위 코드의 경우 문자열 출력(printString)을 하기위해 이미 구현된 라이브러리를 사용함.

=> OS와 표준 언어 라이브러리가 필요

 

표준 언어 라이브러리는 뭐고, 운영 체제가 어떻게 동작할까?

- 수학 관련 함수

- 메모리 할당 함수

- 입출력 루틴

- 문자열 처리 등이 사용됨.

 

잭(Jack)

- C언어 비슷한 객체지향 언어

 

고급언어 ~ 하드웨어

- 프로그램을 실행하려면 동작하는 컴퓨터 플랫폼(타겟 컴퓨터)의 기계어로 변환해야함

 -> 컴파일

 

컴파일

- 여러 추상화 레이어로 나눌 수 있음

- 컴파일러, 가상 머신, 어셈블러

 

컴파일러가 하는일

- 컴파일러의 변환 작업은 문법 분석과 코드 생성을 수행함.

- syntax analysis : 소스 코드를 분석해서 의미 단위들을 파스 트리(parse tree)라는 데이터 구조로 나눔.

- 파스 트리를 재귀적으로 처리해서 중간 코드 생성

 

중간 코드(Intermdeiate Code)

- 소스 코드를 표현하기 위해 컴파일러나 가상머신에서 내부적으로 사용하는 코드

 

가상 머신(Virtual Machine)

- 스택 구조

- 컴파일러에서 생성한 중간 코드를 어셈블리 프로그램으로 변환

 

어셈블러

- 어셈블리어로 된 프로그램을 이진 코드로 변환

 

하드웨어

 

Hack

- 4시간 만에 만들수 있는 컴퓨터 아키텍처

- 단순하면서도 성능있음.

- 하드웨어 요소로 어떻게 디지털 컴퓨터 설계하는 과정을 이해하는데 사용함.

 

HDL

- Hardware Description Language(HDL)

- 이 언어로 하드웨어 시뮬레이션하여 Hack을 만듬.

 

Hack 컴퓨터

- 구성 : CPU, RAM, ROM, 시뮬레이션 스크린, 키보드 등

- 이 컴퓨터는 논리 게이트를 조합해서 만들며 부울 대수를 따라 동작함.

 

논리 게이트

- 트랜지스터로 만듬.

 

 

300x250

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

Nand2Tetris 2 - 불 연산  (0) 2020.04.29
NAND2Tetris 1 - 불 논리  (0) 2020.04.25
기계어~OPCODE  (0) 2020.04.25
ALU~보조기억장치  (0) 2020.04.24
가산기~주기억장치  (0) 2020.04.24
728x90

제어기

- 컴퓨터회로의 멀티플렉서, 디멀티플렉서, ALU의 ADD/SUB 등 제어가 필요한 부분들이 존재

- 한 곳으로 모은 제어기를 만듬

 

제어기 스위치

- 제어기 스위치를 제어하여 로드/스토어 작업 수행

제어 예시

- PC가 가리키는 SRAM 값을 레지스터 A에 저장

  - SRAM MUX SEL : 0 0[보조 기억장치 선택]

  - SRAM DEMUX SEL : 0 0 [레지스터 A 방향 선택]

  - Reg A MUX SEL : 1[SRAM 방향 선택]

  - SRAM RW : 1[읽기 모드]

  - MUL/DIV : 0[상관 x]

  - SUB/ADD : 0[상관 x]

-> 레지스터 A에 값을 저장 = 00001100 = 0x0C

 

 

MUX/DIV와 SUB/ADD 조합에 따른 ALU의 연산

* 덧셈 : 0(MUL/DIV), 0(SUB/ADD)

* 뺼셈 : 0(MUL/DIV), 1(SUB/ADD)

* 곱셈 : 1(MUL/DIV), 0(SUB/ADD)

* 나눗셈 : 1(MUL/DIV), 1(SUB/ADD)

 

기계어

- 컴퓨터 회로의 제어기를 제어하는 2진수 언어

 

위 컴퓨터 회로 기계어 정리

메모리에서 기계어 받는 제어기

- 기계어를 보조 기억 장치로 부터 받을 수 있음

- 코드램 : 제어기 쪽에 연결된 SRAM

- 데이터램 : ALU쪽에 연결된 기존 SRAM

 

 

보조기억장치로부터 기계어를 받는경우/ 데이터를 받는 경우

- 기계어를 데이터램에 입력하지 않도록 해야함

 -> 클록 펄스를 구분해서 입력

- 코드 램에 데이터 입력시 -> 데이터 램의 CLK에 펄스 X 코드램의 CLK 펄스 O

- 데이터 램에 데이터 입력시 -> 데이터 램의 CLK에 펄스 O 코드램의 CLK에 펄스 X

 

컴퓨터 회로 총 정리

데이터의 저장

- 메모리의 하위주소에서 상위주소로 저장

 

리틀 엔디언

- 하위 바이트 부터 저장

 

빅 엔디언

- 상위 바이트 부터 저장

 

컴퓨터가 처리하는 데이터

- 처리 데이터 = 동작 명령어, 계산 데이터

 

하버드 아키텍처

- 명령어(8비트) -> 코드 램에 저장, 데이터(8비트) -> 데이터 램에 저장

=> 분리된 메모리 저장하는 방식

폰 노이만 아키텍처

- 명령어(8)와 데이터(8)를 합쳐(16비트) 같은 메모리에 저장하는 방식

- 메모리는 16비트 데이터를 출력함

- 상위 8비트는 제어기, 하위 8비트는 ALU로 전달

 

하버드 아키텍처와 폰 노이만 아키텍처

- 하버드 아키텍처는 메모리가 분리되어 데이터 입출력과 명령어 처리 동시 수행 가능 -> 빠른 속도

 <-> 메모리가 분리되고 별개의 어드레스 디코더 제어로 회로가 복잡 => 고비용

- 폰 노이만 아키텍처는 램을 하나로 줄였지만 동작방식은 하버드 아키텍처와 비슷

 

16비트 CPU

- 데이터를 16비트 씩 처리 -> 2바이트씩 SRAM 주소를 이동해야함

=> 프로그램 카운터를 2씩 늘려줌

2씩 늘어나는 PC

 

8비트, 16비트, 32비트, 64비트 CPU 구분 기준

- 데이터 버스 폭과 ALU의 데이터 처리 크기

 

 

16비트 CPU 구조

 

OPCODE

- LDA = Load to A

- STA = Store from A

 

300x250

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

NAND2Tetris 1 - 불 논리  (0) 2020.04.25
NAND2Tetris 0 - 소개  (0) 2020.04.25
ALU~보조기억장치  (0) 2020.04.24
가산기~주기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
728x90

가산기의 뻴셈 연산

- 2의 보수를 이용하여 가산기 만으로 뻴셈이 가능

- 덧/뻴셈 선택하는 신호선을 만들고 원래 수 그대로 입력하도록 회로 수정 필요

 

XOR 게이트를 이용한 4비트 2진수 1의 보수 변환

- 12 - 8 시 XOR 게이트를 이용하여 1의 보수로 변환 가능

= 1100 - 0100

= 1100 + 0100의 1의 보수 + 1

 

뼬셈 가능한 8비트 가산기 회로

- SUB/ADD 입력에 따라 0인경우 덧셈, 1인경우 뻴셈하도록 XOR를 이용해 1의 보수 변환

- 2의 보수 변환은 Cin에 SUB/ADD(1)을 전달하여 +1을  수행

산술 논리 연산 장치

- 연산기(논리 연산 장치) : 이전의 덧/뻴셈 연산이 가능한 회로

- ALU(arithmetic logic unit) : 산술 논리 연산 장치. 덧/뺄/곱/나눗셈 수행

 

곱셈 회로

- 소프트웨어적으로 구현 가능하나 디지털 회로로 구현한 것 보다 느림

 

10진수의 곱셈

 

2진수의 곱셈

- 각 비트의 곱셈은 AND 게이트로 구현

4비트 이진수 x 4비트 이진수 곱셈기

나눗셈기

1비트 비교기 회로

 

ALU

= 가산기 + 감산기 + 곱셈기 + 나눗셈기

 

보조기억장치

- 앞서 휘발성인 SRAM 주기억장치와, D-FF 메모리 레지스터를 사용

- 전원이 없어도 데이터가 소멸되지 않는 보조기억장치가 필요

 

천공카드

- 구멍을 뚫어 데이터를 저장하는 종이

- 뚫리면 1, 뚫리지 않으면 0

 

천공카드 리더기(punched card reader)

- 읽기 쓰위치를 닫으면 전자석 동작

- 천공 카드 아래의 접점을 끌어당김 

- 구멍이 뚫린 부분만 접점이 통과하여 연결됨

=> 아래의 경우 00100010(2) -> 34(10)

천공카드를 읽어 연산하는 디지털 회로

- 이전의 입력 스위치 8개 대신 8비트 천공 카드 리더기를 입력으로 받음

- 천공 카드 데이터를 입력 받아 연산할 수 있으나 쓰기는 하지 못함

SRAM 데이터를 천공카드에 저장하는 회로

- SRAM 아래의 DEMUX를 1입력3출력 DEMUX로 변경

- 추가 된 출력을 천공카드 리더기의 입력으로 연결

300x250

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

NAND2Tetris 0 - 소개  (0) 2020.04.25
기계어~OPCODE  (0) 2020.04.25
가산기~주기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
인버터~플립플롭  (0) 2020.04.23
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
728x90

D 플립플롭

- R-S 래치에 인버터를 추가하여 같은 값이 입력 되지 않게 고친 플립플롭

메모리 셀

- 1비트 래치/플립플롭

 

램(RAM)

- 플립플롭을 이어 만든 것

- SRAM : 트랜지스터로 만든 래치 모음

- DRAM : 캐패시터와 트랜지스터를 이어 만든 것

 

D 플립플롭 1바이트 램

- 입력 CLK를 스위치 1개를 연결하여 워드라인(Word Line : WL)이라 하고

- 입력 D에 연결한 스위치 8개를 입력이라 한다.

=> 1바이트를 1워드로 묶어 일괄적으로 클록 공금

=> 0 ~ 255까지 입력 가능

 

 

1바이트 램에 이진수 10000110 저장 순서

 

 

MSB와 LSB

- 디지털 회로에서 1비트 이상 데이터 처리시 어느 신호선이 높은 자리인지 낮은자리인지 정해야 함

- MSB(Most Significant Bit) : 가장 높은 비트 위치

- LSB(Least Significant Bit) : 가장 낮은 비트 위치

=> 10000110에서 LSB는 오른쪽 끝 0, MSB는 왼쪽 끝 1

 

 

 

 

 

 

 

메모리 주소

- 1바이트 크기 램에 데이터를 쓰기 위해 8개 스위치 사용, 2바이트의 경우 스위치 16개, 출력 16개 필요

- 1KB 램의 경우 8192개(2^13) 스위치 필요 -> 1MB는 스위치 100만개 필요 => 불가능

<->

램의 특정 주소에 데이터를 쓰거나 읽기

1. 램 영역을 1바이트로로 나누고 주소 지정

2. 그 주소를 찾아 해당 주소의 메모리 셀이 동작

 

1KB 램의 메모리 주소

- 8,192개의 메모리 셀을 8개로 묶음 -> 1바이트 씩 주소 할당 -> 0 ~ 1023까지 주소 사용 가능

 

D 플립플롭 메모리 셀 회로

- D 플립플롭 회로에 입출력, 셀 선텍, 읽기/쓰기 동작 선택 단자를 추가 한 회로

- SEL에 0이면 값 저장 상태 유지

- SEL이 1이면 읽기/쓰기 동작

  - RW : 0 -> 저장된 값 출력

  - RW : 1 -> 입력된 값 저장

메모리 셀 기호


8바이트 램 구성

- 메모리 셀이 가로 8개 세로 8개 총 64개 구성

- 주소는 0 ~ 7까지. 이진법으로 표현 시 3바이트 필요 -> 어드레스 디코더 입력(a1, a2, a3)이 3개

- 주소 신호선은 각 메모리 셀 선택 단자에 연결

- 1바이트 표현에 8개의 입출력 필요 -> 입력 스위치 8개/ 읽기 버퍼 8개

* DI(data input), DO(data output)

어드레스 디코더

- 램 주소를 지정할때 입력 스위치 갯수를 줄이기 위해 사용

- 현재 주소가 7개 뿐이므로 출력 7개(0 ~ 7), 입력 3개(2^3) 총 10개의 스위치로 주소 지정 가능

- 이 경우 3-입력-8-출력 디코더

 

8바이트 램 0x2번지에 6쓰기

- 6은 0000 0110

DI  0 1 2 3 4 5 6 7

->  0 1 1 0 0 0 0 0

 

8바이트 램 0x2번지 값 출력(읽기)

플립플롭 메모리

- SRAM이나 DRAM 처럼 대용량 주기억장치로 쓰기에는 크고 복잡

-> CPU 내부 레지스터에 사용

 

SRAM, DRAM

- SRAM : 트랜지스터로 래치 만듬

- DRAM : 캐패시터로 만듬

 

휘발성 메모리

- D 플립플롭, SRAM, DRAM

- 크기가 큰 순 : D 플립플롭 > SRAM > DRAM

- DRAM은 캐패시터를 사용하여 D 플립플롭이나 SRAM보다 느리고 전력 소모가 큼 -> 대용량 주기억 장치로 사용

- SRAM -> 캐시 매모리

- D 플립플롭 -> 레지스터

 

전자석 -> 릴레이 -> 인버터 -> (+피드백 연결) -> 오실레이터

트랜지스터 -> 논리 게이트 -> R-S 래치 -> R-S 플립플롭 -> J-K 플립플롭

-> 1바이트 램 -> 8 바이트 램 -> 8바이트 플립플롭 램 + 어드레스 디코더 + 쓰기 스위치 + 읽기 버퍼/SRAM/DRAM

300x250

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

ALU~보조기억장치  (0) 2020.04.24
가산기~주기억장치  (0) 2020.04.24
인버터~플립플롭  (0) 2020.04.23
디지털 ~ 릴레이  (0) 2020.04.23
CPU 추가  (0) 2020.04.20
728x90

전자석으로 불끄는 회로

- 입력이 0이면 출력이 1

- 입력이 1이면 출력이 0

=> 인버터

 

인버터

- 입력과 출력을 반대로 해주는 회로

피드백 회로

- 인버터의 출력이 다시 입력으로 들어감

ex) 출력이 0 -> 입력 0 -> 출력 1 -> 입력 0 -> 출력 1

 

인버터-피드백 회로의 출력 그래프

- 0과 1의 규칙적인 반복

=> 클록 신호

 

오실레이터

- 특정 속도로 클록 신호를 발생시키는 장치

- 크리스털로 만듬

-> 온습도 등 외부 요인에 영향을 적게 받으면서 규칙적인 진동을 내기 때문

- 모든 디지털 장비에는 크리스털 오실레이터가 사용됨

* 디지털 회로에서 오실레이터는 사람의 심장과 같은 역활

* 모든 디지털 장치는 오실레이터의 클록 신호를 기반으로 동작

 

전자석 -> 릴레이 -> 인버터 -> (+피드백 연결) -> 오실레이터

 

릴레이와 트랜지스터

- 릴레이와 npn형 트랜지스터는 똑같이 동작

=> 트랜지스터는 릴레이의 반도체 버전

+ 트랜지스터로 논리 연산가능

AND 게이트

 

OR 게이트

NAND 게이트

 

전자석 -> 릴레이 -> 인버터 -> (+피드백 연결) -> 오실레이터

트랜지스터 -> 논리 게이트

 

R-S 래치

- R(Reset), S(Set)

- Latch : 잠금

=> 논리게이트와 피드백 회로로 회로에 전류가 걸림 -> 데이터 저장

- R-S 래치는 1비트 값 저장하는 디지털 회로

 

R-S 플립 플롭

- R-S 래치는 출력으로 Q와 Q바의 값이 항상 반대여야 함

-> Q와 Q바가 동시에  0이 되는 입력 R, S가 (1,1) 되면 안됨

=> 2개의 AND 게이트 + CLK 신호 사용 => R-S 플립플롭

* R-S 래치를 간략히 추상화하여 표시

R-S 플립 플롭의 진리표

- 입력 R과 S를 전환 할 때 (1,1)이 될 위험이 큼

-> R-S 플립플롭에서 CLK가 0일때만 R-S 신호를 바꾸도록 하면 해결

J-K 플립플롭

- R-S 플립플롭에서 여전히 허용되지 않는 입력 값 상태가 존재

-> 3-입력 AND게이트 활용하여 해결 => J-K 플립플롭

J-K 플립플롭의 진리표와 타이밍 다이어그램

라이징 에지와 폴링 에지

- 오실레이터의 클록 출력은 0과 반복

- 라이징 에지 : 0에서 1로 바뀌는 순간

- 폴링 에지 : 1에서 0으로 바뀌는 순간

 

전자석 -> 릴레이 -> 인버터 -> (+피드백 연결) -> 오실레이터

트랜지스터 -> 논리 게이트 -> R-S 래치 -> R-S 플립플롭 -> J-K 플립플롭

300x250

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

가산기~주기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
디지털 ~ 릴레이  (0) 2020.04.23
CPU 추가  (0) 2020.04.20
CPU - CPU개요, 디지털 연산  (0) 2020.04.19
728x90

전체 흐름

 

1. 디지털 - 0, 1과 같은 이분법 체계

2. 이진수로 글자 표현 = 코드

3. 증폭기(트랜지스터) <- 릴레이 <- 먼 거리 전송의 어려움

4. 오실레이터 <- 피드백 회로

5. 논리 게이트 <- 트랜지스터 + 피드백

6. 메모리 <- 플립 플롭 <- 게이트 + 피드백

7. ALU <- 가산기, 뺄셈기, 곱셈기, 나눗셈기 <- 논리 게이트

8. 기계어 <- 제어기 <- CPU = ALU + 레지스터

9. 고급 언어<- 어셈블리어 <- 기계어

 

디지털

- 0(LOW), 1(HIGH)

 

디지털 회로

- 디지털 신호를 사용하는 회로

 

5V 디지털 회로

- 0~1.5V를 0

- 3.5 ~5V를 1

 

간단한 전등 회로

- 전지, 스위치, 전등 구성

- LOW에서 HIGH나 역으로 바뀔때 서서히 변화(실제로는 빠름)

 

코드

 

전등으로 통신하기

- 서로 규칙을 정한 만큼 깜빡임

- wow! 하려고 125번 깜빡이기는 어려움 -> 코드

코드

- 수와 문자를 1:1 연결

 

아스키 코드

- 7비트 인코딩

-> 33개의 출력 불가능한 제어 문자 + 95개의 출력 가능 문자 총 128개

 

코드의 출력

- 아스키 코드 'b'는 십진수로 90

-> 90번 깜빡이긴 힘들다

-> BSD 코드를 사용해 2진수로 표현

 

10진수 2진수 변환

 

BCD 코드

- Binary Coded Decimal

- 2진화 10진 코드(8421코드)

문자 'u' 보내기

- 문자 'u'은 아스키 코드 85

-> 스위치로 0100 0101 보내면 된다.

 

비트

- 이 진수 1자리

 

바이트

- 8자리 2진수

 

데이터

- 비트나 바이트 묶음

 

디지털 데이터 통신

- 디지털 신호로 데이터 전달

 

먼 거리 통신의 문제

- 거리가 멀 수록 저항 상승, 전압은 그대로이므로 전류가 줄어듬(V=IR)

-> 전류 증폭 필요

 

전자석

- 쇠못에 구리 코일 감아 양 끝을 전지로 연결한 것

 

전자석으로 옆 회로 불켜기

- 스위치 A 닫음

-> 전자석 동작 -> 스위치 B가 끌려와 닫김

-> 불 켜짐

=> 릴레이 원리

 

 

릴레이

- 이어달리기에서 유래

- 전자석을 이용한 스위치 회로

 

릴레이로 신호 증폭과 데이터 전달

- 먼거리 통신하는 전자회로 완성

-> 사람의 개입이 필요

-> 이후 전자회로 자동화

300x250

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

가산기~주기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
인버터~플립플롭  (0) 2020.04.23
CPU 추가  (0) 2020.04.20
CPU - CPU개요, 디지털 연산  (0) 2020.04.19
728x90

메모리  구조

- 어드레스와 명령/데이터

 

버스

- 어원은 합승 버스(Omnibus)

- 데이터의 통로를 의미함. <- 신호 선을 다발로 묶은 것

- 어드레스 버스 : 주소 전달하는 버스

- 데이터 버스 : 데이터 전달

- 외부 버스 : CPU와 외부 장치를 연결

- 내부 버스 : CPU 내부의 데이터를 전달하는 버스

 

버스와 비트 수

- 버스는 신호 선을 다발로 묶은 것으로 신호 선의 수 = 비트 수

- 64bit CPU는 64 비트의 처리폭을 가진 CPU

 

어드레스 버스 폭

- 어드레스 공간의 크기

- 32비트 라면 4.3G의 어드레스가 있음.

 

명령

- 오퍼랜드와 명령 코드로 구성

- 오퍼랜드 : 연산의 대상

- 명령 : 덧셈, 저장 등

 

레지스터

- CPU 내부의 기억장치

- 어커뮬레이터(누산기) : 계산 결과를 누적

- 범용 레지스터 : 계산 이외 사용

- 명령 레지스터 : 명령(프로그램)을 저장

- 프로그램 카운터 : 다음 실행할 명령의 어드레스를 저장

 

클록

- 일정 주기로 H와 L을 반복하는 신호.

- ALU에서 데이터를 래치하거나 프로그램 카운터를 진행시키는데 클록이 필요.

- 타 기기와 통신시 클록이 일치하지 않으면 타이밍이 맞지 않음.

 

클록 제너레이터

- 클록을 만드는 회로(발진기)

- CPU 내부에 내장되어 있으며 외부 클록 신호를 사용할 수도 있음.

 

타이머 인터럽트

- CPU 내부 감산 카운터를 이용해 카운터가 0이 됬을때 인터럽트를 발생 시키는 기능

- 마스터 클록의 주기 x 0배(프리스케일러) x 세는 횟수(감산 카운터)의 시간마다 인터럽트 신호가 발생

 

명령

- 연산 관련 명령 : 산술 연산 명령, 논리 연산 명령, 시프트 연산 명령

- 연산 이외 명령 : 데이터 전송 명령, 입출력 명령, 분기 명령, 조건 판단

 

스테이터스 레지스터

- CPU 연산 결과에 따라 순서나 입출력을 제어함. 이때 판단의 기준이 플래그(1비트)

- 플래그 자체는 1비트이며 8비트나 16비트로 만든 것이 스테이터스 레지스터

 

플래그

- 제로 플래그 : 어커뮬레이터 연산 결과가 0일때

- 사인 플래그 : 연산 결과가 음수 일때

- 캐리 플래그 : 자리 올림이 발생할때

- GT 플래그 : (greater than) 보다 클때

- LT 플래그 : (less than) 보다 작을때

- 인터럽트 마스크 : 인터럽트를 받을것인지 설정

- 인터럽트 플래그 : 인터럽트가 발생한 것을 나타냄

300x250

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

가산기~주기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
인버터~플립플롭  (0) 2020.04.23
디지털 ~ 릴레이  (0) 2020.04.23
CPU - CPU개요, 디지털 연산  (0) 2020.04.19
728x90

1. CPU 개요

CPU

- Central Processing Unit

- 산술 연산과 논리 연산 처리

 

산술 연산

- +/- 연산

 

논리 연산

- AND/OR/NOT 등 연산

 

컴퓨터의 5대 장치

- CPU의 제어/연산 장치

- 나머지로 입력/기억/출력 장치

 

메모리(주기억장치)

- CPU에 연산할 데이터와 프로그램 전달

- CPU는 연산 결과를 메모리에 저장(혹은 레지스터에)

 

ALU

- Arthmetic Logit Unit 산술 논리 장치

디지털과 0,1

- 디지털을 표현하기 위해 0과 1로 나타냄

- CPU 내부 등 전기 신호로 LOW 전압, HIGH 전압 과같이 전기 신호로 이용

 

 

2. 디지털 연산

10진수와 2진수

- 2진수로 10진수 표현 가능

- 1011(2) -> 11(10)

- 4(10) -> 100(2)

 

고정 소수점

- 0.000001

- 12340000.

 

부동 소수점

- 1.23 x 10^2

- 1.23 x 10^-6

 

2진수 뺄샘과 보수

- 보수와 덧셈을 하면 뺀 것과 같음.

- "-15"는 "+(-15)"와 동일함

- "-15"를 다른 숫자로 표현하는 방법이 필요

- B 식의 자리 올림(캐리)를 제외하면 A식과 결과가 동일함

- 위의 경우 15에 대해 85는 100의 보수.

 

보수

- 더하면 자리수가 올라가는 수.

- 뺄셈 = "보수와 덧셈"

 

2진수 뺄셈과 2의 보수

- 캐리를 무시하고 결과 모든 자리가 0이 되는 보수를 2의 보수라 한다.

 

2의 보수 구하는 방법

IC(Integrated Circuit 집적 회로)

- 논리 회로의 모음

- 아래는 예시로 74LS08

논리 회로(Logic Circuit)

- 입력 2개, 1개 출력
- 대표적으로 AND, OR, NOT

- 이 논리 회로/논리 게이트(Logic Gate)들을 조합하여 NAND, NOR, EXOR 등 만듬

 

드모르간의 정리

- AND연산과 OR 연산은 치환 가능

 

반 가산기(Half Adder)

- 덧셈 연산하는 회로

- 1비트(1자리) 끼리 덧셈 가능

- 여러 자리의 덧셈 처리 불가 -> 전가산기

 

전 가산기(Full Adder)

- 총 3개 입력 = 기본 입력 2개 + 캐리 여부(자리 올림) 입력 1개

- 출력 2개 = 합 S와 캐리 C

- 반 가산기 2개와 OR 게이트 1개로 구성

순차 자리 올림 가산기(Ripple Carry Adder)

- 가산기를 이어 여러 자리의 덧셈을 할수 있는 가산 회로

- 가산기 4개를 이으면 4 자릿수 연산 가능

 

래치(Latch)

- 데이터를 유지하는 것

- "1" 상태를 유지 -> 래치

플립 플롭(FF:Flip Flop)

- 값을 기억하는 회로

- 1비트 데이터(0/1)을 기억할 수 있음.

- 대표적인 플립플롭으로 RS 플리플롭, D 플립플롭, T 플립플롭

-> 메모리와 레지스터, 카운터 등도 플립플롭으로 만듬 

 

RS 플립플롭

- R(Reset), S(set)를 입력으로 받는 플립플롭

- S=1 이면 Q=1

- S=0 이면 Q=0

RS 플립플롭 - NAND 게이트

- RS 플립플롭은 NAND 게이트로 구현 가능

- S와 R에 둘다 1을 입력하여 Q와 Q부정이 1이 되선 안됨

 

D 플립플롭

- D(Data)를 의미, C는 Clock(클록)

- 라이징 에지 때 값을 기억하는 플립플롭

클록

- 일정 주기로 0과 1을 반복하는 디지털 신호

- 회로의 동작 상태를 맞추는데 필요

 

상승 에지와 하강 에지

- L->H로 변하는걸 상승 에지(Rising edge)

- H->L로 변하는걸 하강 에지(Falling edge)

D 플립플롭의 동작

T 플립플롭

- T(Toggle)

- 입력이 0->1 또는 1->0이 될때 출력이 바뀌는 플립플롭

카운터 회로

- 이 회로는 하강 에지로 T-FF을 연결하며, 카운트 업 하고 있음.

-Q2, Q1, Q0순으로 2진수를 보면 T 시간에 대한 수를 나타냄.

프로그래밍을 이용한 회로 설계

- 하드웨어 기술 언어(HDL = Hardware Description Language)를 이용하여 회로를 생성 가능

- 논리 회로 기호로 회로를 설계했지만 최근에는 간단한 경우 외에는 사용하지 않음

- 최근에는 FPGA(Field Programmable Gate Array)를 이용해서 개발 함.

 -> 동일한 FPGA를 써도 전혀 다른 IC를 만들 수 있음.

 

 

 

300x250

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

가산기~주기억장치  (0) 2020.04.24
메모리~램  (0) 2020.04.23
인버터~플립플롭  (0) 2020.04.23
디지털 ~ 릴레이  (0) 2020.04.23
CPU 추가  (0) 2020.04.20

+ Recent posts