pipelined datapath 의 두 가지 키포인트 1. 어떤 것을 한 단계에서 다른 단계로 전달하려면, 파이프라인 레지스터에 넣어야 한다. - 그렇지 않으면, 다음 명령어가 그 단계에 들어올 때 데이터나 정보가 손실된다. 2. 각 하드웨어 구성요소 - 명령어 메모리, 레지스터 읽기 포트, ALU, 데이터 메모리, 레지스터 쓰기 포트는 한 번에 한 단계에서만 사용할 수 있다. - 하드웨어는 여러 명령어에 의해 동시에 공유될 수 없다. 레지스터 파일은 읽기/쓰기를 위한 별도의 포트를 갖고 있으므로 다른 구성요소로 간주할 수 있다. 위는 pipeline datapath의 예시이다. 시간은 왼쪽에서 오른쪽으로 진행되고, 각 clock cycle(CC)마다 명령어가 진행된다. 다섯 개의 명령어가 차례로 파..
학교강의필기장/컴퓨터구조
위 파이프라인이 적용된 데이터패스에서 lw 명령어의 경우를 살펴보자. 명령어가 실행되면(IF), IF/ID 레지스터는 명령어를 저장한다. 이때 프로세서는 아직 명령어가 무엇인지 모르기에 beq를 대비하여 PC+4를 저장한다. ID 단계에서는 이제 데이터패스는 명령어가 lw임을 알게 된다 ID/EX 레지스터에는 ID 단계에서 생성된 데이터 세트(두 개의 32비트 데이터, 부호 확장된 immediate value, PC+4)가 저장된다. EX 단계에서는 레지스터 1의 값과 부호 확장된 immediate value를 ID/EX 레지스터에서 읽어온다. 두 값은 ALU를 통해 대상 데이터 메모리 주소를 계산하고 EX/MEM 레지스터에 저장한다. MEM 단계에서는 EX/MEM 레지스터에서 메모리 주소를 읽어와 데이..
앞서 다룬, 위의 Data Path 구현방식은 모든 명령을 처리할 수 있지만, 비효율적이기에 쓰이지 않는다. 그러면 어떤 방법을 사용해야할까? Pipelining 여러 가지 작업을 동시에 작동시킨다. pipelining의 각 단계를 stage라고 한다. stage란 명령어를 처리하는 동안 하드웨어 유닛에서 수행하는 활동이다. - 처리량(throught - 단위 시간 내 처리할 수 있는 작업 수) 향상시킴 - 응답시간(response time - 각각의 단일 작업 수행 시간) 은 같음 IF(Instruction fetch) : 메모리에서 명령을 가져옴 ID(Instruction decode/register file read) : 명령을 해독하면서 레지스터를 읽음 EX(Excute/address calcul..
control unit은 instruction type에 따라 모든 신호의 값을 결정한다. 입력은 명령어의 opcode(instruction 31-26), 출력은 7개의 signals PCSrc는 Branch와 ALU의 Zero 신호의 AND 게이트로 결정된다. 분기명령어(Branch = 1)이고, 분기가 실행될 때(Zero = 1) target address가 PC에 기록된다. jump instruction은 먼저 (1)에서 PC의 앞 4bit를 추출한 값을 얻고, (2)에서 instruction[25-0]에 2만큼 right shift한 값을 얻은 다음 둘을 XOR연산하여 합친다. 만약 instruction의 31-26, 즉 opcode가 jump 명령어(000010)이라면 control unit에서..
ALU는 3가지 중 하나의 기능을 한다. - lw/sw 명령어는 메모리 주소를 계산하기 위해 add 연산을 함 - branch 명령어는 두 레지스터 값을 비교하기 위해 subtract 연산을 함. - R-type 명령어는 6bit funct 필드의 값에 따라 actions을 정함. 우리는 datapath 에서 ALU가 수행할 기능을 결정하는 control unit이 필요하다. - input(2bits): 이 명령어는 lw/sw , branch-equal, R-type 중 무엇인가? - input(6bits): R-type인 경우, funct 필드의 값은 무엇인가? - output(4bits): ALU가 수행하는 기능은 무엇인가? ALU Control Unit에 2bit의 ALUOp, 6bit의 Funct..
위 회로는 브랜치 분기 명령어에서 사용되는 회로다. 이는 두 가지 출력으로 나뉘는데, 예를 들어 beq $t1 8($t2)가 입력됐다고 가정하자. 첫번째 출력은 대상 주소 출력이다. 상대 주소인 8은 Sign-extend 회로로 16bit에서 32bit로 변환된다. 그 후 Shift left 2 회로로 4가 곱해져 워드 단위의 상대 주소가 된다. Adder(가산기)로써 PC+4와 합쳐져 대상 주소가 출력된다. 두번째 출력은 조건문에 따른 출력이다. Read register에 $t1과 $t2가 입력되고, Read data로 출력된다. 출력된 값은 ALU에 입력되어 subtract 연산을 수행한다. 만약 zero flag가 활성화된다면 둘은 같은 것이므로 대상 주소에 위치한 명령어가 수행된다. 1) inst..
Datapath Elements(데이터 경로 요소)에는 Instruction memory, Program counter, Adder가 있다. Instruction memory(명령어 메모리): 프로그램의 명령어를 저장하는 메모리로, 주소(입력)이 주어지면, 해당하는 명령어(출력)을 공급 Program counter: 현재 명령어의 주소를 보유하는 레지스터 Adder(덧셈기): 다음 명령어의 주소를 위해 PC를 증가시키는 논리 회로로, 산술 논리 장치(ALU)에서 수행되는 산술/비트 연산에서 구성됨 프로세서는 PC의 주소를 명령어 메모리(Instruction memory)에 입력함으로 해당 명령어(Instruction)를 가져온다. 다음 명령어를 실행하기 위해서는 PC를 증가시켜야하는데, 명령어 하나의 크..
위 그림은 MIPS의 구조를 요약한 것이다. Processor에서부터 하나씩 뜯어보자. 이 부분은 Registers가 입력을 받고, 출력을 하며, 결과값을 입력받기까지 하는 부분이다. R-type의 경우 필드가 3개기에 입력 addr이 3개이다. 예를 들어, add dst src1 src2 라고 하면 각각 dst addr, src1 addr, src2 addr로 들어간다. 각각 5bit의 wide를 차지한다. src1 data와 src2 data는 src1 addr와 src2 addr의 데이터를 출력해준다. write data로 들어온 입력은 dst addr의 데이터에 입력된다. Program Counter의 출력은 현재 명령어의 위치이다. 위 그림에서는 PC의 출력값을 Adder의 첫 번째 입력으로 주..