일단 isa (instruction set archiecture)는 8 bit를 1 word (하나의 최소 명령어 단위)로 잡아보았습니다. (아직은 많은 고민이 있네요.)

역시 아무래도 나중에 wire wrapping의 고통을 줄이기 위해서는 RISC (Reduced Instruction Set Computer) 방식을 사용해야 할것 같습니다.
RISC의 경우 CISC (Complex Instruction Set Computer)와는 다르게 1 instruction은 1 cycle에 끝나게 됩니다. 물론 RISC가 pipe line을 지원하면 총 pipeline stage를 거쳐야 명령어 처리가 되겠지만 말이에요. 뭐, 저에겐 pipe lining은 사치이니까요 ^^;

크게 현재는 최소한의 RISC instruction들로 구성한 후 software (assemble coding)에서 많은 구차한 (?) 일을 하도록 할 생각입니다. 아무래도 하드웨어 설계가 복잡해지는 것 보단 차라리 assembler simulator를 Windows용으로 하나 만들어서 거기서 코딩&디버깅 한 후 EEPROM에 올리는게 날것 같아서 말이지용...

대충 크게 one instruction은 다음의 모양을 할것 같습니다.
8bit word = 4bit OPCODE | 4bit register selector
                4bit OPCODE | 4bit #immediate

대충 잡은 최소 필요 Register file입니다.
Data Register : 4bit or 8bit Y, A, B
Addr Register : 16bit or 24bit PC, ADR
Flag Register : 1bit Fcmp

다음은 지원하려고 하고 있는 instruction set입니다. (Logic, Arith 관련 명령어는 74S181N을 이용하기 때문에 오른편엔 Mode, S0~S3, CARRYn, A==B핀의 설정값도 함께 적어보았습니다)

Logic
AND   Y = A & B : M=H, S=HHHL
OR    Y = A | B : M=H, S=HLHH
      Y = ~A    : M=H, S=LLLL

Arithmetic
ADD   Y = A + B : M=L, S=HLLH, Cn=L
SUB   Y = A - B : M=L, S=LHHL, Cn=H

INC   A = A + 1 : M=L, S=HHHH, Cn=H
DEC   A = A - 1 : M=L, S=LLLL, Cn=L
COM   Fcmp <- A == B : A=B


Register Move
MOV_Y2A      : A = Y
MOV_A2B      : B = A
MOV_B2A      : A = B

Immediate
SetADR #addr : ADR = #addr

Memory Load/Store
Load A       : A = [ADR]
Save A       : [ADR] = A

Jump Control
JMP          : PC = ADR
JMP_EQU      : if ( Fcmp ) PC = ADR
JMP_NEQ      : if ( !Fcmp ) PC = ADR

스택 명령을 지원할 것인지. 아니면 arm처럼 함수 호출후 돌아올 링크 레지스터 (lr)을 둘지 결정을 못했네요.  그리고 ~A 명령이나 INC, DEC는 과연 필요한 명령어 인지도 의심이 가네요 --;....

현재 ALU는 4bit 74S181N을 갖고 있어서 이를 활용하려는 계획인데 문제는 8bit ALU가 되기 위해서는 74S181N 두개를 연결해줄 74S182가 필요하다는 것입니다. Carray Lookahead를 지원하는 74칩인데, 이 역시 구하기 하늘에서 별따기 같네요.
그냥 몇 명령어에 대해서 직접 GAL을 이용하여 74S182를 흉내내는 식도 고려해 보고 있습니다.

겨울이 깊어지고 추워지니까 취미활동도 둔화되네요.

어쨋든 저에게 중요한 설계 isa design decision factor는 다음과 같습니다.
1. 가장 최소의 wire wrapping 선을 유지한다.
2. 가능하면 C 언어 지원을 고려한다 (함수 호출을 위한 stack지원, 포인터 지원을 위한 간접 주소 어드레싱 모드 지원)
3. 컴파일러에게 보다 수월한 backend register mapping이 가능토록 instruction들의 폭넓은 register selection 지원

일단 isa를 정하고, 그 후에 실제 timing budget을 계산해봐야 할것 같습니다.

'프로젝트 > CPU 설계' 카테고리의 다른 글

microcode  (2) 2010.12.08
VGA 테스트 성공!  (2) 2009.01.15
address/data bus issue  (2) 2008.12.22
compiler basic phase  (0) 2008.12.13
VGA programming  (2) 2008.12.09

+ Recent posts