Q. tri-state 버퍼의 원리와 버스활용의 예를 상세히 설명하시오.1) tri-state 버퍼Tri-State 버퍼란 3가지 출력 상태를 갖는 버퍼를 말한다. 3가지 출력상태는 High, Low, High-Impedance를 말한다. Tri-State 버퍼는 특히 여러 입출력들이 공통 선(버스)에 연결하는 회로에 유용하게 활용된다. 위 회로에서 삼각형 모양으로 표현된 버퍼는 enable 신호가 1이면 전압은 그대로 두고 출력 전류를 증폭한다. enable신호가 0인 경우는 선은 연결되어있지만 전류가 흐르지 않는 High-Impedance 상태를 유지한다. 여러 개의 출력신호를 하나로 묶을 때 만약 2개 이상의 출력신호가 1인 경우 출력소자에 치명적인 손상이 발생할 수 있는데 앞서 설명한 Tri-State 버퍼의 원리를 사용하면 이를 방지할 수 있다.BAF00Z01Z100111진리표를 보면 이해하기 쉬운데 Tri-State 버퍼는 B와 A의 입력신호를 갖는다. A 신호는 레지스터와 B 신호는 decoder와 연결한다. 이때, decoder에서 선택을 받는 경우 즉 enable 신호가 1이고 decoder에서 해당 포트 출력이 1인 경우에만 값을 출력한다. (B가 1일때만 출력 F가 0, 1 값을 갖고 enable이 0인 경우는 선은 연결되어있지만 전류는 흐르지 않는 High-Impedance 상태 유지) enable이 1이고 해당포트 decoder 값이 1인 경우는 레지스터 값인 A 출력을 그대로 출력한다.2) tri-state 버퍼와 버스활용실제 활용되는 버스는 16bit, 12bit 등이지만 회로도로 표현하기 복잡하기 때문에 4bit로 가정하고 진행한다. 강의에서 4개의 레지스터에서 select신호 s1, s0에 따라 4x1 MUX 4개를 이용해, 선택된 1개의 레지스터 값을 4bit 버스에 담는 회로에 대해 다루었는데 이를 tri-state 버퍼를 활용해 단순화해 표현할 수 있다. 아래와 같이 다양하게 MUX를 사용하지 않고 표현이 가능하다.위의 2가지 예시 중 오른쪽 예시를 활용하여 회로도를 재구성하면 아래와 같이 그릴 수 있다. MUX를 사용하지 않고 오히려 단순화하여 회로가 구성된 것을 확인할 수 있다. Control input인 enable 신호가 0인 경우는 High-Impedance 상태가 되어 아무것도 출력하지 않고, enable 신호가 1일때만 select 신호에 따라 선택된 레지스터의 출력값이 증폭되어 data bus에 실리게 된다.
Q. NAND게이트가 함수적으로 완전한 집합임을 구체적으로 밝히시오.1) NAND 게이트NAND 게이트란 Not AND 게이트라는 말로 논리곱의 결과값을 부정한 것이다. 즉, 두 명제가 모두 참이면 거짓값을 돌려주고 그 외에는 참값을 돌려준다. 참고로 NAND만을 통해 다른 논리 연산식을 모조리 구현할 수 있기 때문에 현재 사용되는 플래시 메모리들은 대부분이 NAND 회로로 구성되어 있다. NAND 게이트의 진리표는 다음과 같다. 모든 입력이 참일 때만 (1,1) 거짓을 출력(1)하는 논리 회로이다.NAND 연산 결과입력값반환값*************) 함수적으로 완전한 집합인 NAND 게이트AND, OR, NOT 게이트는 기본 논리회로로 이 3가지로 사칙연산과 같은 기본적인 연산을 모두 수행 가능하다. 그러나 실제 사용되는 메모리는 NAND 게이트만으로 구성하는데 이유는 NAND게이트 만으로 AND, OR, NOT 게이트를 모두 표현할 수 있고, 같은 게이트로 메모리를 구성하면 훨씬 효율적으로 집적도를 높일 수 있기 때문이다. NAND 게이트 만으로 만든 메모리가 바로 낸드 플래시이다. 같은 맥락에서 NOR만으로도 메모리를 구성할 수 있지만 이 경우는 속도는 빠르지만 가성비가 좋지 않아 사용되지 않는 상태이다.그렇다면 어떻게 NAND게이트로 AND, OR, NOT 연산을 모두 표현할 수 있는지 알아보겠다. 전자회로는 강의에서도 소개했듯이, 일반적으로 회로식을 sum of products 라는 형식으로 구성한다. 입력을 여러 개의 AND 게이트로 묶은 뒤, 이 출력을 모두 OR로 연결하여 구성하는 방식이다. 그러나 이때 드 모르간 법칙을 이용하면 AND, OR, NOT으로 구성된 연산을 모두 NAND 게이트만으로 구성이 가능하게 된다.드 모르간 법칙이란 논리 연산에서 논리합은 논리곱과 부정기호로, 논리곱은 논리합과 부정기호로 표현할 수 있음을 가리키는 법칙이다.예를 들어 X = NOT(A AND B)은 X=(NOT A OR NOT B)로 표현이 가능하다.위 개념을 이용하면 논리회로를 NAND 게이트만으로 구성할 수 있다. 예를 들어 Q= (A AND B) OR (C AND D) 식은 다음과 같이 변형될 수 있다.NOT 게이트를 2번 넣어주면 값이 변하지 않음을 이용해 다음과 같이 변형한다.위 회로를 앞서 드모르간 법칙에서 확인한 것을 이용해 OR게이트를 아래와 같이 변형한다. 변형한 후의 게이트는 모두 AND에 NOT을 붙인 형태이기 때문에 NAND 게이트로 구성이 가능하다.
Q. ASCII코드의 필요성과 변환에 대해 상세히 설명하시오.1) ASCII 코드의 필요성ASCII코드는 미국정보교환표준부호라는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 컴퓨터 발전 초반에는 주로 기계어로 사람과 컴퓨터가 소통했고 당연히 그 과정이 어렵고 비효율적이 었다. 따라서 어셈블리어 등의 사람이 쓰는 문자를 사용할 필요성이 대두되었고, 숫자와 영어 대소문자, 몇몇 특수문자들을 128개()의 코드값에 1:1 대응시키는 법을 고안했고, 이것이 ASCII코드이다. 컴퓨터가 연산 가능하지만, 사람이 이용하기 편하게 하기 위해 도입된 방식인 것이다. 현재 ASCII는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 ASCII에 기초를 두고 있다. 이 방식은 매우 단순하기 때문에 어느 시스템에서나 적용 가능하다는 장점이 있다.ASCII코드에 대해 자세히 살펴보면, ASCII 코드는 7비트 인코딩으로 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총 128개로 이루어진다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다. 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어진다. 또한 1바이트를 구성하는 8비트 중에서 7비트만 문자표현에 사용하고 나머지 1비트를 통신 에러 검출을 위해 사용한다. Parity Bit라고 해서, 7개의 비트 중 1의 개수가 홀수면 1, 짝수면 0으로 하는 식의 패리티 비트를 붙여서, 전송 도중 신호가 변질된 것을 수신측에서 검출해낼 확률을 높이는 방식이다. 그러나 이는 원시적인 방식이기 때문에, 현재는 사용되지 않고 그냥 맨 앞 비트에 0을 붙이고 이어서 7비트가 이어지는 식의 인코딩이 일반적이다.2) ASCII코드 변환ASCII 코드를 변환하는 것은 앞서 제시한 ASCII 코드표를 이용하면 쉽게 변환할 수 있다. 예를 들어 사용자가 문자 A를 입력하면, 컴퓨터는 ASCII 코드에 따라 문자 A에 해당하는 65를 이진수화 한 형태 즉 100 001로 받아 들인다. 이것을 이용해 문자를 숫자로, 숫자를 문자로 변형이 가능하다. 예를 들어 C언어를 기준으로 문자를 숫자로 출력하면 아래 그림과 같다.첫번째 출력문(printf)의 경우, 문자a를 데이터로 입력하지만 출력하는 형태를 %d 정수형으로 받았다. 그 결과 97이라는 숫자값이 출력되었는데 이는 위 표에서 확인 가능하듯이 소문자 a의 ASCII 코드값이다.반대로 두번째 출력문에서는 숫자 97을 데이터로 입력하고 출력하는 형태를 %c로 문자형으로 받았다. 그 결과 소문자 a가 나왔고 이를 통해 ASCII 코드를 이용하면 문자를 숫자로, 숫자를 문자로 변환이 가능하다는 것을 알 수 있다.또한 숫자 연산을 통해 문자 출력 역시 가능한데, ch라는 정수형 변수에 소문자 a를 할당하고 ch는 1 증가시켰다. 그리고 ch를 문자형(%c), 정수형(%d)으로 출력시킨 결과 각각 소문자 b와 98이 나왔다. 소문자 a를 할당했지만 ch가 정수형 변수이기 때문에 소문자 a의 ASCII 코드값인 97이 저장되었고, 97이 +1 증가하고 문자형(%c)으로 출력될 때는 98의 ASCII 코드값인 소문자 b로 출력된 것이다. 이것을 이용하여 유니코드와 ASCII 코드 간의 상호변환도 가능하다. 앞서 ASCII 코드표를 활용한 것과 마찬가지로 유니코드표를 활용해 코드값에 맞춰 데이터를 변형해주면 가능하다.
한 비행기 조종사가 사하라 사막에 불시착한다. 절망에 빠져 있는 그에게 어린 왕자가 나타나 양의 그림을 그려달라고 요구한다. 어린 왕자는 우주 여행을 다니던 중 지구로 오게 된 것이었는데 우주여행을 하는 동안 다양한 사람들은 만났다. 첫 번째 별에는 혼자서 잘난 척만 하는 왕이 살고 있으며 두 번째 별에는 온통 거짓말뿐인 허풍쟁이가 살고 있었다. 세 번째 별에는 술을 싫어하는 알코올 중독자가 살고 있었고 네 번째 별에는 계속해서 돈을 세는 사람이 살고 있었다. 다섯 번째 별에는 해가 뜨고 질때 마다 등에 불을 끄고 켜는 사람이 살고 있었으며 여섯 번재 별에는 지리학자가 살고 있었다. 일곱 번째 별인 지구는 지리학자가 알려줘서 찾아오게 되었다고 왕자는 밝혔다. 지구에서 왕자는 사막 여우를 만나 친구가 되는 것의 의미를 알게되고 관계란 서로를 다른 것과는 다르다고 생각하며 인식하는 과정에서 생기게 됨을 알게된다. 이 과정에서 어린 왕자는 자신이 자기 별의 장미에게 소홀했음을 자책하고 자신의 별로 빠르게 돌아가기 위해 독이 있는 뱀에게 자신을 물어달라고 부탁하고 왕자는 죽음을 맞게 된다.어릴 적 마냥 즐거워 하며 좋아했던 책을 대학생이 되어 다시 읽자 어릴 때는 미처 알아채지 못했던 부분들이 눈에 들어왔다. 무엇보다 줄거리에서 나열했던 어린 왕자가 지구에 도착하기 전 겪은 각 행성의 사람들이 어릴 때와는 다르게 받아드려졌다. 어릴 때는 그저 개성있고 재미있는 등장인물들이라고 생각했던 캐릭터들이 20살이 된 지금의 시각으로 다시 보자 현실 세계에 존재할 법한 사람들을 작가가 비유적으로 나타냈다고 느껴졌다. 첫 번째 별에 사는 왕은 다스릴 인물이 없음에도 자신이 왕이라며 명령을 내리는 등 권력에 집착하는 인물이고, 두 번째 별에 사는 허풍쟁이는 자신의 초라한 현실을 외면하고 거짓말로 자신을 꾸미는 사람을 비유한 인물이다. 세 번째 별에 사는 술을 싫어하는 알코올 중독자는 더 나아지려는 의지 없이 자신의 상황을 비관하며 안주하는 인물을 나타내며 네 번째 별의 돈을 세는 사람은 다른 가치를 다 제쳐두고 돈에 최고 가치를 부여하는 사람들을 은유한다. 다섯 번째 별의 사람은 자아를 찾지 못하고 기계적으로 같은 일을 반복하는 사람을 나타낸다. 그들은 대부분 자신감이나 삶의 의지를 잃고 진실하지 못하게 살아 가는 인물들이 대부분이었으며 그들과 대화를 나누는 어린왕자의 순수함과 대비되어 더욱 부정적인 모습으로 비춰졌다. 또한 여우와 어린 왕자가 친해지는 것에 대한 이야기를 나누는 장면에서는 과연 내가 여우와 어린왕자가 말하는 것처럼 진실하게 사람들을 대하며 친해지는 과정을 밟고 있는 지 의문이 들었다. 현재 내가 사람들과 맺고 있는 관계는 분명 어린 왕자와 여우가 말하는, 또 어릴 적 내가 친구들과 가졌던 진정한 친해지는 과정과는 거리가 있었다. 사람들을 진심으로 대하지 않으면서 남들이 진심으로 대해주기를 바랬던 상황들을 반성하며 이 책을 읽은 것을 전환점으로 나와 관계를 맺는 사람들에게 진심으로 대해야 겠다는 다짐을 했다.이 책을 20살의 시각으로 다시 읽자 앞서 말했던 것처럼 이전에 비해 이해하는 깊이가 더 깊어졌으며 배경 지식이 더 넓어졌음을 느낄 수 있어 즐거웠다. 특히 다섯 번째 별의 인물의 이야기를 읽을 때는 일의 이유도 모른 채 반복적인 일을 계속한다는 점에서 찰리 채플린의 모던 타임즈가 생각 나기도 하는 등 배경 지식의 크기가 넓어졌음을 느낄 수 있었다. 이 책을 다시 읽으면서 느낀 것은 이전에 알지 못했던 인물들의 뒤에 숨겨진 현실의 비유적인 모습만이 아니다. 이 책이 어린 시절 읽던 것처럼 마냥 즐겁기만 한 책이 아님을 넘어 매우 어렵고 철학적이라는 느낌을 받았다. 그 증거로 20살이 된 지금의 시각에서 다시 읽어도 이해가 가지 않는 부분이 몇 가지가 남아있다. 그 중 하나는 왕자가 별에 남겨두고 온 장미에게 돌아가기 위해 독사에게 물려 죽음을 맞는 것이다. 죽음을 맞는 것이 별로 돌아가는 빠른 길이라는 책의 구절이 이해가 가지 않지만 지금 그 답을 찾기 위해 인터넷 검색을 하거나 하는 등의 노력을 하지 않기로 했다. 그런 방법을 선택하기 보다는 후에 30살이 되든 40살이 되든 지금보다 더욱 생각이 성숙해졌을 때 다시 이 책을 읽어 자연스레 그 답을 찾기로 마음 먹었다.