728x90
Memory hierarchy

Memory hierarchy

  • 주 메모리에는 프로그램과 데이터가 저장
  • 한편 모든 프로그램을 할당하기에는 메모리 용량이 모자람
  • 주 메모리는 CPU와 연결
    • 현 시점에서 사용되는 프로그램/데이터가 주 메모리에 저장
  • 보조 저장소에는 그 외의 데이터가 저장
  • 싸고 빠를수록 CPU에 가깝고(레지스터, 메모리, ...), 느리고 쌀수록 주변장치에 저장(HDD, SSD, ...)

Main memory

  • CPU가 동작시키는 프로그램과 데이터가 저장
  • Static RAM / Dynamic RAM
    • 비용, 전력, 접근 시간 등에서 차이
  • ROM : 초기 프로그램(부트로더)가 저장
  • 전원 인가 후
    • 컴퓨터는 부트로더 맨 앞 주소의 데이터를 불러옴
    • 부트로더는 디스크에서 메인 메모리로 데이터를 가져옴

  • ROM
    • 읽기 기능이 없어 Chip select와 주소 입력만이 존재
    • 칩에 따라 read 입력이 있을 수도 있음
  • RAM
    • ROM에서 read, write 신호 입력이 추가
    • chip select 입력이 맞지 않거나, read/write 신호가 모두 low인 경우 high-z상태로 사용되지 않는 상태가 됨

Hard Disk

  • HDD의 구성 단위
    • Track : hdd에서 지름이 같은 하나의 동신원 구역
    • Sector : hdd를 중심을 기준으로 n등분했을 때 1개 구역
    • Cylinder : HDD는 여러 개의 판(platter)로 구성되는데, 플래터들의 같은 트랙의 집합을 실린더라고 칭한다.
  • HDD의 데이터 저장 : 헤드가 자기장을 가하면 데이터가 1, 가하지 않으면 0으로 인식

Assiciative memory(CAM)

  • 메모리 내용 자체가 주소 역할
  • RAM 대비 고기이나, 탐색 시 시간이 매우 빠름
  • CAM 동작
    • m개 word, n개 bit
    • Argument register에 데이터가 입력
    • 해당 데이터가 존재 시 Match register의 인덱스가 set
    • Argument register과 메모리 내용 사이에서 탐색할 범위를 Key register로 설정 (Masking)
    • 데이터를 쓸 때는 tag register가 사용 : 데이터의 저장 여부를 판단

Cache memory

  • 캐시 메모리의 동작
    • CPU가 데이터를 필요로 할 때, 캐시로 먼저 접근
    • 캐시 데이터 존재시 읽음
    • 캐시에 데이터가 존재하지 않을 경우 메모리 접근
  • hit ratio
    • CPU가 찾는 데이터가 캐시에 있을 확률
    • (1 - hit ratio) * main memory 접근시간 + cache memory 접근시간 = 평균 접근 시간
    • 반대어 : miss ratio(없을 확률)
  • mapping
    • RAM 데이터를 캐시로 옮기는 과정
    • Associative mapping
      • CAM을 이용한 addressing - 주소 | data로 된 표 형태로 저장
    • direct mapping
      • 주소 필드의 일부를 cache memory 접근 시 사용
      • cache memory의 tag register과 주소 필드의 tag register를 비교하여 동일할 경우 데이터를 가져옴
      • 불일치 시 원래 캐시 정보를 메인메모리로 갱신하고, 새로운 메인메모리 정보의 tag와 데이터 갱신
    • set associative mapping
      • direct mapping의 개선
      • 캐시의 tag-data 표가 2중으로 존재
  • replacement policy
    • 캐시 메모리의 용량이 제한되어 있기 때문에, miss로 인한 새 데이터 진입 시 갱신 알고리즘이 필요
    • LRU(Least Recently Used) : 가장 과거에 사용된 데이터가 갱신됨
    • FIFO : 가장 먼저 들어온 데이터가 갱신됨

  • cache의 read/write 정책
    • CPU가 캐시 word를 읽을 때 : 메인 메모리에 접근 x
    • 캐시에 쓸 때 : 메인 메모리는 갱신된 데이터를 저장해야 함 (coherency problem)
      • write through
        • 캐시 업데이트시마다 메모리 갱신
        • 이동하는 데이터가 많아짐(traffic problem)
      • write back : 캐시에 replace 발생 시 메모리 갱신
    • cache initialize
      • 캐시 각 주소에는 valid, dirty의 2가지 bit가 할당
      • valid는 데이터의 가용성을, dirty는 데이터의 변형 여부(coherence problem 여부)를 나타냄
      • write-back 정책의 경우 dirty bit가 설정되어 있으면 갱신하게 됨

Virtual Memory

  • 프로그램 실행 시 보조 장치(ex. HDD)의 데이터를 주 메모리에 적재 후 실행하게 됨
  • 이때 주 메모리의 크기보다 큰 프로그램은 다 적재할 수 없게되는 문제가 존재
    • 보조 저장 장치의 Controller를 이용하여 저장소 주소를 주 메모리로 Mapping함
    • 캐시 - 주 메모리의 관계와 유사하게 동작
  • 가상 메모리 존재 시 주소 space 크기는 실제 메모리 공간보다 크게 할당
    • 임베디드 등 가상메모리가 사용되지 않는 경우 주소필드와 메모리 영역은 동일

  • page를 이용한 주소 매핑
    • 실제 메모리는 일정 크기의 block으로 분할
    • 가상 메모리 주소는 일정 크기의 page로 분할 = 프로그램 실행 시 page 단위로 나누어 메모리에 적재
    • virtual address = page number + page line

  • virtual address 중 page number는 memory page table에 접근
    • page table의 주소로 접근하여 address를 반환
  • virtual address의 line number와 mem.page table에서 반환받은 값을 합쳐 실제 메모리로 접근
  • 실제 메모리가 할당 가능한 block 크기에 따라 memory page table도 갱신을 거쳐야 함(FIFO or LRU)
    • 경우에 따라 associative memory table을 이용하여 page / block을 대응시켜 mapping하기도 함

Memory management

  • segment : 논리적으로 연관 있는 명령어나 데이터의 집합
    • 서브루틴, 데이터 배열, symbol, 프로그램 등
    • 세그먼트 관리 시 인증되지 않은 접근에서 보호할 필요 존재
  • logical address는 segment, page, word로 구성됨
    • segment는 table을 거쳐 page와 합쳐짐
    • page table에서 block 위치를 탐색하여 word와 함께 실제 주소를 탐색
    • 최대 접근 가능한 메모리 주소는 page와 word 개수의 곱으로 나타남 2pagebit×2wordbit2^{pagebit}\times2^{wordbit}
728x90
728x90
Stack Organization
  • CPU의 구성 요소
    • 레지스터 : 중간 데이터 저장
      • general register : 범용으로 사용하는 레지스터
      • special register : 특정 목적을 갖는 레지스터
    • ALU : Microoperation 수행
    • 컨트롤 유닛 : 동작 관리
  • general register organization
    • R1 = R2 + R3
    • 연산 시 사용하는 레지스터를 각 selector가 적절히 선택

Stack Organization

  • 스택 : 정보가 '쌓이는' 자료구조
    • 가장 마지막에 들어온 정보가 가장 먼저 출력됨
    • LIFO, Last In First Out
    • 스택 포인터는 스택의 가장 위(최근 들어온) 아이템을 가리킴
  • push : Stack pointer를 증가(아이템 입력)
  • pop : Stack pointer를 감소(아이템 출력)
  • register stack
    • FULL, EMPTY, SP, DR로 구성된 스택
    • FULL, EMPTY : 스택이 꽉 찬(빈) 여부를 저장
    • SP : Stack Pointer
    • DR : 스택에 들어가거나 스택에서 나온 데이터를 저장
    • EMPTY=1일때 POP하거나, FULL=1일 때 PUSH 시 error
      • 스택의 UPPER/LOWER limit을 초과 시 오버/언더플로우 발생
    • POP시 SP를 1 감소, PUSH시 1 증가
  • stack의 동작 예 : 후위 표기법
    • 후위 표기법 : 연산자가 맨 뒤로 오게 됨
    • 기존 식 : (4+5*6) / (4-2)
    • 후위 표기 : 4 5 6 * + 4 2 - /
      • 연산자는 스택 내의 숫자 2개를 pop한 후 연산 결과를 다시 push함

Instruction format

  • CPU 명령어의 종류
    • 레지스터 하나만을 사용
      • ADD X : AC < AC + M[EA]
    • 다수 레지스터(general register) 사용
      • ADD R1, R2, R3 : R1 < R2 + R3
      • ADD R1, R2 : R1 < R1 + R2
      • ADD R1, EA : R1 < R1 + M[EA]
    • 주소 사용 없음(stack organization)
      • PUSH X

Addressing mode

  • 명령어의 주소 필드를 해석하는 방법
  • addressing mode의 목적
    • 프로그램의 다양성
    • 명령어의 address field 크기를 줄이기 위해
  • address field가 필요 없는 mode
    • implied mode : Accumulator를 사용하는 연산 명령어
    • immediate mode : 명령어 필드가 주소 필드와 동일한 명령어
  • Register mode : 주소 필드가 프로세서 주소를 가리키는 경우
    • register mode : 명령어가 레지스터 내에 있는 경우
    • register indirect mode : 주소 필드에 내용이 저장된 레지스터 주소를 나타내는 경우
    • autoincrement/autodecrement mode : register indirect와 동일하나 메모리 접속 이후 register이 증가/감소 (table 접근 시 사용)
  • relative addressing mode
    • effective address가 PC 내용 + 명령어의 주소 필드, branch 명령에 주로 사용
    • indexed addressing mode : effective address가 index register + 주소 필드 , table 접근 시 사용
    • base register addressing mode : effective address가 base register + 주소 필드, multiprogramming에 사용

Data Transfer and Manipulation

  • 명령어의 종류
  • Data transfer : 데이터를 변경 없이 이동시키는것
    • memory - register
    • register - I/O
    • register - register
  • Data Manipulation : 산술, 논리, shift 연산
  • Program Control : branch 등 컴퓨터에 의해 프로그램 진행이 바뀌는 것
728x90
728x90
Control Memory

Control Memory

  • Microoperation의 순서를 제어
  • 다른 명령어 = 다른 Microoperation
  • Hardwired Control : 논리회로 설계에 의한 signal contol
  • Microprogram : SW적으로 signal control
    • 메모리에 control 신호를 저장하여 호출
    • hardwired 대비 유연한 제어가 가능하다
  • control function
    • LD, INC, CRL 등 binary information (Control word라고 부름)
    • control word는 control memory 내에 저장

Address Sequencing

  • Control Unit을 Control Memory + 메모리 순회를 위한 Logic으로 대체

    • Control Address Register : Control Memory를 가리키는 register
  • MicroOperation의 동작

    • 명령어 Fetch-Decode 후 실제 명령어가 동작
    • Opcode 값에 의해 동작 내용이 달라짐
  • Instruction Mapping

    • opcode를 memory 주소 형식으로 바꾸는 것
    • ex. opcode가 XXXX >> 0XXXX00의 형태로 address 반환

  • HW configuration Example
    • 버스를 사용하지 않음
    • IR 레지스터가 없음
    • AC, PC, 메모리 > DR
    • PC, DR > AR
    • AR > PC
    • DR > 메모리
    • DR, AC의 Microoperation 결과 > AC
  • 명령어는 I(1) + Opcode(4) + Address(11)로 구성되어있음을 가정
    • Add(0000), Branch(0001), Store(0010), Exchange(0011, AC와 Memory 데이터를 교환)의 4가지 명령어를 가정
  • Control Word Format
    • F1/F2/F3 (각 3bit) : Microoperation field
    • CD(2bit) : Branch Condition
      • 00 : always
      • 01 : Indirect
      • 10 : AC sign bit
      • 11 : AC zero
    • BR(2bit) : Branch field / CD 조건 만족시 동작
      • 00 : JMP
      • 01 : CALL
      • 10 : Return
      • 11 : Map
    • AD(7bit) : Address field
    • 총 20bit 크기

Microprogram example

  • fetch routine
    • PCTAR U JMP NEXT : PC 정보를 AR로, 다음 명령 수행
    • READ, INCPC U JMP NEXT : 메모리 정보를 DR로 읽고, PC를 1 증가시킨 후 다음 명령 수행
    • DRTAR U MAP : DR 정보를 AR로 이동시킨 후, DR opcode를 CAR에 메모리 양식에 맞게 Mapping
  • Add
    • NOP I CALL INDRCT : 동작은 하지 않고, Indirect인 경우 INDRCT 주소를 불러온다.
    • READ U JMP NEXT : 메모리 값을 AC로 불러온 후 다음으로 진행
    • ADD U JMP FETCH : DR값을 AC에 더해준 후 FETCH operation으로 이동
  • Microprogram sequencer
    • CD값과 1, I, S, Z에 따라 Test 출력 결정 (1 = Unconditional Branch)
    • I0, I1 : Branch code
728x90
728x90
Machine Language

Machine Language

  • 어셈블러 : Symbolic한 코드(어셈블리어)를 기계어로 바꿔줌
    • ex. 1 ADD 56 > 1 000 0000 0011 1000
  • 컴파일러 : 고급 언어(C, Java, ...)를 기계어로 바꿔줌

Assembly Language

  • 어셈블러 : Symbolic Program을 기계어로 변환
  • 기계마다 기계어가 다르므로, 어셈블러 역시 기계마다 다르게 동작
  • 어셈블리 명렁어의 구성요소
    • Lable : 공백 or Symbolic Address
      • Symbolic Address
        • 알파벳 형태로 주소 지정
        • 첫 글자는 반드시 대문자로 써야 하며, 콤마(,)로 종료
    • Instruction : machine / pseudo Instruction
      • pseudo instruction
        • ORG(Origin of Program), DEC(Decimal), END(END of program) 등
        • 실제 동작에는 관여하지 않고, 어셈블러 동작에 필요한 정보 지정
      • MRI(Memory Reference Instruction)의 경우 공백으로 구분되는 Symbol 명령어
        • 명령어 + 주소 (+ Indirect)로 구성
        • ex. ADD OPR / ADD OPR I (Indirect MRI)
      • non-MRI : 1개 Symbol ex. CLA(Clear ACC)
    • Comment : 코드 주석
  • Code Example : subtract code
    • ORG 100 : 100번 주소에서 코드 시작
    • LDA SUB : SUB 명령어를 Load
      • SUB 명령어는 107에 저장되어 있음
      • SUB의 Opcode가 010이므로 Hex Code 2107로 표현됨
      • MIN : 계산할 값
      • SUB : 뺄 값
      • DIF : 차이
    • CMA - INC - ADD MIN
      • 2진수 빼기는 2의 보수(1의 보수 + 1)을 더하는 방식으로 진행
    • STA DIF : DIF 주소(108)에 결과 저장
    • HLT : 컴퓨터 종료
    • END : 코드의 끝
728x90
728x90
Instruction Code

Instruction Code

  • 프로그램 : 명령어의 집합
  • 컴퓨터 동작: 레지스터 내의 데이터를 처리하는 microoperation들의 과정
  • 명령어
    • 컴퓨터를 위한 microoperation의 조합
    • 명령어는 데이터에 메모리로 저장
    • Op Code(Operation Code)
      • Add, Sub와 같은 명령어를 정의하는 bit 모음
      • n개의 비트는 2n2^n개의 명령어를 할당
      • 명령어 = opcode + 주소
  • 메모리
    • 한 파트에는 명령어, 다른 파트에는 data (Harvard Architecture)
    • ex. 4096 word memory > 주소 할당을 위해 최소 12bit 필요
      • word당 16 bit 할당 > op code에 4 bit 할당 가능
    • binary operand : 명령어가 사용하는 데아터
    • Program register / Accumulator : 명령어 결과를 임시 저장
      • Ex. AC에 100이 저장 / 명령어가 Opcode(Add) + Address에 100이 저장되어 있을 경우 AC에는 200이 저장됨
  • 명령어 주소
    • 명령어 주소 format : I + OpCode + Address
    • I : Indirect mode bit
    • direct address : 주소 필드가 명령어 주소를 가리킴
    • indirect address : 주소 필드가 명령어 주소가 저장된 주소를 가리킴
      • 장점 : Address 주소의 범위를 확장시켜 더 큰 메모리에 접근 가능
      • 단점 : 주소 접근이 2번 이루어지므로 direct 대비 느림

Computer Register

  • 작성된 명령어는 연속된 주소에 저장 후 특정 시점에 실행
  • 제어 유닛이 시작 주소의 명령을 읽어들임 > 실행 후 다음 주소를 계산 (카운터 레지스터가 필요)
  • 컴퓨터 Control Logic의 레지스터
    • Accumulator(AC) : 명령어의 Source(출발지) 이자 Destination(결과 저장)
    • Instruction Register(IR) : 메모리에서 읽어들인 명령어 저장
    • Data Register(DR) : 메모리에서 읽어들인 데이터 저장
    • Temporary Register(TR) : 임시 저장소
      • AC, DR, TR, IR은 메모리 word와 크기 동일
    • Program Counter(PC) : 다음에 실행되는 명령어의 주소 저장
    • AR(Address Register) : 실제 실행 중인 명령어의 메모리 주소를 저장 - 다음 명령어 실행 시 PC의 값이 AR로 전달
      • PC, AR은 메모리의 Address Field와 동일한 크기
    • Input/Output Register(INPR / OUTR) : 외부 장치 데이터를 주고받기 위한 통로

Computer Instruction

  • 컴퓨터 명령어는 크게 3가지로 분류
    • memory reference
    • register reference
    • I/O instruction
  • memory reference
    • I-field를 기준으로 direct(0), indirect(1) 동작으로 나뉨
    • AND, ADD, Load/LDA, Store/STA, Branch/BUN, branch&save/BSA, Increment/ISZ 등 메모리에 접근하는 명령어
  • register reference
    • MSB 4자리가 0111로 시작하는 명령어
    • AC, E 레지스터를 clear, complement, circulate, Increment, branch 등
  • I/O instruction
    • 인터럽트, AC 입/출력 등

  • Control Logic Gate
    • IR 명령어(D0~D7)은 Opcode가 디코더를 거쳐 Control Logic Gate에 동작 명령어를 지정
    • IR Address의 경우 memory reference 명령어의 동작을 위해 전달
    • T0~T15에는 Sequence Counter(SC)와 디코더를 통해 클록당 값을 증가시키면서 순서대로 신호 할당
      • T15 이후에는 CLR신호를 통해 다시 T0부터 동작
    • HALT(정지) 명령어 이전까지 계속해서 동작
  • fetch&decode
    • 각 클록(T)마다 SC는 1씩 증가
    • T0 : AR < PC, SC < SC+1
      • PC값을 AR에 Load해야 함
      • T0 신호는 BUS의 2(010)와, AR LD에 연결
    • T1 : IR < M[AR], PC < PC+1, SC < SC+1
      • 메모리 데이터를 IR에 LD해야 하므로 BUS 7(111)에 연결
      • IR에 연결해야 하므로 IR LD에 연결
      • PC를 증가시켜야 하므로 PC INR에 연결
    • T2 : D < Decode IR(12-14), AR < IR(0-11), I < I(15), SC < SC+1
      • decode값은 combinational logic이므로 신호 연결이 필요 없음
      • IR값을 AR에 연결해야 하므로 BUS 5(101)과 AR LD에 연결
      • IR(15)에 I LD 연결
  • PC를 1 증가시키는 이유
    • 보통 특정 명령어 수행 후 그 다음 명령어는 연속된 주소에 할당
    • PC값을 AR에 할당 후 다음 동작과 함께 PC를 증가시켜 clock 절약 가능
  • register reference 명령어
    • D7I'으로 동작(D7=1, I=0)
    • 1클록마다 데이터를 읽어온다고 가정,
    • T0 : AR < PC
    • T1 : IR < M[AR], PC < PC+1
    • T2 : IR decode, 데이터 전달
    • D7I'T3B11
      • IR 내용이 0111 / 1000 / 0000 / 0000
      • 결과 I + Opcode가 7(0111)인 경우 T3이 동작
      • B11만 1이므로 7xxx Clear AC(CLA)로 동작
    • register reference 명령어의 동작 symbol을 r로 정의
      • r = D7IT3D7I'T3
      • B값(address bit 위치)에 따라 다른 명령어 수행
  • memory reference 명령어
    • BUN(Branch Unconditionally) : 지정 주소로 복귀
    • BSA(Branch and Save Return Address)
      • PC+1에는 BSA 다음에 실행할 명령 저장
      • BSA 주소부터 시작하여 subroutine 동작
      • subroutine 마지막에는 1 BUN (BSA 주소) 저장 : 완료 후 PC+1 주소로 복귀하여 다음 명령 수행

I/O, Interrrupt

  • 입/출력 기기와 컴퓨터 사이에는 인터페이스가 존재
    • 컴퓨터에서는 입/출력 레지스터(INP/OUTR)까지만 데이터 전송
    • 인터페이스가 기기와 컴퓨터 사이의 데이터 통신 조절
    • FGI/O : 데이터의 입/출력 Flag
      • FGI = 0 : 컴퓨터 사용중 / FGI = 1 : 새로운 입력 가능
  • I/O 명령어
    • INP / OUT : 입/출력
    • SKI / SKO : FGI/O 존재 시 명령어 생략(PC + 1)
    • ION / IOF : 인터럽트 flag(R) on/off
  • 인터럽트
    • 현재 동작하던 명령을 별도로 저장 후, Interrupt Cycle 수행
    • FGI/O = 1이 되면 R flag = 1로 set
    • 일반 명령어 Cycle은 R'T0, R'T1, ...의 양식으로 표현
    • 처음 명령어를 Load하는 구간(T0~T2)에는 R이 set되지 않음
      • T0'T1'T2'(IEN)(FGI+FGO) 일 때 R < 1
      • FGI/FGO가 동시에 high일 경우의 처리 순서는 ISR(인터럽트 서비스 루틴)에 따라 결정
    • 인터럽트 Cycle은 RT0 - RT1 - RT2 - ...
      • RT0 : AR < 0, TR < PC
      • RT1 : M < TR, PC < 0
      • RT2 : PC < PC + 1, IEN < 0, R < 0, SC < 0
        • IEN은 추후에 다시 1로 설정됨

Boolean Example

  • 각 명령어의 Boolean 표현은 해당 동작을 하는 모든 operation의 합으로 표현
    • ex. load AR to BUS : < AR로 표현되는 모든 식의 합
    • = D4T4+D5T5
  • ALU Load
    • AC에 Load되는 모든 데이터는 ALU를 거쳐 들어옴
    • +1(Increment), CLR는 AC에 직접 처리됨
728x90
728x90
Memory Transfer

Memory Transfer

  • 메모리에 데이터를 읽거나 쓸 때 필요한 버스(신호)
    • Address
    • Data
    • Control(Read, Write, etc...)
  • 데이터의 이동
    • DR << M[AR] : address + data + control(read)
      • DR : Data Register
      • AR : Address Register - 메모리의 AR 주소에 해당하는 데이터
    • M[AR] << R1 : address + data + control(write)
      • 1번 레지스터의 내용 전체를 AR주소로 Write
      • 레지스터는 일부만 접근할 수 없으므로 반드시 전체를 복사
  • 레지스터와 메모리의 차이
    • 레지스터는 항상 데이터가 출력중 : BUS와 Load 신호로 입-출력 조정
    • 메모리는 Control Signal을 통해 입-출력 조정

Arithmetic Microoperations

  • Add operation
    • R3 << R1 + R2
    • 덧셈 : 모든 산술연산의 기본 ex. 뺄셈 : R3 << R1 - R2 = R1 + (R2' + 1)
    • Full-Adder
      • A + B + Cin = S + Cout
      • 아랫 자리에서의 올림수 Cin이 입력에 추가되고, 윗 자리로의 올림수 Cout이 출력에 추가
      • Ripple Adder : 전가산기 다수를 연결 - 구조가 단순하지만, 자리수가 커질수록 연산이 느려짐
    • Binary adder-subtractor
      • M 신호가 0이면 adder, 1이면 subtractor로 동작
      • M이 1일 경우 XOR에 1 입력으로 인해 B의 숫자는 2의 보수로 출력되고, Carry in에 1이 들어가 감산기로 동작 (R3 << R1 - R2 = R1 + (R2' + 1))
    • Binary incrementer
      • 반가산기(Carry in이 없음)의 한쪽 값에 항상 1이 들어감

Logic Microoperations

  • 산술이 아닌 논리이므로 carry 없이 입력만으로 계산
    • 각 논리연산 (AND, OR, XOR, Not...)의 결과를 MUX로 출력 선택
    • n-bit unit : bit 개수만큼의 mux 연결

Shift Microoperation

  • Shift operation의 종류
    • Logical, shl/shr (0 채우기)
    • Circular, cil/cir (rotational shift)
    • Arithmetic shift, ashl/ashr
      • ex. signed two's complement number (MSB가 1이면 -, 0이면 +)
      • shift right : sign bit는 변하지 않고, 해당 자리를 제외한 MSB를 sign으로 채움
        • ( ex. 1000 >> 1100 , 0111 >> 0011)
      • shift left : LSB는 0으로 채워짐, 나머지는 왼쪽으로 shift
        • ( ex. 0111(7) > 1110(-2, overflow), 1011(-5) >> 0100(6) )
        • Overflow check : (MSB) XOR (MSB 바로 아래 bit) = 1이면 overflow
  • Shift circuit
    • S = 0 >> MUX의 0 input 출력 : A2 A1 A0 IR
    • S = 1 >> MUX의 1 input 출력 : IL A1 A2 A3
728x90
728x90

 

1. Parity bit

  • 두 시스템 사이에 통신을 할 때, 외부 노이즈(전기장 등) 에 의한 노이즈가 존재한다.
  • Parity bit : data bit + parity bit의 1의 개수를 일정하게 하여 오류를 확인
    • Even parity : data와 parity bit의 1이 짝수 개 존재
    • Odd parity : data와 parity bit의 1이 홀수 개 존재
  • 실제 시스템의 Parity bit 활용
    • 송신부 : 입력된 데이터로 Parity Generator가 Parity bit 생성, 데이터와 함께 전송
    • 수신부 : 송신된 데이터 Parity bit와, 송신 데이터로 직접 만든 Parity bit가 동일한지 여부 확인
  • Parity Generator / Parity Checker(Error Indicator) 설계
    • Generator : XOR / XNOR Gate로 1의 개수가 짝수인지, 홀수인지 판별 - ex) 3-Input, odd parity : 1^1^1 = 1 > 1의 개수를 홀수로 맞춰야 하므로 x XOR y XNOR z 로 Parity Generator 설계
    • Parity Checker(Error Indicator) : 입력으로는 수신된 데이터와 Parity bit, 출력으로는 오류 여부를 출력하게 할 경우 둘을 비교 - Parity Generator와 같은 회로에 수신된 Parity bit을 추가

2. Register Transfer and Microoperations

1. Register Transfer

  • 레지스터 : 레지스터와 레지스터의 동작을 이용하여 디지털 모듈 정의
  • 디지털 장비 내부의 HW 구성
    • 레지스터 Set + 함수
    • Microoperation ( 컴퓨터 동작 시 가장 기본이 되는 명령어, 그 결과는 다른 레지스터를 덮어씌우거나 같은 register값을 replace할 수 있음)
    • 시퀀스 조작
  • 레지스터는 가급적 대문자로 표현
  • 레지스터 표현
    • C : Bit의 크기를 표현 / 15bit가 항상 MSB인 것은 아니다
    • D : 레지스터를 읽어들일 땐 함상 전체를 한번에 읽어야 한다(부분만 읽을 수 X), 그렇기 때문에 큰 크기의 레지스터의 경우 H/L 등 파트를 나누어 그 일부만 읽어들일 수 있게 한다.
  • 레지스터는 수정 없이 전체 내용을 한번에 이동해야 한다.
    • 특정 Bit를 확인할 경우 먼저 그 내용을 복사해서 복사된 내용을 확인
    • Source에서 Destination으로 복사 시 두 데이터는 동일하게 됨(Source 데이터는 사라지지 않는다)
  • 레지스터는 플립플롭의 조합 ex. 8-bit register : 8개 FF
    • ex. Register Transfer : Clock 신호가 Rising이고, Load가 High일 때 모든 레지스터 Bit 전달
    • Parallel 통신의 경우 모든 레지스터가 Clock을 공유하므로 Rising할 때 한번에 데이터 전송
    • 이 때 설계상 결함이 있어 특정 레지스터의 Clock전달이 늦을 경우 정상적인 통신이 되지 않게 됨
  • Control Function
    • [조건 : 동작]으로 표현 ex. P : R2 ← R1 (P 조건이 맞을 경우, R1 데이터를 R2로 전송)
    • 한번에 다수 동작 시에는 콤마로 분리 ex. T : R2 ← R1, R4 ← R3
    • 데이터 왕복은 Edge Trigger, Master-Slave만 가능 ex. Q : R1 ← R2, R2 ← R1
    • 한 번에 같은 레지스터로 복사하는 것은 불가 ex. R : R2 ← R1, R2 ← R3 (X)
  • Serial Transfer
    • Source/Destination 모두 shift resgister
    • 1bit씩 데이터 전송, 데이터 손상을 방지하기 위해 Rotational Shift로 동작
    • Clock 속도만 증가시키는 것으로는 통신속도 증가에 한계 - Signal의 Charge/Discharge의 최소 interval 존재
  • Bus
    • n-bit 레지스터 사이의 연결선 수 = nC2_nC_2 ex. 3-bit : 6-lines
    • 단방향 통신 시 양방향 path를 모두 만들어줘야 하므로, bit수 증가에 따라 비용이 과도하게 증가
    • Bus : 관련된 신호선을 그룹으로 모아 두어 통신 ex. 16-bit 레지스터들의 경우 16-line Bus로 연결
    • Bus System의 예 : MUX 활용
      • 레지스터 각 Bit 위치를 MUX로 묶어주어 Select Signal을 통해 원하는 레지스터를 선정할 수 있다.
      • 데이터 입력을 위해 BUS 라인과 레지스터 입력으로 연결하고, 레지스터에 Load를 추가한다 : MUX 선택 시 출력 데이터가 선택되고, Load 시그널을 준 레지스터로 해당 데이터가 입력된다.
      • 한계 : 한 번에 1개 전송만 가능 - 동시 통신을 위해서는 그만큼의 버스가 필요
        • ex. BUS ← R4, R1 ← BUS = R1 ← R4
      • 실제로는 MUX보다는 Tri-state Buffer로 BUS 통신하는게 더 일반적
728x90

+ Recent posts