앞의 글을 읽으시면 이해에 도움이 됩니다.
2022.09.24 - [Computer Science/컴퓨터 구조] - [컴퓨터 구조] Assembly Language (컴퓨터의 언어 - 어셈블리어)
1. 글을 쓰기에 앞서
RISC-V는 두 가지 버전이 있습니다. 하나는 simplified version, 다른 하나는 pipelined version입니다.
우선 simplified version을 먼저 보고, 추후에 파이프라인 버전도 보도록 하겠습니다.
추가적으로 구현은 ISA의 subset인 lw, sw, add, sub, and, or, beq을 고려했습니다.
모든 명령어를 실행하기 전에 아래의 두 가지 step이 공통적으로 수행됩니다.
- PC를 메모리에 보낸 후, instruction을 반입한다.
- 하나, 혹은 둘의 레지스터를 읽는다.
두 개의 step이 수행된 이후에 instruction에 따라 명령이 수행됩니다.
2. Simplified version의 모습
어떤 명령어를 실행하는 순서는 아래와 같습니다.
(이때, 간단함을 위하여 memory를 instruction memory와 data memory로 나누어서 생각합니다)
- PC에서 Instuction memory를 참조하여 명령어를 가져온다.
- register를 읽은 후에 ALU 명령어를 실행한다.
- 만약 Data memory를 참조해야 하는 일이 생긴다면 참조한다. (lw, sw)
- add, sub 같이 register에 값을 쓰는 명령어라면 Register에 값을 입력한다.
- 1번 순서와 동시에 PC의 업데이트가 일어나는데, 만약에 명령어가 beq라면 PC+4가 아닌 다른 방식으로 업데이트가 된다.
말로 설명하니까 좀 어렵네요.
add x5, x6, x7을 예시로 보겠습니다.
3. add x5, x6, x7
- 명령어 반입 (add x5, x6, x7)
- 레지스터 접근 (read x6, x7)
- 덧셈 (x6 + x7)
- 레지스터 값 입력 (write x5)
물론 해당 명령어는 PC를 바꾸지 않기 때문에 PC는 +4가 더해집니다.
또한 Data Memory에 접근할 필요가 없기 때문에 ALU의 결과 값이 바로 Register에 입력됩니다.
만약 lw x5, 40(x6)이라면 어떻게 될까요?
4. lw x5, 40(x6)
- 명령어 반입 (lw x5, 40(x6))
- 레지스터 접근 (read x6)
- 덧셈 (x6 + 40)
- 메모리를 읽음 (read memory[x6 + 40])
- 레지스터 값 입력 (write x5)
이때도 PC는 4가 더해집니다.
다만 이번에는 Memory에 접근해서 값을 뽑아옵니다.
5. Multiplexer, Control
ALU의 값이 곧바로 register에 입력되는 경우도 있고, Data Memory를 참조하는 경우도 있습니다.
어느 신호가 어디로 갈지 어떻게 결정할까요?
Multiplexer가 신호가 어느 방향으로 갈지 정해줍니다.
Multiplexer은 Control의 신호를 받아서 방향을 정합니다.
따라서 이 두 개가 추가된 회로는 다음과 같습니다.
복잡하죠?
따라서 Processor는 Datapath와 Control으로 이루어져 있습니다.
자세한 설명은 뒤에서 차차 하도록하고, 지금은 회로의 대략적인 부분만 기억합시다.
다음 글에서는 Clocking Method를 설명하고, 구체적인 DataPath 구현을 위한 세부적인 사항에 대해 설명하겠습니다.
감사합니다.
지적 환영합니다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] Hazard (0) | 2022.11.10 |
---|---|
[컴퓨터 구조] Pipelining (0) | 2022.11.10 |
[컴퓨터 구조] Measuring Performance (성능 측정) (0) | 2022.10.23 |
[컴퓨터 구조] Division (0) | 2022.10.23 |
[컴퓨터 구조] Floating Point (2) | 2022.10.22 |