상세 컨텐츠

본문 제목

Digital Logic Enhanced Processor (Add Instruction memory load and store)

설계공부/Advance Verliog

by 썽심 2023. 12. 23. 04:19

본문

728x90

16 BIT_RISC Processor CPU 설계

11.27~01.05

 

12.23

 

 

2_Port로 진행된 ROM 설계를 가지고 

PC가 추가 된 형태의 Processor를 구현했다.

 

또한 연산 기능을 확장하여,

ld일때 LOAD 메모리 값을 레지스터에 전송하고,

st일때  Store 레지스터 값을 메모리에 전송될 수 있도록 만들었다.

 

​ D_FF와 같은구조.

기능 : SW 값을 지속적으로 LED에 갱신

 

실질적으로 구동시,

레지스터 r3, r4에 각각 LED, SW 주소를 저장

레지스터 r0에 r4를 주소로 하는 값(SW_0~8)을 전송(MAIN)

레지스터 r3를 주소로 하는 값( SW_0~8 )에 레지스터 r0를 전송

프로그램 카운터를 메인으로 설정해준다.

 

 

 

구현하며 얻은 이점은 특정한 위치의 프로그램 실행 가능하다는 점이었다.

 

 

BLOCK_DIAGRAM

 

 

메모리 매핑부분

 

enable_processor

 

 

inst_mem_mif

proc

 

proc_FSM

 

proc_CON

 

proc_bus

 

F_F

 

Inst_mem

 

RTL_VIEW

 

 

SIMULATION

 

 

SIMULATION해석

T0~T5가 따라 상태가 변하며, Enable값에 따라서 data를 받는다.

 

 

T0일 때

inst_mem  : 0000_0000_0000_0000

Sel에 sel_pc를 집어 넣음

sel_pc는 PC값 따라서 0000 data를 갖고 있다가

address_en 신호가 on 되면 1CLK뒤 address에 값을 할당.

address값을 할당 받으니, address에 맞게 inst_mem값도 할당된다.

 

0000 이니 0에 맞게 3610값을 inst_mem 에 불러옴

DIN도 같이 받음

 

 

또한 pc_inc 값에 RUN을 할당 그럼 FSM 계속 진행됨.

 

 

 

T0상태 , if문을 줘서

FSM이 계속 동작되도록함.

 

 

상태는 T1으로 넘어간다.

 

 

T1이 되면 PC값은 +1 된다.

또한 1CLK 기다린다. (쓰레기값을 정리될 때 까지 기다리기 위해)

 

그다음 T2 

IR_EN 값이 1로  ON된다.

 그러면 DATA 받을 준비를 하고 다음 STATE때 IR 값이 바뀌게 된다.

받는 값은 DIN 값.

3610을  받음

 

 

T3

상태가 많은데 어떤걸 봐야하나? DATA계산을 해보자.

 

T3이 되자, IR값이 3610을 받고

III가 1이 되고 XREG는 000010000이 된다.

 

 

3610 >>HEX

0011 / 0110 / 0001 / 0000

III / M / XXX / DDDDDDDDD

001 / 1 / 011 / 0000100000

 

 

III가 001이니 상태는 mv

M은 1이니 data 전부 가져옴

Rx에 data 8bit만 할당

 

 

다시 T3 STATE로 돌아가서 

mv 상태 확인 

 

1이니 sel에 sel_D값

0*7 / IR 9BIT(000100000)

 

LSB / MSB

0000_000_00000_1000

 

0001_0000_000_0000

 

RIN값은 xreg 

rx 3bit >> Xreg는 8bit으로 decoder 해준값

00010000

 

R_EN이 들어왔으니,  R값에 들어갈 DATA 선택 후 대기중인상태

어떤 R에 들어가느냐, 

011 > 3

Rn  = R3

R3

 

다음신호인

R3의 주소에 0001000000000000 값을 넣음

 

신호가 끝났으니 done로 종료 

done이면 fsm은 0이 된다.

 

다시T0부터 시작

대기중인  0001000000000000 값이

R3에 입력됨

 

PC주소에 값 할당 대기

ADDRES 주소에 값 할당대기

 

T1 PC1CLK대기

ADDRESS PC값넣기

PC +1

 

ADDRESSRK 1니까 

DIN에 1에 해당되는 값 할당

 

3830 >> HEX

0011 / 1000 / 0011 / 0000

III / M / XXX / DDDDDDDDD

001 / 1 / 100 / 0001100000

 

 

 

 

T2 

DIN 주소에 00111000001100000 할당 완료

 

IR_EN =1

IR주소에 넣을 DATA 대기 

 

T3

IR주소에 DATA 넣고

 

STATE 해석

0011 / 1000 / 0011 / 0000

III / M / XXX / DDDDDDDDD

001 / 1 / 100 / 0001100000

 

 

mvt State확인

 

 

sel주소에 sel_D8 넣을예정

sel_D8

0011100000000000

 

 

 

R_EN = Xreg 

R = 4

 

R4의 주소값에 xreg넣을예정

xreg는

0011100000000000

 

마무리로 DONE.

 

 

다시 FSM = 0

 

R4의 주소에 0011100000000000

할당완료

 

 

 

///

W_EN으로

W값 할당 받고

LEDR 주소에 값이 할당예정

따라서 다음 STATE인 0일때 

10000000 인 값이 인가

LEDR이 켜짐

 

 

*DEBUG 이전 LOGIC_LE

 

보드검증시 SW값에 따라서 보드 LED가 안나옴,

 

#

내부 프로세서 정의하는 부분에서

Default가 선언 되어있어서 D_IN 선언을 안했지만,

SEL를 추가적으로 주어야 한다.

#

 

 

 

수정이후 LOGIC

RTL은 동일하나, LOGIC이 줄었음.

 

보드 동작

SW_0, 5, 8 (ON) >> SW9 (ON) >> LED_ON >> SW_9(OFF) >> SW 변화 (LED 기존과 똑같이 동작)

>> SW_9(ON) >> SW(0~8)값에 따른 LED 변화

 

728x90

관련글 더보기