컴퓨터가 수표 책의 균형을 맞추거나 체스 를 하거나 문서의 맞춤법을 검사하는 것과 같은 작업을 어떻게 수행할 수 있는지 궁금한 적이 있습니까? 불과 수십 년 전만 해도 인간만이 할 수 있는 일이었다. 이제 컴퓨터는 분명히 쉽게 작업을 수행합니다. 실리콘과 전선으로 구성된 "칩"이 어떻게 인간의 생각이 필요한 것처럼 보이는 일을 할 수 있습니까?
이 질문에 대한 답을 가장 핵심적으로 이해하고 싶다면 가장 먼저 이해해야 할 것은 Boolean logic 이라는 것 입니다. 원래 1800년대 중반 George Boole이 개발한 Boolean 논리를 사용하면 예기치 않은 몇 가지 항목을 비트 및 바이트 로 매핑할 수 있습니다 . 부울 논리의 가장 큰 장점은 일단 익숙해지면 부울 논리(또는 최소한 컴퓨터 작동을 이해하는 데 필요한 부분)가 엄청나게 간단하다는 것입니다. 이 기사에서는 먼저 간단한 논리 "게이트"에 대해 논의한 다음 이를 유용한 것으로 결합하는 방법을 살펴보겠습니다.
- 단순 게이트
- 단순 가산기
- 전체 가산기
- 플립플롭
- JK 플립플롭
- 게이트 구현
단순 게이트
세는 방법에 따라 배워야 할 3, 5 또는 7개의 간단한 게이트가 있습니다(이유는 잠시 후 알게 될 것입니다). 이 간단한 게이트를 사용하여 상상할 수 있는 모든 디지털 구성 요소를 구현하는 조합을 만들 수 있습니다. 이 게이트는 여기에서 약간 건조하고 믿을 수 없을 정도로 단순해 보이지만 다음 섹션에서 훨씬 더 영감을 주는 몇 가지 흥미로운 조합을 볼 것입니다. 아직 수행하지 않은 경우 계속하기 전에 비트 및 바이트 작동 방식을 읽는 것이 도움이 될 것입니다.
NOT 게이트
가장 단순한 게이트를 "인버터" 또는 NOT 게이트라고 합니다. 1비트를 입력으로 사용하고 그 반대를 출력으로 생성합니다. 논리 테이블은 다음과 같습니다.
질문
0 1
1 0
NOT 게이트에는 A 라는 입력 하나 와 Q 라는 출력 하나 가 있습니다("O"를 사용하면 0과 쉽게 혼동할 수 있기 때문에 "Q"가 출력에 사용됨). 이 표는 게이트가 어떻게 작동하는지 보여줍니다. A에 0을 적용하면 Q가 1을 생성합니다. A에 1을 적용하면 Q가 0을 생성합니다. 단순.
AND 게이트
AND 게이트는 두 개의 입력 A와 B에 대해 논리적 "and" 연산을 수행합니다.
바베큐
0 0 0
0 1 0
1 0 0
1 1 1
AND 게이트 뒤에 있는 아이디어는 "A AND B가 둘 다 1이면 Q도 1이어야 합니다."입니다. 게이트에 대한 논리 테이블에서 그 동작을 볼 수 있습니다. 다음과 같이 이 테이블을 행별로 읽습니다.
바베큐
0 0 0 A가 0이고 B가 0이면 Q는 0입니다.
0 1 0 A가 0이고 B가 1이면 Q는 0입니다.
1 0 0 A가 1이고 B가 0이면 Q는 0 입니다.
1 1 1 A가 1이고 B가 1이면 Q는 1입니다.
OR 게이트
다음 게이트는 OR 게이트입니다. "A가 1이면 그 기본 개념은,이다 또는 B가 하나 (또는 모두 1이다), 다음 Q는 1입니다"
바베큐
0 0 0
0 1 1
1 0 1
1 1 1
그것들은 세 가지 기본 게이트입니다(그것은 그것들을 계산하는 한 가지 방법입니다). NAND 와 NOR 게이트 라는 다른 두 가지도 인식하는 것이 일반적 입니다. 이 두 게이트는 단순히 AND 또는 OR 게이트와 NOT 게이트의 조합입니다. 이 두 게이트를 포함하면 개수가 5로 늘어납니다. 다음은 NAND 및 NOR 게이트의 기본 작동입니다. 단순히 AND 및 OR 게이트의 반전임을 알 수 있습니다.
NOR 게이트
바베큐
0 0 1
0 1 0
1 0 0
1 1 0
낸드 게이트
바베큐
0 0 1
0 1 1
1 0 1
1 1 0
때때로 목록에 추가되는 마지막 두 게이트는 각각 "배타적 또는" 및 "배타적 노르" 게이트라고도 하는 XOR 및 XNOR 게이트입니다. 다음은 테이블입니다.
XOR 게이트
바베큐
0 0 0
0 1 1
1 0 1
1 1 0
XNOR 게이트
바베큐
0 0 1
0 1 0
1 0 0
1 1 1
XOR 게이트 뒤에 있는 아이디어는 "A OR B 중 하나 가 1이지만 둘 모두가 아닌 경우 Q는 1입니다."입니다. 게이트 목록에 XOR이 포함되지 않는 이유는 원래 나열된 3개의 게이트를 사용하여 쉽게 구현할 수 있기 때문입니다.
A와 B에 대해 네 가지 다른 패턴을 모두 시도하고 회로를 따라 추적하면 Q가 XOR 게이트처럼 동작한다는 것을 알 수 있습니다. XOR 게이트에 대해 잘 알려진 기호가 있으므로 일반적으로 XOR을 "표준 게이트"로 생각하고 회로도에서 AND 및 OR과 같은 방식으로 사용하는 것이 더 쉽습니다.
단순 가산기
비트 및 바이트 에 대한 기사에서 이진 덧셈 에 대해 배웠습니다 . 이 섹션에서는 이전 섹션에서 설명한 게이트를 사용하여 이진 덧셈이 가능한 회로를 만드는 방법을 배웁니다.
단일 비트 가산기 부터 시작하겠습니다 . 단일 비트를 함께 추가하고 답을 얻어야 하는 프로젝트가 있다고 가정해 보겠습니다. 이를 위한 회로 설계를 시작하는 방법은 먼저 모든 논리적 조합을 살펴보는 것입니다. 다음 네 가지 합계를 보면 알 수 있습니다.
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
1 + 1이 될 때까지는 괜찮아 보입니다. 그런 경우에는 걱정할 성가신 캐리 비트 가 있습니다. 운반에 신경 쓰지 않는다면(결국 이것은 1비트 덧셈 문제이기 때문에) XOR 게이트로 이 문제를 해결할 수 있음을 알 수 있습니다. 하지만 관심이 있다면 다음 과 같이 항상 2비트의 출력을 포함하도록 방정식을 다시 작성할 수 있습니다 .
0 + 0 = 00
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10
이 방정식에서 논리 테이블을 구성할 수 있습니다.
캐리아웃이 있는 1비트 가산기
BQ CO
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
이 표를 보면 XOR 게이트로 Q를 구현하고 AND 게이트로 CO(carry-out)를 구현할 수 있음을 알 수 있습니다. 단순한.
두 개의 8비트 바이트를 함께 추가하려면 어떻게 합니까? 이것은 약간 더 어려워집니다. 가장 쉬운 솔루션은 문제를 재사용 가능한 구성 요소 로 모듈화 한 다음 구성 요소를 복제하는 것입니다. 이 경우 전체 이진 가산기 라는 하나의 구성 요소만 생성하면 됩니다 .
전가산기와 이전 가산기의 차이점은 전가산기가 A 및 B 입력과 캐리인 (CI) 입력을 허용한다는 것 입니다. 전체 가산기가 있으면 그 중 8개를 함께 묶어 바이트 전체 가산기를 만들고 캐리 비트를 한 가산기에서 다음 가산기로 캐스케이드할 수 있습니다.
다음 섹션에서는 전가산기가 회로에 어떻게 구현되는지 살펴보겠습니다.
전체 가산기
전가산기의 논리 테이블은 이전에 사용한 테이블보다 약간 더 복잡합니다. 이제 입력 비트 가 3개 이기 때문 입니다. 다음과 같습니다.
캐리인 및 캐리아웃이 있는 1비트 전가산기
CI A BQ CO
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
이 테이블을 구현할 수 있는 다양한 방법이 있습니다. 여기에서는 이해하기 쉬운 이점이 있는 한 가지 방법을 제시하려고 합니다. Q 비트를 보면 상위 4비트는 A와 B에 대해 XOR 게이트처럼 동작하고 하위 4비트는 A와 B에 대해 XNOR 게이트처럼 동작하는 것을 볼 수 있습니다. 마찬가지로, CO의 상위 4비트는 A와 B에 대해 AND 게이트처럼 작동하고 하위 4비트는 OR 게이트처럼 작동합니다. 이러한 사실을 고려하여 다음 회로는 전가산기를 구현합니다.
이것은 확실히 전가산기를 구현하는 가장 효율적인 방법은 아니지만 이 방법을 사용하여 논리를 통해 이해하고 추적하는 것은 매우 쉽습니다. 그렇게 하려는 경우 더 적은 수의 게이트로 이 논리를 구현하기 위해 무엇을 할 수 있는지 확인하십시오.
이제 "전가산기"라는 기능이 있습니다. 그런 다음 컴퓨터 엔지니어가 하는 일은 구성 요소의 세부 사항에 대해 걱정할 필요가 없도록 "블랙박스"입니다. 전가산기 의 블랙박스 는 다음과 같습니다.
이 블랙박스를 사용하면 이제 4비트 전가산기를 쉽게 그릴 수 있습니다 .
이 다이어그램에서 각 비트의 캐리아웃은 다음 비트 오버의 캐리인으로 직접 공급됩니다. 0은 초기 캐리인 비트에 고정 배선되어 있습니다. A 및 B 라인에 2개의 4비트 숫자를 입력하면 Q 라인에 4비트 합계와 최종 캐리아웃을 위한 1비트가 추가됩니다. 이 체인은 원하는 경우 8, 16 또는 32비트를 통해 원하는 만큼 확장할 수 있습니다.
우리가 방금 만든 4비트 가산기를 리플 캐리 가산기 라고 합니다 . 캐리 비트가 한 가산기에서 다음 가산기로 "파급"되기 때문에 그 이름을 얻습니다. 이 구현은 단순성의 장점이 있지만 속도 문제의 단점이 있습니다. 실제 회로에서 게이트는 상태를 전환하는 데 시간이 걸립니다(시간은 나노초 정도이지만 고속 컴퓨터에서는 나노초가 중요합니다). 따라서 32비트 또는 64비트 리플 캐리 가산기는 캐리 리플로 인해 최종 합계에 정착하는 데 100~200나노초가 걸릴 수 있습니다. 이러한 이유로 엔지니어는 carry-lookahead 가산기 라는 고급 가산기를 만들었습니다 . carry-lookahead를 구현하는 데 필요한 게이트의 수는 많지만 가산기의 안정화 시간이 훨씬 좋습니다.
플립플롭
부울 게이트로 할 수 있는 더 흥미로운 일 중 하나는 부울 게이트로 메모리 를 생성 하는 것입니다. 게이트를 올바르게 배열하면 입력 값을 기억합니다. 이 간단한 개념은 컴퓨터에서 RAM (Random Access Memory) 의 기초이며 , 또한 다양한 다른 유용한 회로를 만드는 것을 가능하게 합니다.
기억은 피드백 이라는 개념에 의존 합니다 . 즉, 게이트의 출력이 입력으로 피드백됩니다. 두 개의 인버터를 사용하는 가장 간단한 피드백 회로가 위에 나와 있습니다.
피드백 경로를 따라가면 Q가 1이면 항상 1임을 알 수 있습니다. 0이 발생하면 항상 0입니다. 우리가 만든 회로를 제어할 수 있다는 것이 좋기 때문에, 이것은 별로 쓸모가 없지만 피드백이 어떻게 작동하는지 볼 수 있게 해줍니다.
"실제" 회로에서는 이러한 종류의 간단한 인버터 피드백 접근 방식을 실제로 사용할 수 있습니다. 두 개의 NAND 게이트를 사용 하는 보다 유용한 피드백 회로는 다음과 같습니다.
이 회로에는 두 개의 입력( R 및 S )과 두 개의 출력( Q 및 Q' )이 있습니다. 피드백 때문에 논리 테이블은 이전에 본 것과 비교하여 약간 특이합니다.
R S Q Q'
0 0 불법
0 1 1 0
1 0 0 1
1 1 기억
논리 테이블이 보여주는 것은 다음과 같습니다.
- R과 S가 서로 반대인 경우 Q는 S를 따르고 Q'는 Q의 역입니다.
- R과 S가 동시에 1로 전환되면 회로 는 이전에 R과 S에 표시된 내용을 기억 합니다.
웃긴 불법 상태도 있습니다. 이 상태에서 R과 S는 모두 0으로 이동하며 메모리 의미에서 값이 없습니다. 잘못된 상태로 인해 일반적으로 다음과 같이 이를 방지하기 위해 입력 측에 약간의 조건화 논리 를 추가합니다 .
이 회로에는 두 개의 입력(D와 E)이 있습니다. D 는 "데이터", E 는 "활성화 "로 생각할 수 있습니다 . E가 1이면 Q가 D를 따릅니다. 그러나 E가 0으로 변경되면 Q는 D에서 마지막으로 본 것을 기억합니다. 이러한 방식으로 동작하는 회로를 일반적으로 플립플롭 이라고 합니다 .
다음 섹션에서는 JK 플립플롭을 살펴보겠습니다.
JK 플립플롭
플립플롭의 매우 일반적인 형태는 JK 플립플롭 입니다. 역사적으로 "JK"라는 이름이 어디에서 왔는지는 분명하지 않지만 일반적으로 다음과 같이 블랙박스에 표시됩니다.
이 다이어그램에서 P 는 "Preset", C 는 "Clear", Clk 는 "Clock"을 나타냅니다.
피씨 클락 J K Q Q'
1 1 1 대 0 1 0 1 0
1 1 1 대 0 0 1 0 1
1 1 1:0 1 1 토글
1 0 x x 0 1
0 1 x x 1 0
다음은 표에 나와 있는 내용입니다. 먼저 Preset 및 Clear가 J, K 및 Clk를 완전히 무시합니다. 따라서 Preset이 0이 되면 Q는 1이 됩니다. Clear가 0이 되면 J, K, Clk가 무엇을 하든 Q가 0이 됩니다. 단, Preset과 Clear가 모두 1이면 J, K, Clk가 동작할 수 있다. 1 대 0 시계가 0에서 1로 변경 될 때, J 및 K의 값이 기억되어 있다고 표기 수단들은 정반대 인 경우. 시계 의 낮은 에지 (1에서 0으로의 전환)에서 J와 K가 저장됩니다. 그러나 J와 K가 모두 로우가는 에지에서 1이면 Q는 단순히 토글 됩니다. 즉, Q는 현재 상태에서 반대 상태로 변경됩니다.
당신은 지금 스스로에게 "그게 무슨 소용이 있단 말인가?"라고 자문할 수도 있습니다. "에지 트리거링"의 개념이 매우 유용하다는 것이 밝혀졌습니다. JK 플립플롭이 1에서 0으로의 전환 시 JK 입력만 "래치"한다는 사실은 메모리 장치로서 훨씬 더 유용합니다. JK 플립플롭은 카운터 ( 디지털 시계를 만들 때 광범위하게 사용됨) 에서도 매우 유용합니다 . 다음은 JK 플립플롭을 사용 하는 4비트 카운터 의 예입니다 .
이 회로의 출력은 A, B, C 및 D이며 4비트 이진수를 나타냅니다. 가장 왼쪽 플립플롭의 클록 입력에는 1에서 0으로, 다시 1로 반복적으로 변경되는 신호( 발진 신호 ) 가 들어옵니다 . 카운터는 이 신호에서 보는 낮은 에지를 계산합니다. 즉, 들어오는 신호가 1에서 0으로 변경될 때마다 A, B, C 및 D로 표시되는 4비트 숫자가 1씩 증가합니다. 따라서 카운트는 0에서 15로 이동한 다음 다시 0으로 순환합니다. 이 카운터에 원하는 만큼 비트를 추가하고 원하는 만큼 계산할 수 있습니다. 예를 들어 문에 마그네틱 스위치를 놓으면 카운터가 문이 열리고 닫힌 횟수를 계산합니다. 도로에 광학 센서를 설치하면 카운터가 지나가는 자동차의 수를 계산할 수 있습니다.
JK 플립플롭의 또 다른 용도는 여기에 표시된 것처럼 edge-triggered 래치 를 만드는 것입니다.
이 배열에서 D의 값은 클록 에지가 로우에서 하이로 갈 때 "래치"됩니다. 래치 는 컴퓨터의 중앙 처리 장치 (CPU) 및 주변 장치와 같은 설계에서 매우 중요 합니다.
게이트 구현
이전 섹션에서 우리는 매우 간단한 부울 게이트를 사용하여 가산기, 카운터, 래치 등을 구현할 수 있음을 보았습니다. 얼마 전까지만 해도 두 개의 숫자를 더하는 것과 같은 일을 할 수 있었던 것은 인간밖에 없었기 때문입니다. 약간의 작업으로 뺄셈, 곱셈, 나눗셈을 구현하는 부울 회로를 설계하는 것은 어렵지 않습니다... 우리가 포켓 계산기에서 그리 멀지 않은 것을 볼 수 있습니다. 거기 에서 컴퓨터에 사용되는 본격적인 CPU 로의 도약은 그리 멀지 않습니다 .
그렇다면 이러한 게이트를 실생활에서 어떻게 구현할 수 있을까요? Boole씨는 종이에 그것들을 생각해 냈고 종이에 그것들은 멋지게 보입니다. 그러나 이를 사용하려면 게이트가 논리를 능동적으로 수행할 수 있도록 물리적 현실에서 구현해야 합니다. 한 번 도약하면 실제 계산 장치를 만들기 위한 길을 걷기 시작했습니다.
부울 논리의 물리적 구현을 이해하는 가장 쉬운 방법은 릴레이 를 사용하는 것 입니다. 사실 이것이 최초의 컴퓨터가 구현된 방식입니다. 더 이상 릴레이가 있는 컴퓨터를 구현하는 사람은 없습니다. 오늘날 사람들은 실리콘 칩에 에칭된 초미세 트랜지스터를 사용합니다. 이 트랜지스터는 믿을 수 없을 정도로 작고 빠르며 릴레이에 비해 전력을 거의 소모하지 않습니다. 그러나 릴레이는 매우 이해하기 쉽고 부울 논리를 매우 간단하게 구현할 수 있습니다. 그 단순성 때문에 "종이상의 게이트"에서 "물리적 현실에서 구현된 활성 게이트"로의 매핑이 가능하고 간단하다는 것을 알 수 있습니다. 트랜지스터로 동일한 매핑을 수행하는 것도 간단합니다.
인버터부터 시작하겠습니다. 릴레이로 NOT 게이트를 구현하는 것은 쉽습니다. 우리가 할 일은 전압을 사용하여 비트 상태를 나타내는 것입니다. 바이너리 1을 6볼트로 정의하고 바이너리 0을 0볼트(접지)로 정의합니다. 그런 다음 6볼트 배터리 를 사용하여 회로에 전원을 공급합니다. 따라서 NOT 게이트는 다음과 같이 보일 것입니다.
[이 수치가 이해가 되지 않는다면 릴레이 작동 방식 을 읽어보십시오 .]
이 회로에서 A에 0볼트를 적용하면 Q에서 6볼트가 나오는 것을 볼 수 있습니다. A에 6볼트를 인가하면 Q에서 0볼트가 나옵니다. 릴레이로 인버터를 구현하는 것은 매우 쉽습니다!
두 개의 릴레이로 AND 게이트를 구현하는 것도 마찬가지로 쉽습니다.
여기서 A와 B에 6V를 적용하면 Q가 6V가 되는 것을 볼 수 있습니다. 그렇지 않으면 Q는 0볼트를 갖습니다. 이것이 바로 우리가 AND 게이트에서 원하는 동작입니다. OR 게이트는 훨씬 더 간단합니다. A와 B에 대해 두 개의 와이어를 연결하여 OR을 생성하기만 하면 됩니다. 두 개의 릴레이를 병렬로 사용하고 원한다면 그보다 더 화려해질 수 있습니다.
이 토론에서 릴레이에서 NOT, AND 및 OR의 세 가지 기본 게이트를 만들 수 있음을 알 수 있습니다. 그런 다음 위에 표시된 논리 다이어그램을 사용하여 물리적 게이트를 함께 연결하여 물리적 8비트 리플 캐리 가산기를 생성할 수 있습니다. 간단한 스위치를 사용하여 A 및 B 입력을 가산기에 적용하고 8개의 Q 라인 모두를 전구에 연결하면 두 개의 숫자를 함께 더하고 조명의 결과를 읽을 수 있습니다("light on" = 1, " 꺼짐" = 0).
간단한 게이트 형태의 부울 논리는 매우 간단합니다. 간단한 게이트에서 더하기와 같은 더 복잡한 기능을 만들 수 있습니다. 게이트를 물리적으로 구현하는 것은 가능하고 쉽습니다. 이 세 가지 사실에서 여러분은 디지털 혁명의 핵심을 알 수 있으며 핵심적으로 컴퓨터가 작동하는 방식을 이해하고 있습니다.