자작 PC 입문 ①~명령집 결정편~
무엇 때문에
컴퓨터 구조, 디지털 회로, 아날로그 회로 등 지식을 깊이 있게 하기 위해'자작'컴퓨터.
그러나'자작'이라는 단어는 애매하기 때문에 이 단어를 엄밀하게 정의하지 않으면 어디든지 횡단할 수 있다.
예를 들어 실리콘 주물을 잘라내는 것부터'자작'이라고 할 수 있고, 골목길에서 말하는 자제 PC처럼 기존 부품만 조립하면'자작'이라고 할 수 있다.
HDL로 CPU의 회로를 기술해 FPGA에서 이동하는 것도'자작'이라고 할 수 있다.
이 항목은'자작'의 정의를 명확히 하기 위해 다음과 같은 규칙을 미리 설정하였다.
이런 입도로 컴퓨터를 만드는 것은 반세기 동안 반도체의 집적도가 높아지면서 더 이상 일반적인 것이 아니라 부품의 입수 등 어려움이 수반되었다.
따라서 위와 같은 정의에 큰 편차가 없는 범위에서는 예외적으로 부품이 사용됩니다.
유선논리란 명령 디코더와 연산기 구현에 마이크로프로그램이나 찾기표 등을 사용하지 않고 물리적 논리 회로로만 진행한다는 지침이다.
이 방침은 논리적 설계와 물리적 설계가 모두 어렵지만 논리적 회로를 배우는 목적에 있어서 유익하다.
인쇄 회로판을 이용하는 것은 통용 회로판에 선을 놓는 것은 그다지 본질적이지 않고 힘든 작업을 피하기 위해서이다.
FPGA 등을 사용하지 않고 물리적으로 직접 CPU를 만든다는 방침은 FPGA 방법을 사용해 대학 실험 수업에 널리 활용되고 있다는 점에서 재미가 없다고 생각한다.
프로그래밍은 취미 면에서는 흥미롭지만, 성과물을 직접 손으로 만지기 어렵다는 점에서 수공예 등보다는 못하다.
작업 계획
아래와 같이 작업을 진행할 계획이지만 전후가 있을 수 있습니다.
CPU 생성
CPU 아키텍처 결정
RISC 또는 CISC
RISC는 질의응답 없이 사용할 수 있습니다.
이번에 하드웨어를 만드는 데 소모되는 노동력이 놀랄 정도로 크기 때문에 하드웨어는 간단한 기능에만 의존하고 이를 조합하여 복잡한 기능을 실현하려는 노력은 소프트웨어에 위탁되었다.
구조 개요
구조 개요는 다음과 같다.
대학 수업에서 MIPS는 하버드 구조로 설명하는데, 이번에는 앞으로 복잡한 프로그램을 시작해 테스트를 해야 한다는 점을 고려해 노이만형을 채택했다.
또 이번에 RISC를 채택한 목적은 결국 회로의 단순화일 뿐 속도에 특별히 얽매일 필요가 없기 때문에 파이프화를 하지 않는다는 것이다.
유니버설 레지스터의 폭을 16자리로 설정한 것은 설치가 크지 않고 색인 레지스터 등을 준비하지 않아도 64k자의 메모리 영역을 직접 참조할 수 있기 때문이다.
명령 길이에 관해서는 명령 디코더를 간단하게 하기 위해 고정 길이로 하고 명령을 처리할 수 있는 시간값을 고려하여 레지스터 길이의 2배인 32비트로 한다.
명령 집합
CPU가 갖춰야 할 최소한의 기능으로서 연산, 메모리의 불러오기/저장, 점프, 중단 명령을 설정한다.
다음 명령 세트는 MIPS 등을 참조하여 결정됩니다.
서식
조작하다
플래그 설정
XOR rd rs rt
R3
rd ← rs XOR rt
zero
XNOR rd rs rt
R3
rd ← rs XNOR rt
zero
NOR rd rs rt
R3
rd ← rs NOR rt
zero
NAND rd rs rt
R3
rd ← rs NAND rt
zero
OR rd rs rt
R3
rd ← rs OR rt
zero
AND rd rs rt
R3
rd ← rs AND rt
zero
ADD rd rs rt
R3
rd ← rs + rt
zero,sign,carry
SUB rd rs rt
R3
rd ← rs - rt
zero,sign,carry
SLA rd rs rt
R3
rd ← rs << rt
zero,sign,carry
SRL rd rs rt
R3
rd ← rs >>[^1] rt
zero
SRA rd rs rt
R3
rd ← rs >>[^2] rt
zero,sign,carry
XORI rd rs imm
R2I
rd ← rs XOR imm
zero
XNORI rd rs imm
R2I
rd ← rs XNOR imm
zero
NORI rd rs imm
R2I
rd ← rs NOR imm
zero
NANDI rd rs imm
R2I
rd ← rs NAND imm
zero
ORI rd rs imm
R2I
rd ← rs OR imm
zero
ANDI rd rs imm
R2I
rd ← rs AND imm
zero
ADDI rd rs imm
R2I
rd ← rs + imm
zero,sign,carry
SUBI rd rs imm
R2I
rd ← rs - imm
zero,sign,carry
SLAI rd rs imm
R2I
rd ← rs << imm
zero,sign,carry
SRLI rd rs imm
R2I
rd← rs>imm (논리적 오프셋)
zero
SRAI rd rs imm
R2I
rd← rs>imm (산술 이동)
zero,sign,carry
서식
조작하다
LD rd rs imm
R2I
rd ← [rs + imm]
ST rd rs imm
R2I
[rs + imm] ← rd
서식
조작하다
JP rs imm
RI
PC ← rs + imm
BZ rs imm
RI
PC ← rs + imm if zero = 1
BS rs imm
RI
PC ← rs + imm if sign = 1
BC rs imm
RI
PC ← rs + imm if carry = 1
서식
조작하다
IRET
N
운영 중단 복구
(인터럽트 신호)
-
인터럽트 주소로 이동
또한 여기 rd,rs,rt는 유니버설 레지스터,imm는 즉각값,PC는 프로그램 계수기를 표시합니다.
또한 MIPS를 본떠서 0호 유니버설 레지스터는 0 레지스터이고 다른 유니버설 레지스터 중 1개는 입력과 출력 레지스터로 한다.
기계 언어 코드의 개요
CPU는 명령을 이해하기 위해 명령에 대응하는 기계 언어 코드를 설정해야 한다.
여기에 대략적인 명령 코드는 다음과 같이 결정된다.
비록 약간의 불규칙하고 낭비가 있지만, 우리는 이미 명령 디코더를 설정한 디자인이 간단해졌다.
우선 앞의 세 분을 보면 명령의 형식을 쉽게 판별할 수 있다.
명령에서rs,rt,rd로 표시된 일반 레지스터는 3자리로 지정되며 이 정보는 모든 명령 형식으로 공통된 위치에 저장됩니다.
rs, rt, rd의 부분은 3자리이기 때문에 지정할 수 있는 레지스터는 8개로 제한되고 그 중 2개는 0 레지스터와 입력 출력이기 때문에 유니버설 레지스터는 6개이다.
ALU가 연산 명령 등에서 연산하도록 지정하는 것은 그림에서 ALU 부분으로 쓰인 6자리이다.
JUMP 명령의 조건은 그림에 condition이 적힌 부분으로 4자리를 지정하면 무조건 점프와 조건 점프(zero,sign,carry)를 간단하게 처리할 수 있다.
즉 값은 명령의 하위 16 비트에 저장됩니다.
그림의 공백은 같은 형식의 명령을 구별하는 데 적절하게 사용할 수 있다.
총결산
이번에는 자체 제작한 PC의 CPU 명령 집합과 대응하는 기계 언어 코드의 개요를 결정했다.
다음에 우리는 이번 명령을 실현하는 구체적인 구조, 마이크로 구조를 설계할 것이다.
Reference
이 문제에 관하여(자작 PC 입문 ①~명령집 결정편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/io-sink/items/1dcef9c4aa6d9c0e2e64
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(자작 PC 입문 ①~명령집 결정편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/io-sink/items/1dcef9c4aa6d9c0e2e64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)