컴퓨터 구조론 Lecture 4 - 1

D0Lim·2021년 1월 7일
0

컴퓨터 구조론

목록 보기
13/13
post-thumbnail

시작하기 전

이 글은 필자가 수업시간에 들은 내용과 강의록을 토대로 정리한 글입니다.
수업 필기이다 보니, 오류가 있거나 설명이 부족한 부분이 있을 수 있습니다.
궁금하신 점이나 지적하실 점이 있다면 댓글로 달아주세요! 확인 후 내용을 추가하거나 답변해드리도록 하겠습니다 :)


자세히 살펴보기 전에…

  • CPU 성능에 영향을 미치는 요인들
    • 명령 수(Instruction Count)
      • ISA와 컴파일러에 의해 결정됨
    • CPI와 사이클 타임(Cycle time)
      • CPU 하드웨어 자체에 의해 결정됨
  • 우리는 두 가지의 MIPS 적용에 대해서 알아볼 것이다.
    • 간단한 버전으로 먼저 알아본다.
    • 그 후, 파이프라인을 적용한 버전도 알아본다.
  • 아래의 명령들을 구현해보면, 대부분의 측면을 보일 수 있다.
    • 메모리 참조 : lw , sw
    • 수식 / 논리 : add , sub , and , or , slt
    • 제어 전달 : beq , j

간단한 버전

중간 고사에 이를 ‘정확히’ 그리는 문제가 시험 문제에 나온다. 여기서 정확히라는 것은 회로를 정확히 그리는 것을 의미한다. 요소들 중 하나도 빠지는 것이 없게만 그리면 된다. 그림 자체가 일치할 필요는 없다. 무조건 암기하자.

2018-12-01 3 48 42


명령 실행(Instruction Execution)

  • PC \rightarrow 명령 메모리(Instruction memory)를 가리키고, 명령을 가져온다(fetch).
  • 레지스터 번호 \rightarrow 레지스터를 읽어오는 것에 사용된다.
  • 명령의 종류(Class)에 영향을 받는다.
    • ALU를 계산을 위해 사용한다거나...
      • 수학 / 수리적인 결과(Arithmetic Result)를 얻고 싶을 때!
      • 불러오기 / 저장하기 (load, store)를 위해서 메모리 주소를 알아야 할 때!
      • 분기 목적 주소(Branch target address)를 알아야 할 때!
    • 불러오기 / 저장하기 (load, store)를 위해 데이터 메모리(Data memory)에 접근한다거나...
    • PC를 PC + 4나 목적 주소로 설정한다거나...
  • 아, 참고로 지금 우리는 {lw, sw, add, sub, and, or, slt, beq} 의 경우에 대해서'만' 생각하는 중이란걸 잊지 말자!

CPU 개요

그러면, 위의 개요들만을 가지고 간단하게, CPU가 어떻게 생겼을지 그려보자.

2018-12-01 3 51 51


멀티플렉서(Multiplexer)

논리회로 수업을 기억하는가? 그 수업시간에, 멀티플렉서(줄여서 '먹스') 라고 하는 것을 배운 적이 있다! 기억이 나지 않는다고 하더라도, 분명히 배웠다. (필자도 기억이 안나서 저번 학기 강의록을 뒤져보았다...)
멀티플렉서는 간단하게, 여러 입력신호를 받았을 때, 하나의 입력신호만을 선택할 수 있게 해주는 도구 정도로 생각하면 된다.
그렇다면, 위의 개요 그림에서 멀티플렉서가 필요한 자리는 어디일까? 바로, 아래와 같이 신호들이 합쳐지는 자리들이 될 것이다.

2018-12-01 3 56 18


제어(Control)

그렇다면, 이 회로들을 어떻게 제어할 수 있을까? 우리는 수행해야 할 특정명령들을 수행하기 위해서 때로는 ALU의 입력값을 선택해야하고, 때로는 데이터 메모리에 값을 쓸지, 혹은 거기서 값을 읽어올지 선택하는 등 활성화할 회로들을 잘 선택해야한다. 우리는 이를 제어하기 위해 아래 그림과 같이 제어 신호를 쏴주는 제어 회로(Control)를 이용한다.

2018-12-01 3 57 27


논리 디자인 기초(Logic Design Basic)

이 내용은 논리회로 수업시간에 어느정도 배운 그대로입니다. 혹시나 모르신다면, Google에 해당 내용(버스, ALU, State 등등..)을 검색해보시면 쉽게 이해하실 수 있으리라 생각합니다.


연달아 일어나는 요소(Sequential Elements)

  • 레지스터
    • 우리가 컴퓨터 구조론 시간에 배운 '그' 레지스터와 거의 비슷한 개념이다.
    • 다만 이는, 논리회로에서의 레지스터이다. 즉, 프로세서의 레지스터가 아니다!
    • 레지스터는 논리회로에서 잠깐동안 데이터(bit)를 저장하는 장소이다.
    • 보통, 클락을 통해서 작동하고 클락이 0에서 1로 튈 때 정보가 업데이트 된다.
    • 논리회로 시간에 배운 플립플랍을 이용해 구현할 수 있다.
  • 읽기 제어가 포함된 레지스터
    • 말그대로, Write 신호가 1일 때만 정보를 업데이트 할 수 있다.
    • 정보를 저장한 상태로 두었다가, 나중에 써야할 때 쓰인다.

클러킹 방법론(Clocking Methodology)

  • 여러가지의 논리회로들은, 클럭 사이클 동안 데이터를 바꿔놓는다. 다른 말로, 상태(State)를 바꿔 놓는다.
    • 각각의 클럭 엣지(Clock edge)들 사이에 논리(logic)들이 들어간다.
    • 이전 상태의 요소들을 입력으로써 받고, 다음 상태의 요소들로써 출력으로 내보낸다.
    • 가장 긴 지연 시간(가장 긴 실행 시간)이 클럭 주기를 결정한다.

데이터패스 만들기(Building a Datapath)

  • Datapath
    • 데이터와 주소를 처리하는 CPU의 요소들
      • 레지스터, ALU, 멀티플렉서, 메모리 등등 ...
  • 회로를 점점 덧붙여가며 MIPS 데이터패스를 만들어보자!
    • 일단은, 간단한 명령들에 한해서만...
      • lw , sw
      • add , sub , and , or , slt
      • beq , j
    • 위의 개요에서 그려보았던 디자인을 수정하는 방식으로 그려보도록 하자!

명령 가져오기(Instruction Fetch)

  • 아래 그림과 같이, PC를 4씩 더해주면서, 다음 명령으로 넘어간다.
    • 왜냐하면, 워드(Word)는 4 Byte 단위이기 때문이다.
  • 또한, PC를 이용하여 실행해야 할 명령(Instruction)의 주소를 읽고, 명령 메모리(Instruction Memory)에서 명령을 끄집어낸다. 다른 말로, 가져온다.

2018-12-01 3 59 56


R-포맷 명령의 경우(R-Format Instructions)

  • 두 피연산자 레지스터를 읽어야 한다.
  • 산술 / 논리 연산을 수행해야 한다.
  • 그리고 그 결과를 레지스터에 써야만 한다.
  • 예시 : add , sub , and , or , slt
    • 참고로, R-포맷의 경우 "opcode"가 000000이다. 즉, funct 코드가 어떤 작업을 할지 결정한다.
  • 결론적으로, 아래 그림의 회로들이 필요하게 된다.

2018-12-01 4 00 25


불러오기 / 저장하기 명령(Load / Store)

  • 피연산자 레지스터를 읽어와야 한다. (lw 명령을 생각해보자)
  • 16비트 오프셋(offset)을 활용하여 주소를 계산해서 정확한 목적지를 알아내야 한다.
    • ALU를 사용한다. 그렇지만, ALU에 들어가는 것은 32비트로 확장된 오프셋이다.
  • 불러오기 : 메모리를 읽어와서 레지스터를 업데이트한다.
  • 저장하기 : 레지스터 값을 메모리에 쓴다.

2018-12-01 4 00 42


분기 명령(Branch Instructions)

  • 피연산자 레지스터를 읽어와야 한다.
  • 피연산자를 비교해야 한다.
    • 이 때, ALU로 값을 빼서, 'Zero'의 값을 결정한다. 이 값에 따라서 분기를 할 지 말지 결정하게 된다.
  • 목적지 주소를 계산해야 한다.
    • 얼마나 움직일지(변위, DIsplacement)를 부호 확장(Sign-extend)한다.
    • 왼쪽으로 2번 시프팅한다. (워드는 4바이트이기 때문)
    • 그리고 PC + 4를 더해준다.
      • 하지만 이것은 이미 명령을 가져오면서(Instruction fetch) 계산되어 있다.

2018-12-01 4 01 07


요소들 합치기(Composing the Elements)

  • 외워야 한다고 나와있던 그림의 데이터패스는 명령을 한 클럭 사이클만에 수행한다.
    • 각각의 데이터패스 요소들은 한 번에 하나의 함수(Function)만을 수행할 수 있다.
    • 앞 부분을 보면 명령 가져오기에서 사용하는 메모리와 불러오기 / 저장하기에서 사용하는 메모리가 각각 다르다. 그래서 우리는 분리된 명령 메모리와 데이터 메모리가 필요하다.
  • 각각 다른 명령마다 다른 입력 데이터(data sources)를 받는 경우엔 멀티플렉서를 쓴다. 하나의 입력 데이터만을 사용하기 위해서이다.
    1. ALU의 입력이 '레지스터'이거나 '명령 자체의 즉시값(immediate field)'이거나
    2. 레지스터에 값을 쓸 때 'ALU 출력값'을 쓰거나, '데이터 메모리'에서 가져오거나
    3. 다음 PC를 'PC + 4'로 하거나, '분기 목적 주소'로 하거나
    4. 쓸 레지스터의 번호(Register number)를 'Rt'에서 가져오거나, 'Rd'에서 가져오거나

제어가 포함된 전체 데이터패스(Full Datapath (with control))

즉, 아래와 같은 그림이 만들어질 것이다.

2018-12-01 3 48 42


출처

  • 컴퓨터 구조론 수업시간 내용 및 강의록
  • Computer Organization and Design 5th (David Patterson 저)

0개의 댓글