32bit RISC R-Type 을 베릴로그를 통해 설계하고 테스트벤치를 통해 확인해보겠습니다
Readme
Synthesis된 하드웨어의 모습을 보기 위해 Quartus로 설계하였습니다. RISC 문서를 통해 자세히 설계해야하지만, 인터페이스만을 통해 설계하기에 Imm Gen, Control unit, Mux 1개를 제외하고 설계하였습니다. R type 동작 및 테스트를 목표로 두었으며 나중에 제외한 모듈을 추가할 수 있도록 설계했습니다. RISC-V 에서는 Pipeline을 사용합니다. Fetch, Decode, Execute,Writeback 등으로 단계를 나누므로 General한 디자인을 위해 Instruction Fetch 와 Datapath로 나누어 instance를 생성했습니다.
RISC R format은 32bit 정보를 아래와 같이 나눕니다.
RISC - R type
func7 [31 :25] | rs1 [24 : 20] | rs2 [19 : 15] | func3 [14 : 12] | rd [11 : 7] | OPcode [6 : 0] |
OPcode를 해독한후 func3, func7을 통해 ALU의 기능을 선택합니다.
rs1 = source 1
rs2 = source 2
rd = destination
Instuction Fetch
Program counter로 부터 Instruction_memory의 주소값을 받습니다. Instruction Memory는 주소값을 통해 내부에 들어있는 데이터를 출력합니다.
Simulation을 통해 PC +4 를 통해 Instruction Out 출력이 정상적으로 나오는 것을 확인하였습니다.
다음으로 합성된 모습을 살펴보겠습니다.
Instruction memory는 Quartus에서 제공하는 register와 mux로 구성되어있는 것을 알 수 있습니다.
ADDER, Mux, PC+4, Instruction Memory로 구성된 것을 알 수 있으며, Positive clock에 값을 업데이트하기 위해 Register를 사용하였습니다. PC +4는 Combinational logic과 Sequential logic이 함께 구성된것을 알 수 있습니다.
다음장에서 Datapath를 살펴보도록 하겠습니다.
'Verilog' 카테고리의 다른 글
RISC ( # R- Type #Timing # Power # Verilog ) (0) | 2024.08.20 |
---|---|
RISC ( # R- Type # Datapath # Verilog ) (0) | 2024.08.20 |
ECC ( Error colection code ) (2) (0) | 2024.07.04 |
ECC ( Error colection code ) (0) | 2024.07.04 |
Parity bit (0) | 2024.07.04 |