본문 바로가기

전체 글100

Single-Cycle Processor(2) ALUN비트의 A oeprand와 N비트의 B operand를 받아 N비트의 reuslt를 출력한다.ALUContorl 시그널을 외부에서 줘서 ALU의 동작을 우리가 바꿀 수 있다.이 값에 따라서 위에 제시된 표의 연산을 수행한다.addadd인 경우 ALUControl이 000이다.그래서 Sum에서 A를 그대로 받고 B에 달려있는 Mux에서도 ALUControl 의 LSB가 0이기 때문에 B를 그대로 받는다.또한 여기에 ALUControl의 LSB를 다시 더하는데 이 값은 0이기 때문에 결과적으로 그냥 A와 B를 더한다.subtract이 경우에는 ALUControl의 값이 001이다.그래서 Sum에서는 A를 그대로 받아 더하고 ALUControl의 LSB가 1이기 때문에 B의 비트들을 모두 반전시킨 후,.. 2025. 10. 16.
Single-Cycle Processor(1) Architectural State Elements어떤 저장 요소들이 프로세서의 현재 상태를 결정하는지 알아본다.CPU의 모든 동작은 이 상태 요소들의 값으로 완전히 결정된다.구성 요소역할크기 / 개수Register File연산을 위한 임시 저장소32개 × 32비트Program Counter (PC)현재 실행 중인 명령어의 주소32비트Memory명령어 및 데이터 저장소보통 수 MB 이상 (32비트 주소 공간)Register File총 32개의 레지스터가 있다.각 레지스터는 32비트이고 ALU연산이나 메모리 접근 시 가장 기본적인 저장 단위로 사용된다.x0은 항상 0으로 고정됨. 규칙임포트포트방향역할A1, A2입력읽을 레지스터의 주소 (rs1, rs2)A3입력쓸 레지스터의 주소 (rd)RD1, RD2출력읽.. 2025. 10. 16.
Arithmetic for Computers(2) IEEE 754의 기본 구조와 정규화/특수값에 대해서 알아본다부동 소수점의 덧셈과 곱셈의 흐름을 알아본다.뒤에서 나올 RNE의 의도와 효과를 알아본다RISC-V에서 기본 부동 소수점 명령이랑 레지스터의 예를 살펴본다왜 정수가 아니라 ‘부동소수점’인가컴퓨터는 센서값부터 물리나 금융 계산까지 폭넓은 크기의 실수를 다룬다.부동소수점은 값을 정규화해서 ±1.~~~ X 2^k 로 표현한다.아주 작은 수와 아주 큰 수를 같은 형식으로 담을 수 있다.그리고 정규화를 하게 되면 가수부의 맨 앞에는 항상 1이 존재하는데 굳이 저장하지 않아도 된다.같은 비트폭에서 유효자릿수를 최대화 하는 것이다.그리고 부동소수점은 수를 표현할 수 있는 범위가 완전 압도적으로 넓다.예를 들어 단정밀도는 대략 ±1.0×2^−126에서 ≈±2.. 2025. 10. 16.
Arithmetic for Computers(1) MultiplicationShift-Add Algorithm이건 시프트와 덧셈을 반복하는 방식이다곱셉도 결국 덧셈의 반복이기때문에, 곱하는 쪽의 각 비트를 하나씩 확인하면서 1이면 더하고, 0이면 그냥 시프트만 한다.과정Multiplier의 LSB가 1이면 Multiplicand를 Product에 더한다.Multiplicand를 왼쪽 시프트, Multiplier를 오른쪽 시프트한다이걸 비트 수만큼 반복한다.이 방식은 간단하지만 매 단계가 순차적으로 느리다. ⇒ 비트 수만큼 사이클이 필요함Optimized Multiplier이제는 모든 부분 곱을 동시에 계산하고, 병렬로 더하는 구조를 쓴다.앞에서는 자세히보면 Product 의 상위 4비트는 놀고 있고, 하위 4비트는 초기에는 0000이다.그래서 하위 4비.. 2025. 10. 16.
Machine Language 기계어는 컴퓨터 하드웨어가 직접 이해하고 실행할 수 있는 명령어의 이진수로 나타낸 것을 말한다.RISC-V에서는 모든 명령어가 32비트로 표현된다명령어의 형식으로는 4가지 타입이 있다구분명령어 종류역할예시R-TypeRegister 타입레지스터끼리 연산add, sub, and, orI-TypeImmediate 타입즉값(상수)과 연산 또는 loadaddi, lw, jalrS/B-TypeStore / Branch 타입메모리 저장, 조건 분기sw, sh, beq, bneU/J-TypeUpper / Jump 타입상위비트 로드, 점프 명령lui, jalR-TypeR 타입은 레지스터간 연산을 수행하는 명령어 형식이다.두 개의 레지스터의 값을 읽어서 연산 결과를 다른 레지스터에 저장한다.비트 구간필드명비트 수설명31–.. 2025. 10. 16.
Instructions(3) 여기서는 RISC-V의 함수 호출 매커니즘과 스택의 프레임 구조를 알아본다.Function Calls함수 호출은 한 프로그램이 다른 코드 블록(함수)를 실행하도록 제어를 이동시키는 것이다.예를 들어 아래 c 코드를 생각할 수 있다.void main() { int y; y = sum(42, 7);}int sum(int a, int b) { return (a + b);}여기서 main 은 caller, sum 은 callee다.caller와 callee의 역할은 아래와 같다.역할하는 일Caller (호출자)- 인자(argument)들을 레지스터에 전달 - 복귀 위치를 저장 - 함수로 점프Callee (피호출자)- 전달받은 인자로 작업 수행 - 결과를 반환 레지스터에 저장 - 호출 지점으로 복귀 - 호출.. 2025. 10. 7.