맘스터치보단파파이스 2024. 5. 31. 15:22

R- TYPE CONTROL UNIT ->  DATA PATH 보내는 시그널이 다 똑같다. RS1, RS2 ,RD만 변화하기 때문.

OPCODE 해당 명령어에 대해 기능을 구분.

 

TYPE : 같은 명령어 끼리 묶어 놓은 것.

RISC CPU의 특징. 비슷한 명령어 끼리 묶여져 있다.

CISC는 그당시에 동작만 하게 하자라서 마구잡이로 명령어가 되어 있다.

레지스터를 연산해서 다시 레지스터에 넣는다.

그래서 신호가 레지스터 관련된 신호를 넣어주기만 하면 동작한다.

ADD : CONTROL UNIT을 통해 기능제어. RFWDSrcMuxSel

 

LOAD : 메모리에 있는걸 가져오겠다. ALU를 통해 더한값을 주소로 넣는다.

왜 더하는지는 모른다. 설계한 사람이 이렇게 만들었다.

RISC-V 구조가 ALU로 더해서 주소로 RAM에 넣어주는 구조로 되어있다.

Instruction Set Architecture를 우리가 구현중.

그래서 LOAD를 하기 위해서 AluSrcMuxSel을 통해 MUX 1이 나온다. R-type는 ALU에서 나온값이 되돌아갔지만 IL-type는 RAM에서 나온 값이 들어가기 때문에 두 값이 충돌난다. MUX 추가.

레지스터에 써야하기 때문에 WE =1 되어야 CLK이 와서 Write.

 

`inlcude "define.sv" 로 define 해준애들을 따로 파일로 뺐다.

IL 부분의 Descript은 모두 더하기값이라서 3b'000으로 바꿔줬다.

DATA PATH를 보고 MUX, ALU 동작하는것을 OPCODE로 지정.

S설계를 하려하는데 imm이 나눠져있다. 어떻게 코드를 짤 것인가.

Imm이 분리되어 있는 점이 다르다.

p.24

이렇게 만들어야한다.

imm 값이 하나라서 CASE

type 정보를 Extend로 넣어줄 것이다.

그에따라 Case문을 통해 imm 출력을 다르게 한다.

3bit의 type 정보가 필요하다.

extend type.

Reg 5번을 4+ X0 주소에 넣겠다. RAM 위치에는 1에 들어간다.

4(X0) --> 1 위치.

Type S 부분에서 1 1 0 0 이라고 되어있었다. 

맨앞이 regFileWe 이라서 0으로 해준다.

 

자꾸 값이 X5에 제대로 들어가지 않는 현상.

변환 사이트 오류.

 

이제 Branch 를 추가한다. 

PC 에 IMM 을 +하려고한다.

PC 값에 새로운 input이 필요하다.

 

ADDER VS MUX

MUX 연산이 더 회로적으로 간단. 저렴

 

MUX 위에 AND 추가 CONTROL UNIT & ALU 로 MUX_SEL을 넣어준다.

ALU의 결과값을 아는것이 중요하다.

 

참이면 실행. 거짓이면 실행X. --> if문처럼 사용.

BRANCH를  사용하기위해서 0 or 1 이 출력되는 MUX 사용.

LUI를 하자.

RFSrcMuxSel --> U 할 때만 1

UI : U와 extType는 같고 RFWDSrcMuxSel 을 다르게 하려고 01/ 10 으로 분리해서 쓴다.