Please enable JavaScript.
Coggle requires JavaScript to display documents.
프로세서 (데이터 패스 (워드적재/워드저장 명령어 (ALU, 데이터 메모리 유닛: 읽기와 쓰기 제어신호, 주소입력, 데이터입력,…
프로세서
데이터 패스
워드적재/워드저장 명령어
ALU
데이터 메모리 유닛: 읽기와 쓰기 제어신호, 주소입력, 데이터입력
레지스터 파일
부호 확장 유닛: 16비트->32비트
분기 명령어
레지스터 파일
부호확장유닛, 덧셈기: 분기 목적지 주소 계산
ALU: 비교 연산
R형식 명령어
ALU
레지스터 파일: 네 개의 입력과 두 개의 출력 필요
데이터 패스 구성요소들을 하나로 묶고 제어를 첨가(멀티플렉서, 제어신호 사용)
단순한 구현
0000: AND/ 0001: OR/ 0010: add/ 0110: subtract/ 0111: set on less than/ 1100: NOR
opcode로부터 ALUOp 결정
데이터패스 동작: 명령어를 가져오고 PC 값 증가 -> 레지스터 값을 읽음(공통)
R형식: ALU가 연산 수행 -> 결과를 레지스터에 저장
적재: ALU는 합을 구하여 메모리 접근을 위한 주소로 사용 -> 메모리에서 가져온 데이터를 레지스터에 저장
분기: 뺄셈 수행 후 분기 목적지 주소 계산 -> 결과를 PC에 저장할지를 판단
단일 사이클 구현은 '자주 생기는 일을 빠르게' 설계 원칙 위배
MIPS 명령어
산술/논리 명령어
분기 명령어
메모리 참조 명령어
파이프라이닝
정의: 여러 명령어가 중첩되어 실행
명령어 사이의 시간(파이프라인) = 명령어 사이의 시간(파이프라이닝되지 않음) / 파이프 단계 수
해저드
구조적 해저드: 하드웨어가 지원하지 못해서 발생
데이터 해저드: 한 데이터가 아직 준비되지 않았기 때문에 발생 => 전방전달로 해결
제어 해저드: 인출한 명령어가 필요한 명령어가 아니기 때문에 발생 => 분기 예측으로 해결
정의: 다음 명령어가 다음 클럭 사이클에서 실행할 수 없을 경우
파이프라인
데이터패스 및 제어
명령어 실행 5단계: IF->ID->EX->MEM->WB
예외: 쓰기 단계, PC의 다음 값 선정
파이프라인 제어: IF(X), ID(X), EX(RegDst, ALUOp, ALUSrc), MEM(Branch, MemRead, MemWrite), WB(MemtoReg, RegWrite)
제어 해저드
분기에 따른 지연 줄이기: 분기 주소 계산을 끌어올림 => 분기 덧셈기를 ID 단계로 옮김 & 분기 여부 판단을 빨리 함
동적 분기 예측: 실행 정보를 이용하여 실행 시의 분기를 예측 => 분기 예측 버퍼를 이용
분기가 일어나지 않는다고 가정: 분기가 일어났을 경우 명령어를 버림(flush)
예외
예외는 제어흐름에서의 예기치 못한 변화, 인터럽트는 외부적인 요인에 의해 일어날 경우
MIPS 구조의 예외 처리: Cause 레지스터 이용, 벡터 인터럽트 이용
파이프라인 구현에서의 예외: 분기 발생 시 처리 방법과 동일하지만, 제어선들의 인가를 해제한다는 차이
논리 설계 관례
데이터 패스 구성 논리 소자
조합소자: 출력이 현재의 값에만 의존
상태소자: 메모리 소자 (ex: 레지스터, 메모리)
클러킹방법론
에지구동클러킹: 모든 상태 변화가 클럭에지에서 발생
명령어 수준 병렬성의 양 증가 방법
파이프라인의 깊이 증가
다중 내보내기
동적 다중 내보내기: 명령어를 순차대로 내보내고 주어진 클럭 사이클에 몇 개를 내보낼지를 결정 => 동적 파이프라인 스케줄링 포함
정적 다중 내보내기: 컴파일러가 명령어들을 내보내기 패킷으로 묶고 해저드를 처리
데이터 해저드
전방전달은 적재 명령어를 뒤따르는 명령어가 적재 명령어에서 쓰기를 행하는 레지스터를 읽으려고 시도할 경우를 해결 불가 => 해저드 검출 유닛 필요: 적재 명령어와 결과 값 사용 사이에 지연 추가