본문 바로가기
시스템 반도체/컴퓨터 구조 (RISC-V)

설계한 RISC-V CPU에서 연산자를 추가하는 접근법

by 전컴반 2022. 7. 1.
반응형

1.

먼저 eclipse에서 code의 Dump file을 확인한다.

하면 아래와 같은 코드들로 이루어져 있다.

32bit라 가정하면, Hex를 2진수로 분해한다. 

 

58: 3ff7c793           xori a5,a5,1023

80: fee7f4e3           bgeu a5,a4,68 <???+0x58>

 

예를 들어 xori를 분해하면,

 

3ff7c793 == 0011_1111_1111_0111_1100_0111_1001_0011로 볼 수 있다.

 

 

2.

그러면 이게 어느 type인지 확인한다.

 

가령 xori는 i가 붙어있기 때문에 I-Type이라 유추할 수 있고,

bgeu는 b로 시작하게 때문에 B-Type이라 유추할 수 있다.

 

맞는 포맷을 찾아본다. 

 

 

3. 

CPU는 opcode와 funct3, 7 통해 어떤 동작을 할지 정하니까 instruction을 분해한다.

control_unit과 레지스터와 imm로 분해해서 집어넣는다. extension도 해야 되고 type에 따라 control signal도 지정해줘야 한다.

 

 

4.

다음으로는 Verliog의 파일에 따라 동작을 수행하는데 instruction에 맞게 동작하는지 본다. 

 

xori를 기준으로 보면, 먼저 I-type일 때 어떤 동작을 할지 적어준다. addi, andi와 같이 여러 동작이 있기 때문에 case문에 집어 지정해준다.

어떤 동작인지 알기 위해선 funct3와 funct7으로 구분하는데 I type에서는 funct3만 존재한다. 그래서 위에서 분해해 놓은 funct3일 때 ALUcontrol 신호를 어떻게 할지 정한다. 이건 정해놓은 포맷을 따른다. xori 같은 경우에는 ALUcontrol 신호가 "00011"이다. 

 

 

5.

ALUcontrol 신호를 받았으니 이 신호를 ALU에 넘겨주면 ALU는 "아 이게 xori 연산하라는 거구나" 안다.

그래서 ALUsrc1과 ALUsrc2를 xori연산을 진행한다. 결과를 가지고 메모리에 접근할지 말지는 명령어에 따라 달라진다.

 

 

5-1.

이때 ALUcontrol신호는 5bit인데 MSB ( 부호 bit )를 확인해서 동작을 바꿔줘야 될 수도 있다.

 

 

반응형

댓글