1. 2018 Mid-term Examination (100)
Basic Computer Design
Date: 2018-10-18
1. Latch와 flip-flop을 서로 비교하시오. (40)
1) 두 소자 간의 가장 큰 차이점을 쓰시오. (10)
순차 논리 회로인 latch와 flip-flop은 clock으로 구별한다. Clock 없이 회로 입력만으로
출력을 결정하면 latch가 된다. 반대로 clock이 on 상태일 때 회로를 동작시키고, off 상
태일 때 회로를 정지시키면 flip-flop이라 부른다. Flitp-flop은 주로 edge trigger로 동작
한다.
2) SR latch 입출력 관계를 Arduino Sketch 함수로 구현하시오. 여기서 이전 출력
(previous output) Q는 bPrevQ로 둔다. (20)
boolean srLatch(boolean bS, boolean bR, boolean bPrevQ)
{
boolean bRbar = !bR;
boolean bNextQ = bS || (bRbar && bPrevQ);
return bNextQ;
}
3) JK latch 구현이 불가능한 이유를 쓰시오. (10)
JK 회로는 SR 회로와 동작이 거의 동일하다. 다만 입력이 1과 1일 때가 다르다. SR 회
로 입력이 (S, R) = (1, 1)일 때는 불능이지만, JK 회로 입력이 (J, K) = (1, 1)일 때는 출력
을 반전시켜야 한다. JK latch인 경우는 (J, K) = (1, 1)일 때 출력을 계속 반전시키므로 출
력은 계속 변하게 되어 사용할 수 없다. 따라서 JK 회로는 clock을 사용하여 JK flip-flop
형태로 사용해야 한다. JK flip-flop은 주로 edge trigger로 동작하므로, 입력을 (J, K) = (1,
1)로 넣더라도 on 상태를 만들 때만 출력을 반전시켜 (J, K) = (1, 1)은 타당한 입력이 된
다.
2. CPU 구성 요소인 CU(Control Unit), ALU(Arithmetic Logic Unit), cache 중에서 CU가
2. 가장 중요한 이유를 3가지 이상 쓰시오. (15)
- CU는 CPU의 핵심인 machine cycle을 돌리는 역할을 한다.
- 현대 computer 방식인 von Neumann computer 구동은 CU가 담당한다.
- 현재 입력된 instruction을 해독하여 ALU가 계산할 수 있는 초기화를 진행한다.
- 외부 memory에 접근하여 여러 변수 값을 register로 가져오거나, 반대로
register 값을 외부 memory에 저장하려면 CU의 관리가 필요하다.
- Program code 중 code 분기와 반복은 CU가 제어한다.
3. DRAM(Dynamic Random Access Memory)과 SRAM(Static Random Access Memory)의
차이점을 3가지 이상 쓰시오. (15)
- DRARM은 주기적인 충전이 필요한 capactior로 생각할 수 있고, SRAM은 주기적
인 충전이 필요 없는 TR latch로 생각할 수 있다.
- DRAM은 저가로 만들 수 있고, SRAM은 TR latch가 필수적이므로 고가이다.
- DRAM은 주기적인 충전으로 인해 data 처리 고속화에 약점을 가지고 있지만,
SRAM은 항시 data 처리가 가능하므로 고속화가 쉽다.
- DRAM은 단순 capacitor 역할이므로 전력 소모가 크지 않지만, SRAM은 TR이 항
상 동작 중이므로 전력 소모가 크다.
4. Arduino Sketch 언어를 이용해 다음 작업을 programming하시오. Code는 짧을수록
가산점 부여. 여기서 serial port의 연결 속도는 9600 [bps], class StringTok이 있다고
가정; 반드시 setup()과 loop() 함수를 사용할 것. (30)
1) 사용자에게 정수를 입력 받아 digital port 13번 LED를 입력 받은 정수만큼 깜박임.
예를 들면 숫자5를 입력하면 LED를 다섯번 깜박임. (15)
#include <StringTok.h>
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
3. }
void loop() {
int nInput;
scans(nInput);
for (int i = 0; i < nInput; i++) {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
}
2) Digital port 5번을 입력, 8번과 13번을 출력으로 사용. 5번이 high면 digital port 13번
LED를 켜고 8번은 low를 출력한다. 반대로 5번이 low면 LED를 끄고 8번에 high를
출력. (15)
void setup() {
pinMode(5, INPUT);
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
int nInput = digitalRead(5);
digitalWrite(13, nInput);
digitalWrite(8, !nInput);
delay(1000);
}