240603_RISC-V GPO
JAR "OR"연결 아이디어.
Adder 한개 제거.
구간에 Register를 넣으면 pipeline이 된다.
Fetch, Decode, Excute 자주.
Single Cycle Core
장점 : 회로가 단순해진다.
단점 : 반응이느리다. 연산 속도가 느리다. --> 모든 명령어가 한 CLK에 동시에 처리되어야한다.
구매하는 사람 입장에서 : 회로가 복잡한지 간단한지는 중요하지 않다. CPU가 성능이 좋은지 나쁜지만 본다.
CLK속도가 느려진다. Fetch --> WriteBack 까지 한 CLK이다.
operation , excute 등등 과정을 다 처리를 하는데 오래 걸리는데 CLK 하나에 처리되기 때문에 오래걸린다.
지나가는 시간 : Propagation delay.
이 딜레이가 굉장히 길어진다. CLK > MAX propagation Delay 이여야 동작하기 때문에 CLK는 그에따라 증가.
그래서 노란색으로 구간을 나눴다. 각각을 register 이라고 생각한다면 CLK가 들어왔을 때 한 CLK마다 구간을 넘어간다. register에 차근차근 들어오게 된다.
전원이 들어가면 Fetch부터 시작한다. 명령어가 한 CLK마다 진행되게 된다.
6배 빠르게 할 수 있다. pipeline을 나눠서 1CLK에 명령어가 빠르게 진행된다. --> 단점) hazard 발생
<BUS>
지금까지 한거. RISC-V , ROM, RAM 그리고 서로가 연결되어있다.
앞으로 할 inertconnector BUS를 연동해서 만든다.
BUS 통신. Memory Mapped I/O. ==> Memory Mapping 설계. 이 내용을 알아야 SOC가 가능해진다.
Store 기능을 통해 RAM , GPO, GPI 에 쓴다.
LW 기능으로 읽는다.
읽고/ 쓴다 : RegFile 기준으로 상대편에 가서 Write : Store RegFIle 에 쓴다 : READ
peripheral 에 Write하면 동작한다.
DMA 기능이 있어야 Burst 기능이 된다.
memory 숫자대로 mapping
앞에꺼만 대해서 생각한다. 앞의 6자리 address만 확인하는 decoder 만든다.
RAM에 들어오는 Addr이 이것이 맞는가.==> 2**8 --> 8
<<GPO>> output
구조에 대한 감이 없어서 STM32 RM 을 보고 파악한다.
내가 만든 CPU도 register map이 필요하다. Output Data Register <ODR>
다 채울필요는 없고 0~3, 4~7, 8~15, 16~23, 24~31
0, 1, 2, 3 만 사용한다. 4개의 PORT만 사용할 것이다. ==> 이런 Memory를 둬야하고 출력또한 있어야 한다.
<< 새 사이트 추가>>
add sp, x0, x0
li a5,4096
addi a5,a5,256
add sp, sp, a5
0x0002100 이라는 주소에 0x01 넣을것이다.
우리는 GPO 인 0x0002000 으로.
그냥 사용하진 못한다. 스택 포인터가 필요하다.
RAM의 끝 주소는 0x 0000 10ff
add sp, x0, x0
li a5,4096
addi a5,a5,256
add sp, sp, a5
/* Type your code here, or load an example. */
void delay(int t);
int main() {
while(1){
*(int *) ( 0x0002000) = 0x0f;
delay(10);
*(int *) ( 0x0002000) = 0x00;
delay(10);
}
return 0;
}
void delay(int t)
{
int temp = 0;
while (t>0){
for (int i = 0; i <100000000; i++) temp++;
t--;
}
}
add sp, x0, x0
li a5,4096
addi a5,a5,256
add sp, sp, a5
main:
addi sp,sp,-16
sw ra,12(sp)
sw s0,8(sp)
addi s0,sp,16
.L2:
li a5,8192
li a4,15
sw a4,0(a5)
li a0,10
call delay
li a5,8192
sw zero,0(a5)
li a0,10
call delay
j .L2
delay:
addi sp,sp,-48
sw s0,44(sp)
addi s0,sp,48
sw a0,-36(s0)
sw zero,-20(s0)
j .L4
.L7:
sw zero,-24(s0)
j .L5
.L6:
lw a5,-20(s0)
addi a5,a5,1
sw a5,-20(s0)
lw a5,-24(s0)
addi a5,a5,1
sw a5,-24(s0)
.L5:
lw a4,-24(s0)
li a5,99999744
addi a5,a5,255
ble a4,a5,.L6
lw a5,-36(s0)
addi a5,a5,-1
sw a5,-36(s0)
.L4:
lw a5,-36(s0)
bgtz a5,.L7
nop
lw s0,44(sp)
addi sp,sp,48
jr ra