상세 컨텐츠

본문 제목

PROJECT - 16 bit RISC simple CPU

PROJECT

by 썽심 2024. 1. 4. 11:45

본문

728x90

16 BIT_RISC Processor CPU 설계

11.27~01.05

 

Language(Verilog Ver.2001)

VerilogHDL(Quartus 18.1)

Simulation(Modelsim)

Board(DE1-SoC)

FPGA(ALTERA CycloneV_5CSEMA5F31C6N)

 

 

PPT

 

 

설계목표

RISC 구조에 대해 이해하고, instruction을 설계하여 SW값에 따라 값을 기억하거나 동작, 최종적으로 instruction이 제대로 동작 했다면 FPGAFNDPASSED가 나오고 그렇지 않는다면 FAILED가 나오도록 구현했다.

 

CPU Design

SoC

크게 7가지로 구성된 processor와 memory로 이루어져있는 구조로, address bus와 data bus를 사용하여 Memory에 data가 저장될 수 있게 구현했다.(Memory : 256 * 16 ram)

sw를 통해 input값을 받아 최종적으로 FND led에 HEX값이 출력된다.


ISA(Instruction Set Architecture)

Instruction / imm / rN(rX(XXX) / 9_bit_data 부분으로 이루어 동작될 수 있도록 구현했다.

 

 

Instruction

MV / MVT / ADD / SUB / AND / LD / ST / Brench

총 8가지 instruction을 구성하여 이에 맞게 T0~T5 까지의 FSM 동작이 될 수 있도록 구현했다.

 

State별 Instruction의 작동은 다음과 같다.

T0 ~ T2는 공통적으로 동작한다.

T0: 현재 프로그램 카운터의 값을 꺼내서(Sel PC) → Address에 '다음 클럭에' 넣어준다(ADDRin, ADDR의 enable 신호이기 때문에 문을 열어둔 상태라고 할 수 있다. 그렇기 때문에 다음 클럭에 들어감) → 프로그램 카운터의 값을 1 올려줌(pc_inc, 프로그램 카운터를 올려놓으면 다음 사이클의 T0일때는 1이 올라간 프로그램 카운터 값을 받을 것이다.)

T1: 메모리 동기화 작업을 위해 기다려준다. 실제로 이 동안에 Address로 들어온 값을 보고 해당 메모리 주소에 있는 데이터가 DIN(data in)에 들어간다.

T2: DIN에 들어와있는 데이터를 '다음 클럭'에 IR로 넣어준다(IRin, IR enable 신호이며, 말그대로 enable을 해준 상태기 때문에 다음 클럭에 데이터가 들어간다.)

T3 ~ T5는 IR의 값에 따라 결정된 Operation 별로 각자 다른 작동을 한다.

이 부분에 대한 작동은 뒤에 시뮬레이션에서 자세히 설명하겠다.

모든 작동이 끝날 경우 Done 신호를 주며 FSM에서도 보았지만 Done 신호 발생 시 T0으로 돌아간다.

 

 

 

FSM

Moore Machine으로 구현하여 6가지 동작이 되도록 구현했다.

T0에서 동작을 받을때까지 루프를 돌다

Run이 1이되면 T1>T2>T3, T3에서 done signal 발생시 T0 아니면 T4 > T5

 

RTL_VIEW(Schematic)

 

ENCODE

 

trans

완성시 logic 갯수

 

 

보드동작 결과

1. led값만 확인한 결과이다.

led값만 나오도록 구현하였고, 

SW1, 3, 5, 6 의 값을 SW9번이 on되어 있으므로 memory에 값을 저장하게 된다.

값이 변경되더라도 유지 됨을 검증했다.

 

2. FND를 연결하여 SW 동작 시 FND에 숫자가 나오도록 구현했다.

SW0~2를 통해 FND에 숫자0~5까지 나올 수 있도록 조절 가능

SW 0~2을 조정해 숫자를 나타낸 후 SW9번을 ON 하면 메모리에 값을 저장.

SW9를 OFF한 뒤 SW0~2를 조정 하더라도 값을 유지 KEY0을 통해 값을 CLEAR로 동작검증 완료.

 

 

3. 최종적으로 모든 instruction이 실행됐음을 검증하였고, 설계된 모든 instruction이 제대로 동작되면

PASSED가 나오도록 구현했다. 동작 검증결과 SW9를 ON 했을 때 PASSED가 제대로 나옴을 검증했다. 

 

 

 


+++추가

linux ubuntu_sb assembler를 사용해 assember mif 파일생성, 적용

 

 

 

simulation 결과

동일하게 passed 나오는것 확인

 

 

728x90

'PROJECT' 카테고리의 다른 글

PROJECT - UART protocol을 이용한 구현  (0) 2024.04.10

관련글 더보기