본문 바로가기
반응형

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

컴퓨터 구조 shifit ( 사용 이유, sll, slli, sra, srl, RISC-V ) Shifting shifting은 비트를 이동시키는 걸 말한다. 2가지 종류가 있다. 논리 쉬프트와 산술 쉬프트가 있다. left (왼쪽) right (오른쪽) Arithmetic (산술) sll, slli ex (1100 > 1) = 1110 Logical (논리) sll, slli ex (11001011 > 3) = 00011001 왼쪽으로 이동시키고 남은 자리는 산술이든 논리든 모두 0으로 채우기 때문에 구분하지 않는다. sll은 shift left logical의 약자다. 하지만 오른쪽으로 이동시키는 건 산술과 논리가 다르다. 논리는 왼쪽과 마찬가지로 0으로 채운다. 이에 반해 산술, sra는 MSB로 채운다. 만약 MSB가 1이라면 1로 채우는 게 다르다. 왜 사용하는가? RISC-V 기본 동작.. 2022. 2. 26.
컴퓨터 구조 zero extension, sign extension ( 부호 확장, 영 확장 ) 먼저 32bit cpu로 예를 들어보자 add x5 x6 x7을 수행하면, R-type으로 전체 32비트 레지스터가 ALU에 각각 32비트에 맞게 들어간다. 전혀 문제가 없다. 하지만 addi x5 x6 5와 같은 immediates를 하면 x6는 문제없지만 아래와 같아 imm [11:0] 즉, 12bit와 32bit는 짝이 맞지 않다. 여기서 어떻게 해야 숫자 5 (12bit)를 32bit에 맞게 집어넣을 수 있을까?? 2가지 방법이 있다. 하나는 모두 0으로 채우는 Zero Extension 다른 하나는 MEB값으로 채우는 Sign Extension이 있다. 하나씩 알아보자 Zero Extension 빈 bit를 모두 0으로 채우는 것이다. 예를 들어, addi t0 s3 -12라면, -12는 12b.. 2022. 2. 26.
컴퓨터 구조 CPU register ( 레지스터, R-type, I-tpye, 메모리 계층 ) 먼저 CPU 레지스터가 왜 필요한지부터 알 필요가 있는데, 그 이유는 메모리가 계층구조로 이루어져 있기 때문이다. 무슨 말이냐면 메모리에 단계가 있다는 의미다. 이런 단계를 거쳐야 속도가 빠르고 지연이 없다. 메모리는 다양하다. 하드 디스크, 메인 메모리, 캐시, 레지스터... 이렇게 다양한 메모리지만 크기와 사이클의 속도가 다르다. 사이즈가 크면 속도는 느리다. 그렇게 때문에 한 단계씩 load 해서 미리 불러 놓고, 필요할 때 지연이 없게 해야 한다. 예를 들면, CPU 레지스터는 캐시에서 데이터를 가져오고 캐시는 메인 메모리에서 가져온다. 이게 메모리의 계층이다. 이런 이유로 레지스터가 필요하다. 레지스터는 어떤 모습으로 존재할까? 예를 들어 32bit면 2의 5승이니 00000 ~ 11111가 있.. 2022. 2. 25.
컴퓨터 구조 CPU 동작 ( Data processing instructions, Memory access instructions, Branch instructions ) 유튜브에 간단히 정리해 놨습니다! https://youtu.be/ohHsK1hPCC0 CPU는 무조건 3가지 카테고리의 명령어 기능을 가지고 있다. 1. Data processing instructions 2. Memory access instructions 3. Branch instructions 하나씩 어떤 동작을 하는지 보면, Data processing instructions는 산술 연산과 논리 연산 기능을 말한다 Memory access instructions는 메모리에서 데이터의 읽고 쓰는 기능을 말한다 Branch instructions는 명령어 동작에 있어서 순차적으로 실행하는 것이 아니라 조건에 따라 명령의 이동을 가능하게 하는 기능을 말한다. RISC는 위와 같은 동작들의 하나하나를 의.. 2022. 2. 25.
컴퓨터 구조 Cross compilation ( makefile, Preprocessing, compilation, Assembler, Linker ) 아래 내용을 유튜브에도 정리해 놨습니다! https://youtu.be/cpvQbqpfeGw High-Level 언어 High-Level 언어 (C, JAVA..)는 컴퍼일러를 거쳐 Assembly 언어로 바뀌고 Assembly 언어는 Assembler를 거쳐서 Machine code (binary, object)로 바뀐다. 이렇게 하여 우린 0110101과 같은 숫자가 아닌 상위 언어를 이용하여 컴퓨터와 소통할 수 있게 됐다. 동작 실행 순서에는 아래와 같은 단계를 거쳐 이루어진다 1. Preprocessing : 실행할 코드를 가져오는 단계. #include같은 #지시자에 따라 소스코드의 주소를 적절히 변경한다 2. Compilation : Preprocessing 된 코드를 Assmbley 언어로 .. 2022. 2. 23.