맘스터치보단파파이스 2024. 6. 3. 19:40

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 만든다.

RV32I

RAM에 들어오는 Addr이 이것이 맞는가.==> 2**8 --> 8

 

<<GPO>> output

구조에 대한 감이 없어서 STM32 RM 을 보고 파악한다. 

rm p.145
rm p.163
rm p.159

내가 만든 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