본문 바로가기
반응형

시스템 반도체/컴퓨터 구조 (RISC-V)24

컴퓨터 구조 Branch instruction ( beq, jal, jump 범위, RISC-V ) Branch instruction을 왜 쓰냐 하면 조건에 따른 동작을 하기 위해서 사용한다. 즉, 이동하기 위해서이다. PC 레지스터가 동작을 하며 계속 증가하다가 branch 명령어를 만나면 조건에 따라 PC의 값을 바꾼다. 그리고 바뀐 주소로 이동하여 동작을 수행한다. 이렇게 branch 명령어는 PC와 밀접한 관계가 있다. branch 명령어는 크게 2가지로 나뉠 수 있다. 조건에 따른 branch와 조건과 상관없이 동작하는 branch가 있다. 하나씩 보자. 1. Conditional Branch 조건에 따른 명령어이다. 조건이라 함은 비교를 말한다. 조건은 ==, , !=, = 이렇게 6가지가 있다. 아래 명령어를 보자 - beq (branch if equal) ( a == b ) - bne (.. 2022. 3. 1.
컴퓨터 구조 pseudo instructions ( lui, auipc, 가짜 명령어, 의사 코드, RISC-V ) 먼저 2가지 명령어를 알아보고 pseudo를 알아보자. lui (load upper immediate) 간단히 보자, u-type으로 lui t0, 0x12345 하면 t0 레지스터의 왼쪽에 0x12345를 채워 넣고 나머지 bit는 0으로 채워 넣는다. ( 0x12345인 이유는 imm이 20bit이다. ) auipc (add upper immediate to pc) lui와 똑같은 u-type이다. 간단한 동작이다. auipc t0, 0x12345라고 하면 먼저 lui를 하고 pc 레지스터랑 add 한다. pc = 0x0102_3040이라 한다면 아래와 같다. 0x1234_5000인 이유는 lui를 했기 때문이다. pseudo instructions ( 의사 코드 (가짜) 명령어) 번역 그래도 가짜 .. 2022. 2. 27.
컴퓨터 구조 lb, lbu, sb instruction (RISC-V) lb (load byte) and lbu ( load byte unsigned ) I-type으로 word를 읽어오는 것이 아니라, 바이트(byte)를 읽어오는 명령어이다. 사용은 lb t0, 1(s3)와 같이 한다.어떤 뜻이냐면 s3 + 1 한 주소에 있는 데이터를 t0에 집어넣는다. 그런데 문제가 있다. 만약 32bit cpu라면 레지스터는 4byte(32bit)의 크기를 가지고 있다. 하지만 lb는 byte를 불러오는 명령어로, 1byte라 사이즈가 안 맞다. 이때 어떻게 될까? 데이터를 LSB에 채우고 나머지를 sign extension 한다. 예로 FF를 불러오면 FFFF_FFFF로 채워진다. 여전히 -1의 값을 가지니 문제가 없다. 이어서 다른 명령어인 lbu ( load byte unsign.. 2022. 2. 27.
컴퓨터 구조 lw, sw instruction (RISC-V) lw (load word) lw는 I-type이다. 바로 예를 들어보자 lw t0, 24(s3)라고 있으면 s3 주소에 24를 더한 후 결괏값에 해당하는 주소에 있는 값을 t0에 저장한다. s3가 0x94라면 24는 0x18이다. 이 둘을 더한 결괏값은 0xac인데 이 주소에 해당하는 데이터를 t0레지스터에 저장한다. 이때 s3를 base라 하고 +2047, -2048로 제한이 있는 이유는 imm [11:0]이라 12bit로 정해져 있기 때문이다. sw (stores writes) lw의 s-type으로 lw와 반대 동작을 한다. lw는 레지스터에 값을 저장하지만, sw는 반대로 레지스터에 있는 값을 메모리에 저장한다. 예를 들어보자 sw t2, 8(s3)라면 t2에 저장돼 있는 데이터를 s3 + 8의 .. 2022. 2. 27.
컴퓨터 구조 Data transfer ( instruction acess, Data acess, read, write, PC register ) 왜 cpu는 메인 메모리에 접근해야 하나? 1. 명령어의 접근 2. 데이터의 접근 Instruction Access (Read) 모든 cpu는 PC (program counter)라는 플립플롭으로 구성된 특별한 레지스터를 가지고 있다. 이 PC레지스터를 이용하여 명령어에 접근한다. 컴퓨터를 켜면 PC는 메모리에서 first instruction 주소을 가져온다. 어떤 명령어인지는 모르지만 그 주소에 있는 명령어를 가져온다. 처음 가지고 있던 주소를 address bus로 보내면 그에 맞는 명령어를 cpu로 가져와서 실행시킨다. 하나의 동작이 끝나면 PC는 자동으로 증가하여 명령어들을 실행한다. cpu는 전원이 끝날 때까지 계속 반복한다. RISC-V에선 PC의 초기값이 0으로 돼 있다. 추가적으로 4bi.. 2022. 2. 26.