자작 PC 입문 ①~명령집 결정편~

무엇 때문에


컴퓨터 구조, 디지털 회로, 아날로그 회로 등 지식을 깊이 있게 하기 위해'자작'컴퓨터.
그러나'자작'이라는 단어는 애매하기 때문에 이 단어를 엄밀하게 정의하지 않으면 어디든지 횡단할 수 있다.
예를 들어 실리콘 주물을 잘라내는 것부터'자작'이라고 할 수 있고, 골목길에서 말하는 자제 PC처럼 기존 부품만 조립하면'자작'이라고 할 수 있다.
HDL로 CPU의 회로를 기술해 FPGA에서 이동하는 것도'자작'이라고 할 수 있다.
이 항목은'자작'의 정의를 명확히 하기 위해 다음과 같은 규칙을 미리 설정하였다.
  • 컴퓨터의 각 요소가 물리적으로(손으로 만지는 실체로서) 자체 제작
  • 자체 CPU 제작에 사용되는 부품은 다음과 같습니다.
  • 범용 논리 IC(74 시리즈, 4000 시리즈 등)
  • 스토리지 IC(SRAM, EEPROM 등)
  • 저항, 콘덴서, 이극관, 트랜지스터 등 회로소자
  • CPU의 논리 회로는 모두 유선 논리
  • 를 사용합니다.
  • 스스로 인쇄 기판을 설계하여 공장에 주문할 수 있음
  • 부품의 규격으로 인해 컴퓨터 설계의 제약을 받지 않도록 상술한 소립도로 자작하기로 결정하였다.
    이런 입도로 컴퓨터를 만드는 것은 반세기 동안 반도체의 집적도가 높아지면서 더 이상 일반적인 것이 아니라 부품의 입수 등 어려움이 수반되었다.
    따라서 위와 같은 정의에 큰 편차가 없는 범위에서는 예외적으로 부품이 사용됩니다.
    유선논리란 명령 디코더와 연산기 구현에 마이크로프로그램이나 찾기표 등을 사용하지 않고 물리적 논리 회로로만 진행한다는 지침이다.
    이 방침은 논리적 설계와 물리적 설계가 모두 어렵지만 논리적 회로를 배우는 목적에 있어서 유익하다.
    인쇄 회로판을 이용하는 것은 통용 회로판에 선을 놓는 것은 그다지 본질적이지 않고 힘든 작업을 피하기 위해서이다.
    FPGA 등을 사용하지 않고 물리적으로 직접 CPU를 만든다는 방침은 FPGA 방법을 사용해 대학 실험 수업에 널리 활용되고 있다는 점에서 재미가 없다고 생각한다.
    프로그래밍은 취미 면에서는 흥미롭지만, 성과물을 직접 손으로 만지기 어렵다는 점에서 수공예 등보다는 못하다.

    작업 계획


    아래와 같이 작업을 진행할 계획이지만 전후가 있을 수 있습니다.

  • CPU 생성
  • 구조의 확정
  • VHDL 기반 CPU의 논리적 설계
  • 논리 회로의 시뮬레이션
  • CPU의 물리적 설계
  • CPU 기판 주문
  • 부품의 설치(용접)
  • CPU 테스트
  • C 컴파일러의 설치
  • 주변 장치 생성
  • CPU 아키텍처 결정


    RISC 또는 CISC


    RISC는 질의응답 없이 사용할 수 있습니다.
    이번에 하드웨어를 만드는 데 소모되는 노동력이 놀랄 정도로 크기 때문에 하드웨어는 간단한 기능에만 의존하고 이를 조합하여 복잡한 기능을 실현하려는 노력은 소프트웨어에 위탁되었다.

    구조 개요


    구조 개요는 다음과 같다.
  • 참조 MIPS
  • 노르망형, 비관선
  • 일반 레지스터의 폭은 16비트
  • 모든 명령의 고정 길이 32비트
  • MIPS를 참고하면 대학의 컴퓨터 구조 수업에서도 MIPS를 사용하는 경우가 있지만, 공통화된 명령 형태, 프로세서가 갖춰야 할 최소한의 기능과 다른 기능을 분리하는 사상이 회로의 단순화에 유리하다고 생각한다.
    대학 수업에서 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 명령 집합과 대응하는 기계 언어 코드의 개요를 결정했다.
    다음에 우리는 이번 명령을 실현하는 구체적인 구조, 마이크로 구조를 설계할 것이다.

    좋은 웹페이지 즐겨찾기