'2014/12'에 해당되는 글 2건

  1. 2014.12.21 pisc 분석
  2. 2014.12.17 PISC 마이크로 프로세서
2014.12.21 23:38

pisc 분석

당분간 이 프로세서 분석은 알파와 베타 중간 상태다. 

현재 버전 0.0 (2014.12.21)




pisc 분석

이 프로세서는 참으로 특별하다.
너무 간단하게 만들다보니 동작도 이상하고 결함도 많다.
자세한 내요은 번역부분을 읽어라.

명령어는 매번 클럭시마다 사용된다.
매 클럭마다 한번은 fetch라는 명령어가 사용되고 한번은 execute가 시행된다.

원본에는 이렇게 나온다.
a) 레지스터중 하나가 어드레스 버스로 나가고 ALU 의 A 입력이 된다;
b1) 다른 레지스터는 데이터버스로 출력하고 ALU의 B 입력이 되거나; 또는
b2) 메모리로ㅜ터의 데이터가 다른 레지스터의 입력이 된다;
c) ALU의 출력이 A (그리고 아마도 B)에 적용되고 데이터는 첫 번째(address)레지스터에 저장된다,

a) one register is output to the Address bus and the ALU's A input;
b1) another register may be output to the Data bus and the ALU's B input; or
b2) data from memory may be input to another register;
c) an ALU function is applied to A (and perhaps B) and the result is stored in the first (address) register.


 

조건은 다음과 같다.

인스트럭션 레지스터는 외부에 따로 존재하는 것으로 회로도 page2에 74298을 이용하여 구현했다. (Quad 2-line to 1-line multiplexers with storage)

클럭의 하강 에지에 A 또는 B 선택을 한다.

일단 클럭의 상승에지에 clock의 반전입력이 들어가므로 클럭의 상승에지에 D 버스를 캡처하거나 미리 정해진 하드와이어드 코드를 캡처해서 출력한다.

미리 정해진 값은 10 111 111 1 111 00000이다.

그 값은 다음과 같다.
 
사진 참조


이 값의 의미는 다음과 같다.

메모리를 읽어서 r7에 저장하고 데이터라인에도 r7을 내보낸다. D line에는 메모리를 읽은 값이 들어간다. 결국 R7에 쓴다. CY=11로 0이 선택된다. 이 값은 래치된다.

이런 목적으로 74172 dual port ram이 사용되었다, 74182는 2비트 램이다.

74181은 00000이 선택되면 동작은 캐리가 0 인 경우 a+1이 일어난다. a 입력은 A 버스에 연결되어 있다, 결과는 종종 어드레스값에 1을 더하게 된다.


mrd는 rec로 바로 연결된다. 기묘하지만 메모리를 읽지 않는 상태가 듀얼포트를 읽는 것이고 mrd가 High인 경우는 clock의 반전 입력과 nand를 거처 mrd\ 가 된다..
(mwr도 같은 방법) 이것이 IR 이라는 게 신기할 다름이다.

wec\는 mrd와 fetch\의 nand다. 그러니까 메모리는 읽는 상태이고 fetch가 아닌 exec 상태이다. 메모리를 읽지 않으면 쓰여지지 않는거다.

  


저작자 표시
신고
Trackback 0 Comment 0
2014.12.17 17:01

PISC 마이크로 프로세서

PISC 마이크로 프로세서


이제부터 다시 IT 에 관한 글을 쓰기로 했다.

긴 주제인데 일단 근원적 코딩에 관한 글들을 적어보기로 한다. 

아마 1/3은 번역이고 1/3은 내가 쓰는 것 1/3은 제작 기사다.

물질(atom)과 정보 (bit)에 대한 요리책이기도 하다.



오늘은 PISC이라는 프로세서를 번역해 보기로 한다.

프로세서를 직접 만들어보는 사람치고 이 글을 안읽은 사람은 없다. 

무척 중요한 글이다. 

저자를 잠깐 분석해보면 50년대에 태어난 분 같고

막강한 실전형으로 지금도 개발자로 살며  forth  와 태고적 임베디드에 무척 강한 분이다.

원본의 위치는 http://www.bradrodriguez.com/papers/piscedu2.htm 에 있다.


나도 이 회로를 보고 느낀 당혹감은 엄청났다. 

그래서 실제로 만들어 보려고 한다.  회로분석은 물론 실행한다. 


일단 번역을 해보자.

현재 0.7 버전이다. (2015.1.5) - 초벌 번역이 끝났다.

현재 0.2 버전이다. (12.18)

아직까지는 버전 0.1이다. 시작만 했다. (2014.12.17)


아키텍처 탐구를 위한 초단순 TTL 프로세서

A Minimal TTL Processor for Architecture Exploration

 

Bradford J. Rodriguez

McMaster University

 

저작권 표시다 그냥 넘어가자

From the Proceedings of the 1994 ACM Symposium on Applied Computing. Copyright (c) 1994, Association for Computing Machinery. Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission.

 

 

키워드

Keywords: CPU, processors, architecture, education

 

현재 컴퓨터 아키텍처를 손에 익히도록 배우려면 VLSI설계도구가 있을때만 가능하다. PISCTTL 논리소자로 만들어 CPU의 하드웨어와 마이크로코드의 동작을 보여준다. 효과적인 stack machine은 쉽게 구현할 수 있고 간단한 하드웨어 변경으로 인터럽트, 메모리 세그멘테이션 , 마이크로 시퀜서 , 병렬성과 파이프 라이닝을 구현할 수 있다. PISC 보드는 경제적이고 유효한 프로세서 디자인의 도구이다.

 

소개

 

컴퓨터 아키텍처연구는 종종 추상적이며 종이위의 연습이다. 학생들은 싱글칩 마이크로프로세서의 내부 동작도 알아낼 수 없고 학생들이 검토할 수 있는 개별 로직으로 만든 기계들은 거의 없다. VLSI설계 도구를 가진 대학만이 프로세의 설계와 구현에 대해 직접 만져보는 체험을 시킬 수 있다. 더 불쌍한 기관들은 학생들에게 책으로 배우기만을 제공할 수 있다.

 

 

 

Pathetic Instruction Set Computer는 개별로직으로 만든 모델 프로세서이다, 하드와이어드와 마이크로프램 CPU의 원리를 보여준다. 22개의 표준적 TTL (memory제외)만을 사용하며, 학생이 만들고 이해하는 수준내에 있다. 작성가능한 마이크로프로그램은 저렴한 EPROM RAM을 사용한다. 완전히 정적동작이 가능해서 관찰을 위해 느린 클록 속도나 수동으로 싱글스텝으로 돌릴 수 있다. 간단한 확장으로 인터럽트 , 명령어와 데이터의 데이터공간의 분리 , 병렬처리와 파이프라이닝을 만들어 볼 수 있다.

 

The Basic Processor

기본 프로세서

 

 

PISC-1a processor (Fig. 1)는 최소의 논리회로로 최대의 기능성을 갖도록 디자인되었다,. 16개의 내부 제어 신호만을 가지며 인코드되지 않은 마이크로인스트럭션은 16비트 길이이다.

 

ALU4개의 74181로 만들고 더하기 빼기 증가와 감소등의 숫자연산에다가 모든 논리적 연산이 가능하다. 프로그램되는 상태래치와 캐리입력에 대한 4 가지 경우의 멀티플렉서가 ALU 로직을 완성한다. 8개의 741728개의 16비트 레지스터로 포트를 3개 갖는 레지스터 파일이다. 이 파일은 바로 한 레지스터에 대한 쓰기 ("A") , 두 번째는 ("B")를 읽은 것이거나 세 번째로 ("C")에 적을 수 있다. 한번의 클럭 사이클에 다음과 같은 일들이 일어난다:

a) 레지스터중 하나가 어드레스 버스로 나가고 ALU A 입력이 된다;

b1) 다른 레지스터는 데이터버스로 출력하고 ALUB 입력이 되거나; 또는

b2) 메모리로터의 데이터가 다른 레지스터의 입력이 된다;

c) ALU의 출력이 A (그리고 아마도 B)에 적용되고 데이터는 첫 번째(address)레지스터에 저장된다,

 

 

 

a) one register is output to the Address bus and the ALU's A input;

b1) another register may be output to the Data bus and the ALU's B input; or

b2) data from memory may be input to another register;

c) an ALU function is applied to A (and perhaps B) and the result is stored in the first (address) register.


달리 지정된 마이크로시퀀서는 없다. 그 기능은 ALU와 레지스터 파일에서 이루어진다. 모든 마이크로인스트럭션은 두 개의 동작상태(phase)fetchexecute이다. fetch 상태에서는 (illustrated in Fig. 1) 하드와이어드된 가짜 명령어(pseudo-instruction)가 실행된다.

 

a) R7의 출력 (the program counter)이 어드레스버스와 ALUA 입력으로 간다.

b) 데이타를 메모리에서 읽어온다

c) A+1의 기능을 적용하고 결과를 다시 R7 에 적는다. (클럭의 하강에지에서)

 

a) output R7 (the program counter) to the Address bus and the ALU's A input;

b) read data from memory;

c) apply the function A+1 and store the result back in R7 (at the trailing edge of the clock).


PISC as a Hardwired CPU

하드와이어드 CPU PISC

 

PISC는 일반적인 CPU가 하드와이어드 제어 유닛을 가진 경우로 볼수 있다. 레지스터-레지스턴 아키텍처 [3] 그리고 PDP-11의 잔재가 남은 별로 안좋은 명령어셋을 가지고 있다.

 

ALU 조작은 하나 또는 두 개의 연산자로 레지스터와 레지스터 이동, 더하기 , 캐리를 포함한 더하기, 빼기 , 보로우를 가진 빼기 , 증가 , 감소 그리고 좌측 쉬프트와 모든 논리연산이 가능하다, 곱하기 나누기와 우측 쉬프는 없다.

 

메모리 조작은 로드와 스토어 그리고 세가지 어드레싱 모드가 있다: 레지스터 인다이렉트 , 레지스터 인다이렉트 후 증가 또는 감소 . R7에 대해 post increment 어드레싱은 immidaite 어드레싱이 된다. (Postincrement addressing on R7 (the program counter) yields immediate addressing.)

 

컨트롤 명령은 프로그램 카운데에 대한 ALU 조작이다. 레지스터 인다이렉트 점프 (상대 또는 절대)와 조건부 skip은 단 인스트럭션에 만들 수있다. 다른 점프와 브랜치 그리고 서브루틴 콜/리터은 명확하게 코드되어야 한다.

 

 

PISC as a Microprogrammed CPU

 

PISC 명령어는 물리적 제어 신호를 일으키고 따라서 어떤사람은 PISC을 일종의 마이크로프로그램된 CPU로 볼수도 있다. 기본적인 PISC는 흔한 기계를 비효율적으로 구현한 것이다. 왜냐하면 마이크로인스트럭션의 필들들을 분리하고 디코드하는 논리회로가 결여되어 있다. 그러나 PISC은 오퍼랜드가 없는 아키텍처인 스택머신보다 낫다. 가장 빠른 구현은 쓰레드된 코드[1] 16비트 마크로인스트럭션을 사용한다.

 

MRD PC,IP,A+1 ; mem(IP)->PC, IP+1->IP

레지스터 하나는 마크로 인스트럭션의 포인터에 할당되었고 다른 하나 또는 두 개의 다른 레지스터는 스택포인터처럼 사용된다. 인다이렉트 스레드 코드를 사용하는 하나의 마이크로인스트럭숀을 인터프리터에 더하면 약간의 유연성을 증가할 수 있다. [2]

 

논리적으로는 마이크로프로그램의 저장은 마크로프로그램 메모리로부터 분리되어야 한다. 그러나 통합된 마크로 - 와 마이크로 - 프로그램 저장은 프로그래머가 마이크로코드를 작성하고 새로운 마크로 인스트럭션을 더하게 되는데 이것은 가치있는 교육적 도구다. 스택머신에서 확장가능한 명령어 셋 (extensible instruction set)FORTH 프로그래밍언어에서 영향력이 있었고 이 개념은 다른 FORTH 전용 프로세서들에서 예견되었던 것들이다. [4]


너무 확연한 결함들

Glaring Deficiencies

 

PISC의 많은 결함들은 잠시만 사용해도 확실하다. 다음과 같다:

 

 

a) no conditional branch microinstruction -- an important need [6];

b) no provision for literal values in the microinstruction;

c) no ALU logic for multiply, divide, and right shift;

d) no logic for decoding of macroinstructions;

e) no provision for interrupts;

f) sparse coding of the ALU function select; and

g) two clocks required per microinstruction.

 

PISC이 교육적으로 가치있는 도구라고 이야기할수도 있다. 왜냐면 이런 결함들이 있고 여러 가지의 잠재적 해답이 있다는 것이 분명하기 때문이더. 어떤 결함들은 논리회로의 많은 추가가 없거나 마이크로인스트럭션의 확장이 없으면 고쳐지지 않는다, 그러나 상당수의 개선은 사소한 편이다.


ALU 연산 디코드

ALU Operation Decoding

 

16비트 마이크로 인스트럭션중 ( 캐리 입력 선택을 포함) 7비트는 ALU 기능의 선택에 사용된다. 그러나 128 코드중의 32개 미만이 쓸모가 있다. 나노코드 메모리 "nanocode" memory [3]나 논리조합 회로등을 사용하면 7비트에서 5비트로 ALU 기능을 줄일 수 있다.

 

다른 방법은 사용하지 않는 코드를 보조적인 제어 신호로 디코드하는 것이다. 예를들어 캐리 입력 선택 (IR6:5)은 로직연산(IR4=1)에서는 "don't-care" 가 된다, 그래서 64개의 로직연산 코드중에 48개는 다른 용도로 사용할 수 있다. 74138 하나로 8개의 추가 제어 신호를 제공할 수 있다. 이를테면 인터럽트의 가능/불가능 신호같은 거이다. 추가적인 논리 회로는 만약 원하는 경우는 ALU 출력을 레지스터에 쓰게하거나 쓰지 못하게 할 수도 있다


Conditional ALU Operations

간단한 조건부 마이크로인스트럭션이 ALU 기능을 캐리의 상태에 따라 바꾼다. 두가지의 변형이 유용할 것이다:

a) if carry set, change ALU operation from "A" to "B" (conditional jump)

b) if carry set, change ALU operation from "A" to "A+B" (conditional branch)

사용되지 않는 않은 ALU 기능이 이런 연산에 디코드 될 수 있고 적당한 논리회로가 ALU 기능을 바꾸어 입력을 선택하게 할 수 있다. 그러나 이런 일은 CPU의 결정적인 타이밍 과정을 지연시킨다.


Interrupts

인터럽트

 

두종류의 인터텁트가 PISC에 쉽게 더해질 수 있다. 마이크로인터럽트는 인터럽트를 셋하는 플립플롭을 갖게하여 구현할 수 있고, 프로그램그램 카운터가 R7 dl 아니라 R6에서 가짜 인스턱션을 가져오도록 하면 된다. R6은 인터럽트 서비스레지스터로 전용되어야 하고 플립플롭을 리셋하는 제어 시그널이 더해져야 한다. (RCA 1802 가 비슷한 인터럽트 방법을 사용했다.)

 

마크로인터럽가 마이크로인터프리터에 알려지는 것은 조건부 스킵을 첨가하고 마이크로 인터프리터에 인터럽트 서비스 루틴을 첨가하면 가능하다. 인터럽트 입력이 캐리입력 멀티플렉서에 연결되고 거의 쓰이지 않는 A=B 입력을 대체하면 된다. 인터프리터는 1 마이크로인스트럭션만큼 느려진다.

 

어느경우에든 레지스터와 상태래치는 마이크로코드에 의해 저장되고 복구되어야 한다. 인터럽트입력을 불가능하게하는 논리회로가 있는 것이 바람직하다.


다중메모리 공간

Multiple Memory Spaces

 

PDP-11 같은 많은 프로세서들은 명령어공간과 데이터 공간의 분리를 하고 있다. PISC의 어드레스 레지스터가 선택가능하고 R7이 프로그램 카운터이기 때문에 세 개의 NAND게이트는 명령공간의 지정이 가능한 신호를 만들어 낼 수 있다, 이 신호는 이미디어트 어드레스 모드에서 제대로 지정될 수 있다.

 

메모리 세그멘트의 구분이 더 이루어지는 것은 마크로 머신의 레지스터 지정에 좌우된다. 2-to-4 디코더는 마이코로 코드와 마크로코드 그리고 데이터스페이스를 threaded stack machine에서 확인가능하게 만들 수 있다.(이것은 80x86에서 제안할 만한 내용이다.)

Further segmentation of the memory space depends upon the register assignment for the macro machine. One 2-to-4 decoder can identify microcode, macrocode, stack, and data spaces in the threaded stack machine. (This is suggestive of the 80x86.)


Parallelism

병렬성

 

만약 마이크로코드 메모리가 주 메모리로부터 분리되면 fetch execcute 페이즈는 병행적으로 일어날 수 있고 각 마이크로 인스트럭션은 하나의 클럭 사이클에 실행될 수 있다. (그림 2)

 

12비트 (16비트도 가능) 카운터가 원시적인 마이크로시퀜서의 역할을 한다. 이 작업은 ALU를 시퀀서의 역할에서 풀어놔서 가짜명령어를 fetch하는 필요성을 없앤다. 각 클럭 사이클은 마이크로프로그램 ROM에서 마이크로인스트럭션을 fetch 한다.





ALU나 데이터 버스에서 카운터로 로딩하는 것으로 절대점프는 여전히 가능하다. 그러나 프로그램 카운터에 ALU 조작을 하는 것은 이제 안된다. 그래서 상대 브랜치나 조건부 스킵이다 즉치 어드레스(immediate addressing ) 력은 없어진다. 마이크로 인터럽트도 상실되고 마크로 인터럽트도 실제적으로 쓸모가 없어진다.

 

각 마이크로 인스트럭션이 매 클럭 사이클마다 fetch 된후 실행되므로 (Fig. 2) 점프 명령어는 한 클럭 사이클 딜레이를 가지게 되고 점프 다음에 오는 명령어들은 언제나 실행된다. 이것은 대부분의 마이크로 프로그램된 기계들이나 파이프라인을 갖는 일부 RISC 머신에서 보는 지연된 브랜치 (delayed branch)"이다.

 

이런 설정에서 메인메모리 억세스는 한 클럭 사이클에 완료될 필요가 없다. 클럭속도의 한정요소는 ALU 경로와 마이크로 인스트럭션 ROM이다. 선행적인 조사에서 메모리 참조에 두 클럭 사이클을 사용한다면 메모리 클럭을 두배로 할 수 있다는 것을 알 수 있다.


로드/스토어 (RISC 비슷한) 동작

Load/Store (RISC-like) Operation

더 변형을 하여(Fig. 3) 마이크로코드와 마크로코드 메모리를 재통합한다. ALU 동작 기간에 어드레스 버퍼는 불능이 되고 fetch 와 execution은 동시에 일어난다. 그러나 메모리의 로드와 스토어 기산에 PC의 출력은 트라이스테이트 상태가 되고 어드레스 버퍼는 동작상태가 된다. 그러면 ALU가 메인메모리(PROM' and RAM')의 번지 지정을 할 수 있게 된다. 메모리 접근이 완료된 다음에 더미 명령어가 실행되고 PC는 다음 명령을 페치한다.



이런 설정에서 pisc은 로드/스토어 아키텍처로 볼 수 있다.[3] RISC 머신처럼 모든 명령어는 한 클럭 사이클에 실행된다. 예외는 메모리 참조로 2 클럭을 필요로 한다.

만약 어드레스 버퍼가 양방향이면 PC는 ALU로 경로를 잡을 수 있다. 상대브랜치 , 조건부 스킵 , immediate addressing 은 다시 사용할 수 있게 복구된다.

"변경가능한 PISC"

The "Mutable PISC"

학생들에게 “한봉지의 부속”과 와이어 랩 도구를 쥐어주고 과제로 PISC을 만들라는 것은 조금 불합리할지도 모른다. 학생들은 더 좋아하지만 실험하는 사람들에게는 덜 끌리는 방법은기본 PISC 과 간단한 개선사항을 담은 PCB를 제공하는 것이다. 이것은 PISC-2 (Fig. 3)의 비전이다

PISC-2는 Am29705 register file을 구하기도 어려운 74172 대신 사용하고 16비트의 데이터 래치와 제어신호가 더 필요하게 된다. 마이크로인스트럭션을 더 늘리기보다 최소한의 기능을 디코드하는 로직이 더해질 것이다.

부품을 주의깊게 더하고 빼어 PISC-2 는PISC-1 (two-clock instructions)으로 설정될 수 있고 개별명령의 microprogram machine이나 load/store machine으로 설정할 수 있다. “통합메모리("unified memory)" 에서의 프로그램 개발은 키보드와 디스플레이로 할 수도 있고 보드안의 모니터 프로그램을 사용하여 RS-232 시리얼 포트로 할수도 있겠다.



결론

Conclusions

 

PISC 의 교욱적인 단점이라면 통상적(1- or 2-operand)” 마크로머신의 극악한(abysmal) 구현일 것이다. 이는 PISC의 원래의 미션의 귀결이기도 하다: 스택 프로세서로 최소한의 표준 TTL 논리회로(2100 게이트 )를 사용하는 것이다. 그러나 PISC-1은 성능이 반드시 복잡성을 의미하지는 않는다는 것을 극명하게 배우게 한다. 5MHz PISC-1a 5 MHz 8086에 비교해보자 (여기서 숫자는 200ns 클럭수이다 ):

 

 

primitivePISC8086
NEXT423
EXECUTE419
DROP629
EXIT639
BRANCH836
DUP846
@1052
LIT1046
R>1050
R@1044
>R1051
!1053
ENTER1049
OVER1250
AND1253
0<1447
SWAP1261
?BRANCH1651/56
UM+1869

 


 

PISC과 정말 비슷한 QS2VLSI 설계과정에 사용된 적이 있다. [5] PISC은 표준 TTL로 구성할 수 있다는 장점이 있다: 그래서 가난한 학교나 학생들도 사용할 수 있다.

 

참고문헌

References

 

1. Bell, James R., "Threaded Code," Communications of the ACM, Vol. 16 No. 6 (June 1973), pp. 370-372.

 

2. Dewar, Robert B. K., "Indirect Threaded Code," Communications of the ACM, Vol. 18 No. 6 (June 1975), pp. 330-331.

 

3. Hennessy, John L. and Patterson, David A., Computer Architecture: A Quantitative Approach, Morgan Kaufmann Publishers, San Mateo, CA (1990).

 

4. Koopman, Philip J., Stack Computers: the new wave, Ellis Horwood Ltd., Chichester, England (1989).

 

5. Rible, John, "QS2: RISCing it all," Proceedings of the 1991 FORML Conference, Forth Interest Group, Oakland, CA (1991), pp. 156-159.

 

6. Stallings, William, Computer Organization and Architecture, Macmillan Publishing Co., New York (1987).


Schematic Diagram

The schematic diagram of the PISC-1a is available if you have Adobe Acrobat or another .PDF reader. Thanks to Derry Bryson for converting the schematics to PDF files.

저작자 표시
신고
Trackback 3 Comment 0


티스토리 툴바