CS/컴퓨터 구조

CS/컴퓨터 구조

[컴퓨터 구조] 14. Single Cycle MIPS - 회로 정리 & ALU

앞에서 Fetch - Decode - Execute 순으로 회로를 점차 개선하는 과정을 보였었다. 이번에는 이를 한번에 정리해서 명령어별로 어떤 데이터 패스를 통해 실행되는지 정리하려고 한다. 그리고 ALU 가 연산자별로 연산을 택하는 그 구체적인 과정도 함께 정리한다. lw 명령어 실행하기 fetch lw 명령어를 실행하는 과정을 하나씩 그려보자. 먼저 명령어를 가져올 메모리와, PC 레지스터가 필요하다. 다음과 같이 그렸다. 이제 메모리에서 읽어온 명령어를 decode 해야한다. decode 읽어온 명령어의 31:26 비트를 보고 opcode를 파악해서 lw 명령어임을 파악한다. 25:21 비트를 reg file 의 ra에 전달해서 base address 주소를 가져온다. 다음으로는 15:0 비트를 ..

CS/컴퓨터 구조

[컴퓨터 구조] 13. Single Cycle MIPS - Execute

MIPS CPU의 Execute 단계가 어떻게 실행되는지 명령어의 기능에 따라 구분하여 정리하였다. 산술/논리 연산자 실행 add, sub, addi, or, and 와 같은 명령어를 실행하는 과정을 먼저 생각해보자. 우선 위 연산을 실질적으로 실행하는 유닛은 ALU 라는 유닛이 수행한다. 산술 연산과 직접적으로 관련된 명령어 포맷은 R 포맷과 I 포맷 밖에 없다. R 포맷은 모든 피연산자가 레지스터고, 연산 결과가 레지스터로 들어간다. I 포맷은 피연산자가 하나는 레지스터, 하나는 상수고, 연산 결과가 레지스터로 들어간다. 우선 피연산자 하나는 반드시 레지스터에서 오고, 연산 결과는 레지스터로 들어가는 것이 동일하므로 아래와 같이 그릴 수 있다. 이제 결정해야 하는 것은 R 포맷이면 레지스터로부터 AL..

CS/컴퓨터 구조

[컴퓨터 구조] 12. Single Cycle MIPS - Decode

MIPS Decode 회로 지난 글에 이어 MIPS의 Decode 회로를 설계해보자. Decode 과정은 명령어를 해석하는 과정이다. 명령어를 실행하려면 크게 2가지 정보를 알아야 한다. 1. 무슨 명령어인가? ( = 연산자 정보) 2. 무엇을 가지고 실행하는가? ( = 피연산자 정보) MIPS 명령어는 포맷별로 아래와 같은 형태를 갖추고 있다. 3가지 포맷은 모두 공통적으로 6bit 크기의 opcode 필드를 갖고 있다. 이 opcode를 통해서 지금 주어진 명령어가 어떤 명령어인지 식별한다. R 포맷은 opcode 에 더해 function 필드 정보를 조합하여 실행할 명령어를 식별한다. 그리고 opcode 와 funct 를 제외한 나머지 필드가 모두 피연산자로서 활용하는 필드가 된다. 우선 J 포맷은..

CS/컴퓨터 구조

[컴퓨터 구조] 11. Single Cycle MIPS - Fetch

Fetch 회로도 fetch는 명령어를 가져오는 과정이다. 명령어를 가져올 때, 컴퓨터는 PC (Program Counter) 라는 특별한 레지스터를 이용한다. 이 레지스터에는 현재 실행할 명령어가 메모리 어디에 담겨있는지, 그 주소값이 담겨있다. 컴퓨터가 처음 실행되면, PC는 0으로 초기화되고, 메모리 0번지에 있는 명령어를 가져와 실행할 것이다. 하나의 명령어를 실행한 이후에는, 다음 명령어를 실행하기 위해 PC 값을 4 증가시킨다. (32bit 시스템 기준) 이 과정이 점프나 분기가 없는, 순차적으로 실행되는 프로그램 기준 Fetch 의 과정이다. 이를 회로도로 그려보자. 먼저 CPU 공간과 명령어를 가져오는 메모리 공간을 따로 그려보자. CPU 안에는 PC 라는 특별한 레지스터가 있다. 32bi..

CS/컴퓨터 구조

[컴퓨터 구조] 10. Single Cycle MIPS - 개요

Microarchitecture 컴퓨터 시스템은 위와 같은 계층으로 구성된다. 지금까지는 MIPS 명령어 체계를 정리하면서 3번째에 있는 Architecture 계층에 대해 고민했었다. 이제는 그보다 한단계 아래로 내려가서 마이크로 아키텍쳐를 보려고한다. 마이크로 아키텍쳐라는 말은 기계어로 된 명령어를 이해하고, 실행할 수 있는 CPU의 내부 하드웨어 구조를 의미한다. MIPS의 ISA를 구현하는 마이크로아키텍쳐는 다양하게 있다. 같은 ISA여도 구현은 얼마든지 바뀔 수 있다. (마치 x86을 구현한 AMD 와 Intel 의 CPU가 다른 것처럼) 대표적인 구현 방법으로 한 사이클에 하나의 명령어를 처리하는 Single Cycle 방식이 있다. 하나의 명령어를 실행하고, 그 명령어의 실행이 끝나면 그 다..

CS/컴퓨터 구조

[컴퓨터 구조] 9. 곱셈, 부동 소수점

곱셈 초등학교때 배운 곱셈 방식을 이용하면 이렇게 곱셈을 한다. 컴퓨터에서도 같은 방식으로 곱셈한다. 위에 곱하는 1000 을 곱해지는 수 ( = 피승수, multiplicand ) 라고 하고 아래에 곱하는 1001을 곱하는 수 ( = 승수, multiplier ) 라고 한다. 곱셈은 그 특성상, n bit 수와 m bit 수를 곱했을 때, 최대 n + m bit 수가 나올 수 있다. MIPS 의 경우, 32bit 수와 32bit 수를 곱해 최대 64 bit 수가 결과로 나올 수 있다. 이 수는 레지스터 하나에 저장할 수 없기 때문에 2개 레지스터를 사용하여 저장한다. 그래서 곱셈과 관련된 명령어는 위와 같이 사용한다. mult 는 r, s 레지스터의 값을 곱한다. 결과는 hi, low 라는 별도 공간에..

CS/컴퓨터 구조

[컴퓨터 구조] 8. Computer Performance

컴퓨터 성능의 측정 지표 1. Response Time ( Execution time, Latency) 특정한 작업을 시작해서 끝낼 때까지 걸린 시간을 측정한다. 개개인의 유저가 중요하게 생각하는 지표이며, 임베디드 컴퓨터와 개인용 컴퓨터는 response time 을 중요하게 생각한다. 2. Throughput 정해진 시간동안 처리하는 일의 양을 측정한다. 데이터센터나 슈퍼컴퓨터 관리자들이 중요하게 생각하며, '서버' 는 스루풋을 중요하게 여긴다. 컴퓨터 머신의 종류와 사용처에 따라 중요하게 생각하는 지표가 다르다. (쓰루풋을 단순히 response time 의 역수로 생각할 수는 없다.) Example 한번 다음과 같은 과정을 거쳐 빨래를 한다고 해보자. 세탁기는 30분, 건조기는 40분, 빨래를 개..

CS/컴퓨터 구조

[컴퓨터 구조] 7. MIPS 명령어 총 정리

산술 명령어 (Arithemtic Instructions) R - Format add, sub add rd, rs, rt => rd = rs + rt sub rd, rs, rt => rd = rs - rt mult $r, $s => r * s, 곱셈의 경우, 연산 결과는 따로 어딘가에 저장됨 mfhi $d => set hi to $d 연산 결과의 상위 32bit를 $d 레지스터에 이동 mflo $d => set lo to $d 연산 결과의 하위 32bit를 $d 레지스터에 이동 div I - Format addi / addiu addi rt, rs, imm => rt = rs + imm (rd 가 없으니 rt 를 대신 목적지로 사용한다. addiu 는imm 값을 zero extend 한다.) 논리 명령어..

CS/컴퓨터 구조

[컴퓨터 구조] 6. MIPS Branch Instructions

Load Constant MIPS에서 메모리에 있는 상수를 레지스터로 읽어올 때 2가지 방법이 있다. 첫번째는 메모리에 32bit 상수를 저장한 뒤, lw 명령어로 읽어오는 방법이다. 두번째는 lui, ori 2개의 instruction을 사용하여 읽어오는 방식이다. lui 명령어는 load upper immediate 의 줄임말로, immediate 필드에 있는 16bit 상수를 레지스터의 상위 16bit에 저장하는 명령어이다. 그리고 나머지 하위 16bit 의 상수는 ori 명령어로 bit combine 하여 가져온다. 위 이미지와 같이 1234 를 상위 16bit에 쓰고, 5678을 하위 16bit에 쓰도록 해서 원하는 32bit 크기의 상수를 레지스터에 저장할 수 있다. Pseudo Instruc..

CS/컴퓨터 구조

[컴퓨터 구조] 5. MIPS Data Transfer Instructions (2)

Zero Register 0번 레지스터는 항상 값을 0으로 유지하는 레지스터이다. 이 레지스터에 값을 쓰려고 할 수 있지만, 그 결과는 언제나 0이다. 이 레지스터는 다른 레지스터에 값을 옮기는 move 명령어를 구현할 때 0과 or 연산을 취해서 다른 레지스터에 값을 쓰는 식으로 move 명령어를 구현하는 용도로 사용된다. 또는 상수값을 레지스터에 쓰고자 할 때, 0과 더하기를 해서 원하는 상수값을 레지스터에 쓰는 용도로 쓸 수도 있다. 메모리에 접근하는 상황 우리의 컴퓨터는 stored program 방식을 사용하고 있다. 즉, 프로그램의 명령어와 데이터가 오프칩 메모리에 저장되어 있고, CPU는 명령어와 데이터를 메모리로부터 읽어와 연산하는 방식이다. CPU가 메모리에 접근하는 상황은 크게 2가지이..

에버듀
'CS/컴퓨터 구조' 카테고리의 글 목록