Blog | Tag | Local | Guest | Login | Write |  RSS
안녕하세요 시그원 여러분 어느덧 12월 달이군요 눈도 2번이나 오고 요즘 따라 마음이 싱숭생숭하답니다. 아무튼 지난주에 시험기간이였기에 부득이하게 블로그를 올리지 못했습니다. but 벌금을 내야한다는 사실 ㄷㄷㄷ 미리미리 많이 많이 올려야 하는데 제 게으림을 탓할수 밖에 없는 현실입니다. 

 지난 블로그에서는 컴퓨터 명령어에 대해서 알아보았습니다. 그 내용이 무척 중요하죠 일단 명령어와 명령어의 내용을 정확히 알지 못한다면 시험은 손도 못댄다고 봐야죠 주로 많이 사용하는 명령어들이 메모리 명령어들은 다 중요하고요 레지스터리 명령어는 CLA, CLE, CMA, CME 생각해보니깐 다 중요하네요...아무튼 그럼 본격적으로 타이밍과 제어부분에 대해서 설명해 보겠습니다.

 기본 컴퓨터의 모든 플립플롭과 레지스터는 주 클럭 발생기에 의하여 제어됩니다. 그러나 클럭 펄스만으로는 레지스터의 상태를 변경시킬 수 없고, 제어 장치에서 생성된 제어 신호가 인에이블시켜 주어야 합니다. 제어 장치는 하드와이어(hardwired)제어 방시과 마이크로 프로그램(microprogrammed)제어 방식의 두 종류가 있습니다.  하드웨어 방식은 게이트, 플립플롭, 디코더 등의 디지탈 회로를 이용하여 제어 논리를 구현하기 때문에 속도면에서 유리하지만 컴퓨터의 구조가 변경되었을 때 여러 부품들 사이의 배선까지 바꾸어 주어야 하는 단점이 있습니다 반면에 마이크로 연산을 순차적으로 수행시키기 때문에 설계가 변경되더라도 제어 메모리의 마이크로 프로그램만 갱신해주면 됩니다.
 위의 그림은 제어 장치의 블럭도인데 이것은 구 개의 디코더와 하나의 순차 카운터, 그리고 여러개의 제ㅐ어 논리 게이트로 구성되어 있습니다. 메모리에서 읽어온 명령어는 공통 버스 시스템에 있는 명령어레지스터(IR)에 놓이게 되고, 이 중에서 연산 코드 부분이 3x8디코더에 의해 D0~D7까지로 디코딩됩니다. 명령어 레지스터의 5비트는 I로 표시되는 플립플롭에 전송되며, 나머지 0에서 11번째 비트들은 제어 논리 게이트로 연결이 됩니다. 4비트 순차 카운터(SC)의 출력은 디코더에 의해 T0~T15까지 16개의 타이밍 신호(이게 제어신호이죠)를 생성합니다.

 순차 카운터는 동기적으로 클리어되는 기능을 가지고 있고 예를 들어 타이밍 신호가 T0, T1,T2,T3,T4와 같은 순차로 카운트된다고 가정하면 시간 T4에서 디코더가 출력 D3가 활성화되었을 때 SC가 0으로 클리어되도록 하는 문장을 D3T4 : SC<-0 라고 씁니다 아! 여기서 SC는 동기적으로 클리어 되는 기능을 가짐니다. 그럼 계속해서 D3T4 : SC<-0 에 대한 제어 신호의 시간 관계를 보여주는 타이밍도를 보겠습니다.
 처음에  SC의 CLR입력이 1이므로, 첫번째 클럭의 상승 변이에서 SC가 0으로 클리어되고 이것은 타이밍 신호  T0를 만듭니다. 다음에 매 틀럭마다 SC가 증가되어  T1에서 T4까지 타이밍 순서를 생성합니다. 위의 그림에서 마지막 세 개의 타이밍 파형에서 보는 바와 같이 시간 T2에서 연산 코드 디코더의 출력 D3가 1로 활성화 됩니다. 그리고  T4가 1로 되었을 때 SC의  CLR입력에 연결되는 D3T4의 값도 1이  됩니다. 따라서 다음 클럭의 상승 변이가 일어나기 전에 끝마쳐지게 된다. 그러나 많은 컴퓨터에서 메모리 사이클은 프로세서의 클럭 사이클보다 더 길기 때문에 이러한 타이밍 관계는 실제로 맞지 않습다. 즉 이 경우에 프로세서는 메모리 워드가 유효해질 때까지 몇 사이클을 기다리고 있어야 합니다. 컴퓨터의 동작을 완전히 이해하려면 클럭 변이와 타이밍 신호 사이의 시간 관계를 잘 알아야 합니다. 예를 들어 T0 : AR<-PC 레지스터 전송문은 타이밍 신호 T0가 1일때 PC의 값을 AR로 전송하는 것을 나타냅니다. 이 경우에 T0는 한 클럭 사이클 동안 1을 유지하는데, 이 기간 동안 PC의 내용이 버스에 올려지고(S2S1S0=010) AR의 LD입력도 인에이블 됩니다. 그리고 실제 데이타의 전송은 다음 클럭의 상승 변이에서 일어납니다. 이와 동시에 순차 카운터 SC의 값이 0000D에서 0001로 하나 증가하여 다시 한 클럭 사이클동안 T1이 1로 됩니다.  다음 블로그에서 명령어 사이클에 대해서 자세히 알아보도록 하겠습니다.