-
[SRC 설계] Control Unit 설계 및 구현Digital Processor Design 2013. 6. 27. 15:38반응형
2.2 Control Unit 설계
다음은 32-bit SRC의 Coltrol Unit 이다. Control Unit의 구성요소는 우선 Memory로부터 읽어들어온 Instruction의 일부분(OP code)를 받아서 입력으로 사용하고, 들어온 op code에 따라 32가지의 instruction 출력을 내보내는 5x32 decoder가 있다. 그리고 각 모든 컨트롤 신호를 T0~T7의 step신호와 Instruction, 그리고 추가 명령을 통해서 만들어주는 Control Signal Encoder가 있다. 그리고 Master CLK과 START 신호를 받아서 Step generator를 enable시켜주는 Clocking Logic 블록, T0~T7까지 타이밍 step 신호를 만들어주는 step generator 블록이 있다. shift 명령을 수행하는 도중 T6에서 만들어지는 Goto6 신호, 각 Instruction이 종료될 때 만들어지는 END 신호는 Step Generator 내부로 들어가서 T0~T7의 Step을 초기화 시키기도 하고 계속 T6에 머물게 만드는 역할을 수행하기도 한다. 이 때 Step Generator는 반드시 Clocking Logic으로부터 Enable 신호가 들어왔을 경우에만 작동하는 것이 중요하다.
2.2.1 5X32 OP code Decoder
다음은 5x32 OP code 디코더의 블록 내부이다. Instruction Register(IR)에서 만들어진 5bit의 op code를 입력으로 받아서 32개 종류의 출력으로 뿌려준다.
OP Code
Instruction
OP Code
Instruction
OP Code
Instruction
OP Code
Instruction
0
nop
6
lar
15
neg
26
shr
1
ld
8
br
20
and
27
shra
2
ldr
9
brl
21
andi
28
shl
3
st
12
add
22
or
29
shc
4
str
13
addi
23
ori
31
stop
5
la
14
sub
24
not
다음은 우리가 사용하는 Instruction만 OP코드 순서로 정렬한 표이다. 디코더는 32개의 출력을 내보낼 수 있지만 우리가 설계할 32-bit SRC는 다음과 같이 23개의 Instruction만 사용한다. 각각의 Instruction의 이름을 해당하는 OP code 번호의 출력으로 지정했으며, 사용하지 않는 OP code 번호는 그대로 두었다
2.2.2 Modified Clocking Logic
다음은 Step Generator의 Enable를 만들어주는 Clocking Logic 블록 내부 구조이다. 이 때 우리는 START, STOP, MCK의 입력핀과 Enable의 출력핀만 사용한다. 그리고 Wait 신호는 GND에 연결해서 NOT gate를 거쳐 OR3 gate에 들어가는 신호는 항상 1이 되게 설계하였다. 즉, START 신호만으로 Enable에 연결된 AND2 gate 출력을 결정짓게 하기 위해서이다.
우선 START 신호가 들어오면 JK F/F의 출력은 1(SET)이 나가며 AND2 gate의 두 입력을 모두 1로 만들어서 Enable의 출력이 1이 되게 한다. STOP 신호가 들어오면 JK F/F의 출력은 0이 나가고 AND2 gate의 출력을 0으로 만들어서 Enable의 출력을 0으로 만든다.
2.2.3 Step Generator
위 블록은 T0~T7까지의 타이밍 신호를 만들어 주는 역할을 한다. 앞서 언급한 Clocking Logic의 Enable 출력이 카운터로 들어오면 카운터가 활성화 된다. 이 때 MCK가 한 번씩 뛸 때 마다 카운터의 출력은 1씩 증가하고 이 출력이 3x8 디코더를 거쳐서 T0부터 T7까지 1step씩 신호를 내보내게 된다. 디코더의 출력은 오직 한 번에 한 개씩만 나갈 수 있으므로 T0~T7중에 어떤 신호도 2개 이상 동시에 나가지 못한다.
Goto6는 Shift 명령을 할 때 계속 T6에 남아서 NEQZ 신호가 1이 들어올 때 까지 T6 step에 해당하는 명령을 반복하게끔 한다. 이 때 Shift의 Load값은 0110으로 만들기 위해 A, D는 GND에 B, C는 VCC에 연결한다. 그리고 Goto6 신호를 카운터의 LD에 연결하면 Goto6 신호가 들어오면 카운터의 출력은 6이 나가고 T6 신호만 1이 들어온다. END 신호는 모든 instruction의 마지막에 들어가는 컨트롤 신호이며 Step을 다시 T0로 돌리는 역할을 한다. 이를 구현하기 위해 END 입력을 카운터의 CLEAR에 연결했으며, END신호가 들어오면 카운터 출력은 0으로 만들고 step은 다시 T0로 돌아가게 된다.
다음은 Step Generator의 시뮬레이션 파형이다. Enable신호는 계속 1을 준 상태에서 MCK가 1번씩 뛸 때 마다 T0부터 1step씩 증가하는 것을 확인할 수 있다. Goto6신호를 주고 MCK가 뛰면 step은 바로 T6으로 가고, END 신호를 주고 MCK가 뛰면 step은 바로 T0으로 가는 것 역시 확인하였다.
2.2.4 Control Signal Encoder
다음은 Control Unit의 가장 복잡한 부분인 Control Signal Encoder의 블록 내부 구조이다. 워낙 전체 크기가 커서 화면 모두를 담지는 못했다. Control Signal Encoder의 역할은 32-bit SRC에 사용되는 Instruction과 T0~T7의 step signal을 입력으로 받아서 모든 Instruction에서 각 step별로 사용되는 컨트롤 신호를 전부 만들어서 출력으로 내보내는 것이다.
예를 들어서 MAin 이라는 컨트롤 신호가 만들어지는 과정을 살펴보자. 우선 Instruction Fetch를 할 때(T0~T2) T0에서 수행되는 과정은 우선 현재의 PC값을 MA에 저장하고 PC는 PC+4로 증가시킨 뒤에 C register에 저장하는 것이다. 이 때 필요한 컨트롤 신호를 살펴보면, 다음과 같다.
위의 Concrete RTN(Instruction Fetch; T0~T2)을 살펴보면 T0에서는 PC값을 MA에 옮기기 위해 PCout, MAin이라는 컨트롤 신호가 필요하다. 그리고 PC를 4만큼 증가시켜야 하므로 INC4 라는 컨트롤 신호가 필요하며, 마지막으로 PC+4를 C register에 넣기 위해 Cin이라는 컨트롤 신호가 필요하다.
그리고 위의 그림은 st instruction의 Concrete RTN이며, T5일 때 T4에서 만들어진 주소값이 C에 저장되어 있고 이 C 값을 MA에 옮기기 위해 MAin 컨트롤 신호가 필요하다는 것을 알 수 있다.
따라서 MAin의 컨트롤 신호는 MAin = T0 + T5∙st 라는 것을 알 수 있다. 그런데 st instruction 뿐만 아니라 ld, ldr, str의 instruction 역시 T5에서 만들어진 주소값을 MA에 저장하는 과정을 수행하므로 MAin이 필요하다. 결국 MAin 신호는 다음과 같은 형태로 구현할 수 있다.
즉 MAin = T0 + T5(ld + ldr + st + str) 로 나타낼 수 있다.
위와 같은 방법으로 모든 컨트롤 신호를 Concrete RTN에서 찾아내서 T0~T7의 Step 신호와 Instruction 신호의 조합회로로 만든 것이 바로 Control Signal Encoder이다. Data path에서 각 Instruction마다 일일이 손으로 줘야 했던 컨트롤 신호를 각 Step신호와 Instruction 신호(OP code를 통해 해석)를 통해 만들 수 있는 것이다.
반응형'Digital Processor Design' 카테고리의 다른 글
[SRC 설계] Data Path 검증 및 시뮬레이션 (0) 2013.06.27 [SRC 설계] 1BUS 구조 SRC 설계 및 구현 (0) 2013.06.27 [SRC 설계] Data Path 설계 및 구현 (2) (0) 2013.06.27 [SRC 설계] Data Path 설계 및 구현 (1) (0) 2013.06.27 [SRC 설계] 32Bits 1BUS SRC 설계 개요 (0) 2013.06.27