Blog | Tag | Local | Guest | Login | Write |  RSS
2008/12/07에 해당되는 글 2건

 하루에 2개 올린다는게 정말 쉬운게 아니군요 ㅠ_ㅠ 하지만 열심히 해야한다는 각오로(이번주에도 시험이 2과목...) 블로그를 올리고 있습니다. ㅋㅋ 컴구조를 지금까지 공부하면서 참 간단하다는 생각을 많이 합니다. 복잡한 구조로 움직이는거 같지 않고요 규칙을 따라 동작하는거 같은데 왜이리 수업시간에는 이해하기도 머리에도 들어오지 않던지...뭐 뒤쪽으로 가면 갈수록 더 어려워지나깐요 정신을 차려야겠지요 지난번 블로그에서 아주 간단히 예를 들으면서 한 클럭싸이클 동안에 어떻게 정해저 있는 간단히 봤는데요 이제 부터 본격적으로 한번 보겠습니다.

 컴퓨터에서 각 명령어 사이클은 다음과 같은 단계들로 이루어제 있습니다.
 
 1. 명령어를 메모리에서 가져온다(fetch라고 합니다.)
 2. 명령어를 디코딩한다.
 3. 간접 주소 방식의 명령어일 경우에 메모리로부터 유효 주소를 읽어온다.
 4. 명령어를 실행한다.

 네번째 단계가 끝나면 다시 첫번째 단계로 돌아가 다음 명령어에 대한 fetch, 디코드, 실행 단계를 반복합니다. 이러한 반복은 HALT명령을 만날 때까지 계속하여 반복합니다. 그럼 각 단계에 대해서 알아보도록 하겠습니다.

 Fetch와 디코드 
 
 초기에 프로그램 카운터는 프로그램의 첫 명령어에 대한 주소를 가지고 있으며, 순차 카운터는 0으로 타이밍 변수 T0를 가리킵니다. 다음에 매 클럭마다 타이밍 변수는 T0, T1, T2와 같은 순서로 변합니다. 이 타이밍 변수들에 맞추어서 Fetch와 디코드 단계에 대한 마이크로 연산은 다음과 같은 레지스터 전송문으로 표시 됩니다.


여기서 AR레지스터만이 메모리의 주소 입력에 연결되어 있으므로, T0시간 동안 PC에서 AR로의 데이타 전송이 필요합니다. 메모리에서 읽어온 명령어는 T1에 해당하는 클럭 변이에서 명령어 레지스터(IR)에 저장됩니다. 동시에 다음 명령어의 주소를 위해 PC가 하나 증가됩니다. 시간 T2에서는 IR의 연산 코드부분이 디토드되고, 간접 비트가 플립플롭 I에 전해지며 주소 부분은 AR로 전송이 됩니다.





 위의 그림은 처음 두 레지스터 전송문을 버스 시스템으로 구현한 것입니다. PC에서 RA로의 데이타 경로를 제공하기 위하여 타이밍 신호 T0를 적용시켜 다음과 같은 연결을 형성해야 합니다.

 1. 버스 선택 입력(S2S1S0)DMF 010으로 하여 PC내용이 버스에 놓이도록 한다.
 2. AR의 LD입력을 인에이블 시켜서 버스의 내용을 AR로 전송한다.

 이와 같은 연결이 이루어졌으면 다음 클럭의 변이에서 PC와 AR 사이에 데이터 전송이 일어납니다. 두번째 문장을 구현하기 위해서는 타이밍 신호 T1을 이용하여 다음과 같은 연결을 형성해야 합니다.

 1. 메모리의 읽기 입력을 인에이블시킨다.
 2. S2S1S0=111로 하여 메모리의 내용이 버스에 놓이도록 한다.
 3. IR의 LD입력을 인에이블시켜 버스의 내용에 IR로 전송한다.
 4. PC의 INR입력을 인에이블시켜 PC의 값을 하나 증가시킨다.

 명령어 종류의 결정

 
시간 T3동안에 제어 장치는 명령어의 종류를 결정합니다.

 위의 그림에서 보듯이 레지스터 참조 혹은 입출력 명령은 T3에서 수행이 되어 지고 메모리 참조 명령은 T4에서 수행이 되어집니다. 기호로 표시하면 다음과 같습니다.

 D7'IT3 : AR<-M[AR]
 D7'IT3 : 아무런 일도 하지 않는다.
 D7I'T3 : 레지스터 참조 명령어를 수행
 D7IT3 : 입출력 명열어를 수행



레지스터 참조 명령어

 레지스터 참조 명령어는 D7=1 이고 I=0 인 명령어로 IR(0-11)에 있는 나머지 12비트로 12가지 명령어를 나타냅니다. 모든 제어 함수는 D7I'T3의 부울식이 필요한데 이것을 간단히 기호 r로 나타내며, IR(0-11)레지스터의 각 비트를 Bi로 표시하여 각 명령어에 대한 제어 함수를 구별합니다. 예를 들어 16진 코드로 7800인 명령어 CLA는 이진 코드로 0111 1000 0000 0000 을 가리키기 때문에 I', D7, B11들이 1의 값을 가집니다. 따라서 이 명령어에 대한 마이크로 연산을 구동시키는 시간 제어 함수는 D7I'T3B11=rB11이 됩니다. 이와 같이 레지스터 참조 명령어는 사간 T3에 수행이 완료되고, 순차 카운터의 타이밍 신호는 다시 T0으로 돌아갑니다.

 처음 7개의 명령어는 AC나 E레지스터에 대한 마이크로 연산을 나타내며 다음의 네 명령어는 주어진 조건이 만족될 때 다음 명령어를 수행하기 위해  PC를 다시 한번 증가시키는 연산을 나타냅니다. 마지막으로 HLT명령은 시작-끝 플립플롭 S를 클리어하고 순차 카운터의 동작을 멈추게 합니다.

다음 블로그에서는 메모리 참조 명령어에 대해서 알아보도록 할게요 그럼 시험기간 모드들 시험 잘보세요^^


안녕하세요 시그원 여러분 어느덧 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로 됩니다.  다음 블로그에서 명령어 사이클에 대해서 자세히 알아보도록 하겠습니다.