1
2016 Mid-term Examination (100)
Basic Computer Design
Date: 2016-10-17
1. Computer에서 이진법(Binary Numeral System)을 채택한 주요한 이유는 무
엇인가? (10)
- 이진법은 표시하는 숫자가 0과 1로 매우 간단한 수체계임
- 사칙 연산도 0과 1만 사용하므로 입력과 출력 관계를 간단한 논리 체계로
구성 가능함
- 이로 인해 Digital 회로 계산기를 구현할 때 회로 구조가 단순해지며 더 복
잡한 Bit 연산도 구현 가능함
2. Computer CPU에 있는 CU(Control Unit)의 역할과 중요성을 설명하시오.
(15)
- 역할: CPU 명령어를 해독하고, CPU 내에 있는 ALU의 연산을 관리하며,
Main Memory에 있는 Data를 Register로 가져옴
- 중요성
= von Neumann 방식 CPU에서는 동일한 연산을 하는 회로를 ALU에 집
중시키고 CU의 명령에 따라 ALU가 적절한 연산을 하도록 동작시킨다. 즉
von Neumann Computer 구동에 필수적인 부분이 CU이다.
= 현재 구동되고 있는 Program Code가 순차적으로 혹은 분기되어 처
리되도록 전체 과정을 조정한다.
3. Block Diagram or Flowchart를 이용하여 Half Adder 기반 16-bit Adder를
설계할 수 있는 손쉬운 방법을 구체적으로 설명하시오. (20)
2
- 두 개의 Half Adder를 조합하여 Carry 입력과 출력을 가진 Full Adder를 구
성한다.
- Carry까지 고려하여 Full Adder를 직렬 형태로 연결한다. LSB는 Carry가 없
기 때문에 Half Adder를 사용하고 나머지 15-bit은 Full Adder로 연결한다.
4. SR Flip-flop에 비해 JK Flip-flop 구현이 어려운 이유를 Clock과 연결하여
설명하라. (15)
- JK Flip-flop은 J = 1, K = 1이 들어온 경우 이전 상태를 반전시켜야 한다.
하지만 이 연산은 출력을 항상 반전하여 입력에 넣은 Feedback 기능을 사용
하기 때문에 Clock이 없다면 출력을 계속 반전시키는 이상한 기능이 된다.
- 이 문제를 해결하기 위해 Clock이 들어온 경우에만 1회에 한해 출력을 반
전시키는 기능이 필요하다. 이를 구현하기 위한 대표적인 예가 Mast-slave
구조이다. 혹은 Edge Trigger를 이용해 Clock이 변경되는 동안에만 반전이 일
어나도록 제한해야 한다.
5. Arduino Sketch 언어를 이용해 다음 작업을 Programming하시오. Code는
짧을수록 가산점 반영. (40)
1) PC Keyboard에서 ‘a’를 입력하면 D13에 연결된 LED를 켜고, ‘b’를 입력하
면 D13 LED를 끄는 Code; 여기서 Serial Port의 연결 속도는 9600 [bps],
반드시 setup()과 loop() 함수를 사용할 것(20)
void setup() {
3
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
char ch = Serial.read();
if (ch == ‘a’) digitalWrite(13, HIGH);
else if (ch == ‘b’) digitalWrite(13, LOW);
}
delay(1000);
}
2) D7에 연결된 LED를 0.5초 On, 0.5초 Off한 후 On, Off 시간을 0.5초씩 계
속 증가시킨다. (On = 0.5초, Off = 0.5초, On = 1초, Off = 1초, On = 1.5초,
Off = 1.5초, …) D10에서 5V 입력이 들어오면 D7의 LED On/Off를 하지 않
는다; 여기서 반드시 setup()과 loop() 함수를 사용할 것(20)
int nTime;
void setup() {
pinMode(7, OUTPUT);
pinMode(10, INPUT);
nTime = 500;
}
void loop() {
int nInput = digitalRead(10);
if (nInput == LOW) {
digitalWrite(7, HIGH); delay(nTime);
digitalWrite(7, LOW); delay(nTime);
4
nTime += 500;
}
else delay(1000);
}

TestBCD2016-1(Answer)

  • 1.
    1 2016 Mid-term Examination(100) Basic Computer Design Date: 2016-10-17 1. Computer에서 이진법(Binary Numeral System)을 채택한 주요한 이유는 무 엇인가? (10) - 이진법은 표시하는 숫자가 0과 1로 매우 간단한 수체계임 - 사칙 연산도 0과 1만 사용하므로 입력과 출력 관계를 간단한 논리 체계로 구성 가능함 - 이로 인해 Digital 회로 계산기를 구현할 때 회로 구조가 단순해지며 더 복 잡한 Bit 연산도 구현 가능함 2. Computer CPU에 있는 CU(Control Unit)의 역할과 중요성을 설명하시오. (15) - 역할: CPU 명령어를 해독하고, CPU 내에 있는 ALU의 연산을 관리하며, Main Memory에 있는 Data를 Register로 가져옴 - 중요성 = von Neumann 방식 CPU에서는 동일한 연산을 하는 회로를 ALU에 집 중시키고 CU의 명령에 따라 ALU가 적절한 연산을 하도록 동작시킨다. 즉 von Neumann Computer 구동에 필수적인 부분이 CU이다. = 현재 구동되고 있는 Program Code가 순차적으로 혹은 분기되어 처 리되도록 전체 과정을 조정한다. 3. Block Diagram or Flowchart를 이용하여 Half Adder 기반 16-bit Adder를 설계할 수 있는 손쉬운 방법을 구체적으로 설명하시오. (20)
  • 2.
    2 - 두 개의Half Adder를 조합하여 Carry 입력과 출력을 가진 Full Adder를 구 성한다. - Carry까지 고려하여 Full Adder를 직렬 형태로 연결한다. LSB는 Carry가 없 기 때문에 Half Adder를 사용하고 나머지 15-bit은 Full Adder로 연결한다. 4. SR Flip-flop에 비해 JK Flip-flop 구현이 어려운 이유를 Clock과 연결하여 설명하라. (15) - JK Flip-flop은 J = 1, K = 1이 들어온 경우 이전 상태를 반전시켜야 한다. 하지만 이 연산은 출력을 항상 반전하여 입력에 넣은 Feedback 기능을 사용 하기 때문에 Clock이 없다면 출력을 계속 반전시키는 이상한 기능이 된다. - 이 문제를 해결하기 위해 Clock이 들어온 경우에만 1회에 한해 출력을 반 전시키는 기능이 필요하다. 이를 구현하기 위한 대표적인 예가 Mast-slave 구조이다. 혹은 Edge Trigger를 이용해 Clock이 변경되는 동안에만 반전이 일 어나도록 제한해야 한다. 5. Arduino Sketch 언어를 이용해 다음 작업을 Programming하시오. Code는 짧을수록 가산점 반영. (40) 1) PC Keyboard에서 ‘a’를 입력하면 D13에 연결된 LED를 켜고, ‘b’를 입력하 면 D13 LED를 끄는 Code; 여기서 Serial Port의 연결 속도는 9600 [bps], 반드시 setup()과 loop() 함수를 사용할 것(20) void setup() {
  • 3.
    3 Serial.begin(9600); pinMode(13, OUTPUT); } void loop(){ if (Serial.available() > 0) { char ch = Serial.read(); if (ch == ‘a’) digitalWrite(13, HIGH); else if (ch == ‘b’) digitalWrite(13, LOW); } delay(1000); } 2) D7에 연결된 LED를 0.5초 On, 0.5초 Off한 후 On, Off 시간을 0.5초씩 계 속 증가시킨다. (On = 0.5초, Off = 0.5초, On = 1초, Off = 1초, On = 1.5초, Off = 1.5초, …) D10에서 5V 입력이 들어오면 D7의 LED On/Off를 하지 않 는다; 여기서 반드시 setup()과 loop() 함수를 사용할 것(20) int nTime; void setup() { pinMode(7, OUTPUT); pinMode(10, INPUT); nTime = 500; } void loop() { int nInput = digitalRead(10); if (nInput == LOW) { digitalWrite(7, HIGH); delay(nTime); digitalWrite(7, LOW); delay(nTime);
  • 4.
    4 nTime += 500; } elsedelay(1000); }