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 변화
Digital Logic Enhanced Processor(instruction add Branch)-LINUX (0) | 2024.01.01 |
---|---|
Digital Logic Enhanced Processor(instruction add Branch) (0) | 2024.01.01 |
Digital Logic Enhanced Processor (Add Instruction memory load and store)_HEX (1) | 2023.12.27 |
Advanced Veilog-1 (2) | 2023.11.13 |