[컴퓨터구조] #7 단일 사이클 구현 2

2023. 4. 23. 16:06·전공/컴퓨터구조
728x90
반응형

 

R-type/Load/Store Datapath

 

단일 사이클 데이터패스

별도의 명령어 메모리, 데이터메모리를 가짐

- 별도의 형식(명령어, 데이터)을 가짐

- 메모리를 별도로 가지면 저렴함(듀얼포트 메모리에 비해)

- 한 사이클에 명령어메모리와 데이터메모리 동시 접근가능

 

단순구현

- lw(load word)

- sw(store word)

- deq(branch if equal)

- add, sub, or, set on less then

 

단순구현 데이터패스

 

ALU 동작(연산)

- Load/Store는 add(메모리주소 계산)

- Branch는 substract(같은지 비교를 위해)

- R-type은 funct 필드(하위 6비트)의 값에 따라 동작

- funct 필드 + ALUOp(op코드의 2비트) -> ALU 제어입력

00(add -> lw, sw), 01(sub -> beq), 10(funct에 따름)
ALU control Function
0000 AND
0001 OR
0010 add
0110 subtract
0111 set-on-less-then
1100 NOR

 

2비트 ALUOp는 opcode에서 가져옴

opcode ALUOp Operation funct ALU function ALU control
lw 00 load word XXXXXX add 0010
sw 00 store word XXXXXX add 0010
beq 01 branch equal XXXXXX substract 0110
R-type 10 add 100000 add 0010
substract 100010 substract 0110
AND 100100 AND 0000
OR 100101 OR 0001
set-on-ledd-than 101010 set-on-ledd-than 0111

 

ALU 제어신호를 위한 진리값

 

명령어 디코딩

 

주제어유닛

 

Datapath with Control

 

각 제어신호의 의미

RegDest

  • 0 -> 명령어 rd필드가 Write Register 번호가 됨
  • 1 -> 명령어 rt필드가 Write Register 번호가 됨

 

RegWrite

  • 1 -> Write data값을 Write Register 번호에 씀

 

ALUSrc

  • 0 -> Read Data 2가 ALU의 두 번째 오퍼랜드가 됨
  • 1 -> 부호확장된 명령어의 하위 16 비트값이 ALU의 두 번째 오퍼랜드로

 

PCSrc

  • 0 -> PC에 4를 더함
  • 1 -> 분기 목적지 주소값을 새로운 PC값으로

 

MemRead

  • 1 -> 데이터메모리의 Address 주소의 값의 Read Data의 출력으로 나옴

 

MemWrite

  • 1 -> Write Data의 값을 데이터메모리의 Address 값에 기록

 

MemtoReg

  • 0 -> ALU 출력이 레지스터 Write Data 입력값으로
  • 1 -> 데이터메모리 출력이 레지스터 Write Data 입력으로

 

명령어별 신호값

 

R-type Instruction(add $t1, $t2, $t3)

  1. 명령어 인출 및 PC증가
  2. $t2, $t3를 읽음 + 제어선 값 설정
  3. ALU에서 연산, ALU제어값은 funct값(5:0)을 사용
  4. ALU의 결과값을 레지스터에 저장(명령어의 15:11 값을 사용해서 $t1을 설정)

 

Load Instruction

  1. 명령어 인출 및 PC증가
  2. 레지스터 $t2의 값 읽음
  3. ALU는 레지스터에서 읽은 값과 명령어의 하위 16비트(offset)에 부호확장된 값을 더함
  4. 결괏값을 데이터메모리의 주소로 사용
  5. 메모리에서 가지고 온 값을 $t1(대상은 명령어의 20:16)에 사용

 

Branch on equal instruction(beq $t1, $t2, offset)

  1. 명령어 인출 및 PC증가
  2. 레지스터 $t1, $t2 값 읽음
  3. ALU는 빼기 계산, offset(명령어의 하위 16비트)를 부호확장해 2비트 왼쪽 쉬프트한 값에 PC+4 값 더함, 이 값이 목적지 주소
  4. 더한 값을 PC에 저장할 것인지 ALU Zero 출력을 이용해서 결정

 

최종 제어유닛

 

Jump 명령어 추가

- Jump는 word 주소기반

- PC(Program Counter)를 이전 PC의 4비트 26비트 jump 주소 + 00로 세팅

- Opcode에서 추가 제어 신호(control signal)가 필요함

Jump 명령 추가된 데이터패스

단일 사이클 구현의 문제

모든 평령어에서 클럭사이클이 같은 길이를 가져야 함

- 전체적인 성능 감소

- 크리티컬 패스는 적제(Load) 명령어 - 명령어메모리, 레지스터 파일, ALU, 데이터메모리, 레지스터 파일 사용

- 클럭사이클은 적재 명령어에 맞춰야 함

 

멀티 사이클 구현

- 각 단계를 한 사이클씩 사용

- 명령어마다 필요한 클럭 수가 달라질 수 있음

- 한 명령어 안에서 기능유닛 여러 번 사용 가능

- 한 명령어 실행 네에서 기능 유닛을 공유 가능

- 하드웨어 비용감소

 

- 추가 Mux/임시 레지스터/제어신호 필요

 

728x90
반응형

'전공 > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] #1 컴퓨터구조 - 추가 사설 문제  (0) 2023.04.25
[컴퓨터구조] #8 파이프라이닝  (0) 2023.04.23
[컴퓨터구조] #6 단일 사이클 구현 1  (0) 2023.04.23
[컴퓨터구조] #5 프로세서  (0) 2023.04.15
[컴퓨터구조] #4 컴퓨터 연산  (0) 2023.04.15
'전공/컴퓨터구조' 카테고리의 다른 글
  • [컴퓨터구조] #1 컴퓨터구조 - 추가 사설 문제
  • [컴퓨터구조] #8 파이프라이닝
  • [컴퓨터구조] #6 단일 사이클 구현 1
  • [컴퓨터구조] #5 프로세서
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    42서울
    자바
    리눅스
    티스토리챌린지
    사설 문제
    자료구조
    컴퓨터구조
    상속
    데이터패스
    메모리 계층 구조
    컴퓨터 구조 및 설계
    추가 문제
    반복자
    코틀린
    단일 사이클
    컴공 포트폴리오
    명령어
    백준
    오블완
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[컴퓨터구조] #7 단일 사이클 구현 2
상단으로

티스토리툴바