1장 : 디지털 논리회로
1.1 디지털 컴퓨터
디지털(digital)이란 용어는 컴퓨터 내부의 정보가 제한된 수의 불연속적인 값으로 표시된다는 것을 의미함.
초기의 전자 컴퓨터들은 십진수를 사용하여 산술 계산을 수행했는데, 여기서부터 디지털 컴퓨터라는 용어가 생겨났다.
Insert, 전자 부품의 물리적인 제약과 인간 논리가 이진적이라는 이유 때문에 디지털 시스템들은 오직 두 개의 값만 가지도록 더욱 제한되었고, 이것을 이진수(binary)라고 불렀다.
디지털 컴퓨터는 0과 1의 두 개의 숫자만을 사용하는 이진수 시스템이다.
하나의 이진 숫자를 비트(bit)라고 부르며, 디지털 컴퓨터에서의 정보는 비트들의 그룹으로 표현된다. 다양한 코딩 기법을 통해 비트 그룹은 이진수뿐만 아니라 십진수나 영문자 등을 표현하며, 또한 컴퓨터에서의 완전한 명령어 집합을 나타낼 수도 있다.
컴퓨터는 주로 하드웨어와 소프트웨어의 두 부분으로 나뉜다. 하드웨어는 컴퓨터의 모든 전자 부품과 주변 장치를 구성하는 전자기적 부품을 말하며, 소프트웨어는 컴퓨터의 다양한 정보 처리 작업을 수행하는 명령어와 데이터들로 구성된다. 컴퓨터에서 연속된 명령어들을 프로그램(program is a set of instruction)이라고 하며, 프로그램에 의해 조작되는 데이터들은 데이터베이스를 형성하기도 한다.
시스템적인 입장에서 컴퓨터는 하드웨어와 시스템 소프트웨어로 구성되는데, 시스템 소프트웨어는 운영체제(operating system)라 하여 컴퓨터 시스템을 효율적으로 사용하기 위한 목적을 가진 프로그램 집합을 말한다.
시스템 소프트웨어는 특정 목적을 위하여 작성된 사용자 응용 프로그램과는 구별이 된다. 시스템 소프트웨어는 전체 컴퓨터 시스템에 있어서 없어서는 안 될 부분으로 사용자 요구와 컴퓨터 하드웨어 기능 간의 차이점을 보상해준다.
컴퓨터 하드웨어는 중앙 처리 장치(Central Processing Unit), 컴퓨터 기억 장치(임의접근 기억 장치, Random-access memory), 그리고 입출력 프로세서(Input-output processor)로 구성되어있다.
중앙 처리 장치는 데이터를 조작하는 산술 및 논리 연산 부분, 데이터를 저장하는 여러 개의 레지스터, 명령어를 가져와 수행하는 제어 회로 등이 들어있다(Control Unit, Arithmetic/Logic Unit).
컴퓨터 기억 장치는 명령어와 데이터를 저장하고 있는데, CPU가 이진 정보를 입력하거나 가져올 때 언제나 일정한 시간이 소요되기 때문에 임의접근 기억장치(RAM)라고 부른다.
입출력 프로세서(IOP)는 컴퓨터와 외부세계와의 통신과 데이터 전송을 제어하는 부분이다.
컴퓨터 하드웨어는 연구자의 관심에 따라 컴퓨터 조직(organization), 컴퓨터 설계(design), 컴퓨터 구조(architecture) 등으로 관점을 달리할 수 있다.
컴퓨터 조직에서는 하드웨어 구성품들의 동작 방식과 이들의 연결 방식에 관심을 두는 것으로, 이미 존재하는 각 구성품들이 제대로 동작하기 위한 조직적인 구조를 연구한다.
컴퓨터 설계는 컴퓨터 하드웨어를 설계하는 것으로, 제시된 컴퓨터의 사양에 따라 적절한 하드웨어를 선택하고 그들 간의 연결 방식을 결정하여 시스템을 개발한다. 하드웨어의 입장에서 이를 컴퓨터 구현(implementation)이라고도 한다.
컴퓨터 구조에서는 사용자의 입장에서 컴퓨터의 구조나 동작에 관심을 두고서, 정보의 형식이나 명령어 집합, 메모리 주소 기법 등을 연구한다. 컴퓨터의 구조적 설계는 프로세서나 메모리 같은 다양한 기능적 모듈의 사양을 가지고 컴퓨터 시스템을 설계하는 것을 말한다.
1.2 논리 게이트(logic gate)
디지털 컴퓨터에서 이진 정보는 물리량인 전압 신호를 이용하여 0과 1로 표현된다. 예를 들어 어떤 컴퓨터에서는 3 v의 신호를 1로, 0.5 v의 신호를 0으로 나타낸다.
이진 정보의 처리는 게이트(gate)라 불리는 논리 회로에서 행해진다. 게이트는 입력 논리의 필요조건을 만족할 때 1또는 0의 신호를 만드는 하드웨어의 블럭이다. 각 게이트는 기호가 다르고 그것의 동작은 대수 함수의 방법으로 표시된다. 입출력 관계는 진리표라는 표의 형식으로 표시된다.
1.3 부울 대수
부울 대수는 이진 변수와 논리 동작을 취급하는 대수이다. 변수는 A, B, x, y와 같이 문자로 표시한다. 세 개의 기본적인 논리 동작은 AND, OR 및 보수이다. 변수의 값이 주어질 때 부울 함수는 1이거나 0이 된다.
부울 대수의 목적은 디지털 회로의 해석과 설계를 쉽게 하는 데 있다. 또한 그것은 다음 사항을 수행하는 데 편리한 도구이다.
1. 변수 사이의 진리표 관계를 대수 형식으로 표시
2. 논리도의 입출력 관계를 대수 형식으로 표시
3. 같은 기능을 가진 더 간단한 회로를 발견
De Morgan 정리는 NOR와 NAND를 취급하는 데 매우 중요하다.
(x+y+z)' = x'y'z', (xyz)' = x' + y' + z'
De Morgan 정리는 수식에서 모든 OR 연산은 AND로, 모든 AND 연산은 OR로 바꾸어주고, 각 변수를 보수화하면 간단히 적용된다.
1.4 맵의 간소화
진리표에서 변수의 각 조합을 민텀(minterm)이라 한다. N개의 변수가 있으면 2^n 개의 민텀이 있게 된다.
맵은 여러 개의 사각형의 구역으로 이루어지고, 각 사각형의 구역은 각각의 민텀을 표시하게 그려진다. 함수가 1이 될 때, 즉 논리 표현식의 출력이 1이 될 때 해당 민텀의 구역에 1을 넣고, 출력이 0이 될 때에는 해당 민텀의 구역에 0을 넣거나 아무것도 넣지 않는다. 보통 0을 넣지 않고 공백으로 놓아둔다.
다음 그림은 두 개, 세 개 및 네 개의 변수를 갖는 함수의 맵을 표시한 것이다. 여기서 구역 안의 숫자는 진리표의 위에서부터 몇 번째의 민텀인가를 보이는 숫자이다.
예시. 다음 부울 함수 F(A, B, C) = Σ(0, 2, 4, 5, 6)을 간소화하여라.
양쪽 옆의 네 개의 민텀을 묶으면 C', 밑 부분의 두 개의 1을 묶으면 AB'. 따라서 F = C' + AB'
예시. 다음 부울 수 F(A, B, C, D) = Σ(0, 1, 2, 5, 8, 9, 10)을 논리합의 논리곱, 그리고 논리곱의 논리합 형식으로 간소화 하라.
1을 묶어 간소화하면 F = B'D + B'C' + A'C'D(논리곱의 논리합)
0을 묶어 간소화하면 F' = AB + CD + BD' => F = (A' + B')(C' + D')(B' + D)
Don't Care 조건
맵의 민텀 구역에는 1이나 0이 들어간다. 민텀이 1이 되거나 0이 되거나에 관계없이 같은 함수의 값을 갖는 경우가 있다. 이러한 don't care를 맵에서는 X로 집어넣고 간소화시키기 위하여 묶는 데 편리하도록 이를 1로 보거나 0으로 본다. 묶는 데 유리한 방향으로 생각한다.
1.5 조합 회로
조합 회로는 입력과 출력을 가진 논리 게이트의 집합으로 출력의 값은 입력의 0과 1들의 조합의 함수이다. 조합 회로에 상반되는 순차 회로는 게이트 뿐만 아니라 플립플롭과 같은 기억 회로를 포함한다. 일반적인 조합 회로의 블럭도는 다음과 같다.
조합 회로 설계는 말로 된 문제로부터 논리 회로도로 끝난다. 이 설계 절차는 다음과 같다.
1. 문제가 제시된다.
2. 입력과 출력 변수에 문자 기호를 붙인다.
3. 입력과 출력 사이의 관계를 정의하는 진리표를 유도한다.
4. 각 출력에 대한 간소화된 부울 함수를 얻는다.
5. 논리도를 그린다.
반가산기(Half Adder)
반가산기는 비트 두 개를 산술적으로 가산하는 조합 회로이다. 반가산기를 통해 비트 두 개와 밑의 자리로부터 올라오는 캐리(carry)까지 고려하여 비트 세 개를 가산하는 조합 회로인 전가산기를 구성할 수 있다.
전가산기
전가산기는 세 개의 입력 비트의 합을 구하는 회로이다.
X Y Z C S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
1.6 플립플롭
모든 디지털 시스템들이 조합 회로를 가지고 있긴 하나, 대부분의 경우에 순차 회로로 구현되는 저장요소를 필요로 한다. 대부분의 순차 회로는 불연속적인 특정 시각에만 저장요소에 영향을 주는 동기형(synchronous) 회로이다. 동기화는 클럭 펄스(clock pulse)에 의하여 이루어진다. 이와 같은 동기형 순차 회로는 타이밍이 쉽게 깨질 수 있는 불완전성을 가지고 있다.
플립플롭은 한 비트의 정보를 저장하는 이진 셀(cell)로서, 정상 출력과 보수화된 출력을 가지고 있다. 플립플롭은 입력 펄스가 상태 변환을 일으키기 전까지 이진 상태를 그대로 유지한다.
SR 플립플롭
S(set), R(reset), C(clock)로 이름 붙여진 세 개의 입력과 하나의 출력 Q를 가지고 있다. C에 있는 화살표 기호는 동적입력(dynamic input)을 나타내는 것으로, 플립플롭이 입력 클럭 신호의 상승 변이에서 동작함을 의미한다.
SR 플립플롭은 클럭 입력 C에 신호가 들어오지 않을 경우, S나 R 입력의 값에 관계없이 출력은 변하지 않는다. S와 R이 모두 1인 경우에는 회로 내부의 시간 지연에 따라 출력값을 예상할 수 없다.
D 플립플롭
D(data) 플립플롭은 SR 플립플롭의 S와 R 입력을 인버터로 연결하고 D라는 기호를 붙인 것으로, D 입력이 클럭 변이(0에서 1) 동안 출력에 전달된다. 즉 D = 1일 때 출력은 1로, D = 0일 때 출력은 0으로 변한다.
D 플립플롭은 하나의 입력만 가지는 장점이 있는 반면에 불변조건[ Q(t+1) = Q(t) ]이 없기 때문에, 불변조건을 만들기 위해서는 클럭을 끊는다든지 출력을 입력으로 되돌려 주어야 한다.
JK 플립플롭
SR 플립플롭에서 S=R=1인 경우 다음 상태가 비결정적이라는 단점을 보완한 플립플롭이다.
T 플립플롭
T(toggle) 플립플롭은 JK 플립플롭에서 입력 J와 K를 하나로 묶어 T라고 표시한다. 따라서 T 플립플롭은 두 개의 상태만 갖게 되는데, T = 0인 경우 상태의 변화가 없고, T = 1인 경우 상태는 보수로 된다.
모서리-변이형 플립플롭
상태 변경을 클럭 펄스의 변이 동안 동기화하는 것을 모서리-변이형(edge-ri-ggered) 플립플롭이라고 한다. 이러한 형태의 플립플롭에서는 입력 펄스가 일정한 임계값을 넘어설 때 입력값을 고정시켜 클럭 펄스가 다시 0이 되거나 다음 펄스가 올 때까지 그 값을 유지한다. 모서리-변이형 플립플롭에서는 입력 펄스의 상승 변이 또는 하강 변이에서 반응하는 것들이 있다.
클럭의 변이가 효과를 미치기 위해서는 입력 D의 값이 일정하게 유지되어야 하는 최소 시간인 셋업 시간(set up time)과 클럭 변이 후 D의 값이 일정하게 유지되어야 하는 최소 시간인 셋업 시간(set up time)과 클럭 변이 후 D의 값이 변화되지 않아야 하는 홀드 시간(hold time)을 필요로 한다.
다른 형태로는 주종(master-slave) 플립플롭이 있다. 이것은 클럭이 1일 때 반응하는 주(master) 플립플롭과 클럭이 0일 때 반응하는 종(slave) 플립플롭으로 구성된다. 결국 클럭이 1에서 0으로 될 때 입력이 출력으로 전달되는 효과를 가지지만, 일반적으로 이것보다는 모서리-변이형 플립플롭을 더 많이 사용하는 추세이다.
실제 회로에서 사용되는 플립플롭에는 클럭과는 관계없이 출력값을 비동깆거으로 0이나 1로 만드는 프리셋(preset) 또는 클리어(clear) 입력을 가지고 있다. 이것들은 플립플롭의 초기값을 설정하는 데 주로 사용된다.
여기표
플립플롭에서 현재 상태와 다음 상태를 알 때, 플립플롭에 어떤 입력을 넣어야 하는가를 표로 만든 것을 여기(excitation)표라 한다.
1.7 순차 회로
순차 회론느 플립플롭과 게이트를 서로 연결한 것이다. 게이트들로만 된 회로는 조합 회로이지만, 플립플롭이 포함되면 순차 회로가 된다.
다음은 클럭 펄스에 동기되는 클럭 동기형 순차 회로의 블럭도이다. 클럭 펄스에 따라 플립플롭의 출력이 조합 회로에 입력된다. 순차 회로의 외부 출력은 외부 입력과 플립플롭의 현상태의 함수로 표시된다.
플립플롭 입력식
플립플롭의 입력을 만들어내는 조합 회로 부분은 플립플롭 입력식이라고 하는 부울식의 집합으로 나타낸다.
예를 들어 아래 그림(그림 1-25)와 같은 회로가 있을 때 입력을 다음 부울식의 집합으로 나타낼 수 있다.
D_A = Ax + Bx, D_B = A'x
조합 회로 자체의 출력도 부울식으로 나타낼 수 있는데, 입력 변수와 플립플롭 출력들 사이의 관계에 의해 부울식, y = Ax' +Bx'과 같이 쓸 수 있다.
상태표
순차 회로의 특성은 입력, 출력 및 플립플롭의 상태로부터 특성지어진다. 출력과 다음 상태는 모두 입력과 현상태의 함수이다. 이 사이의 관계를 표로 나타낸 것을 상태표라고 한다. 동기 순차 회로에서는 현상태에서 다음 상태로의 전이는 클럭 펄스에 의하여 생긴다.
일반적으로 m개의 플립플롭, n개의 입력 변수, p개의 출력 변수를 갖고 있는 순차회로는 현상태에 m개의 열, 입력에 n개의 열, 다음 상태에 m개의 열, 출력에 p개의 행을 갖는 상태표가 된다. 또한 행에는 2^(m+n)개의 조합이 나오게 된다. 다음 상태와 출력열은 현상태와 입력 변수의 함수이고 회로로부터 직접 구해진다.
상태도
상태표에 나타난 정보를 그림으로 표시한 것이 상태도이다. 이 상태도에서 상태는 원으로서 표시하고, 상태 사이의 전이는 원 사이를 연결하는 직선으로 표시한다. /의 왼쪽에는 입력, 오른쪽에는 출력값을 써넣는다.
예를 들어 그림 1-26, 순차 회로에 대한 상태도에서 상태 00으로 부터 01로 가는 직선 위에 표시된 1/0은 입력이 1이고 출력이 0일 때 순차 회로가 현상태 00에 있음을 의미한다. 다음 클럭 펄스가 들어오면 회로는 다음 상태 01로 간다.
원에서 나온 선이 자신의 원으로 다시 들어가는 것은 상태의 변화가 일어나지 않음을 의미한다.
상태표와 상태도는 표현방법만 다르지 어떠한 다른 차이는 없다. 상태표는 회로도로부터 쉽게 유도할 수 있고, 상태도는 상태표로부터 바로 얻게 된다. 상태도는 순차 회로의 동작을 인간에게 쉽게 보여주는 도구로 사용된다.
설계 예
순차 회로를 설계하는 과정을 이진 카운터를 설계하는 과정을 통해 설명한다. 처음에 회로 시방서를 보고 상태도를 그리고, 다음에 상태표를 구한 후에 회로도를 얻을 수 있다.
이진 카운터의 경우 외부 입력 x = 1일 때 이진 상태 00, 01, 10, 11은 각각 01, 10, 11, 00으로 변한다. x = 0인 경우 회로의 상태는 변하지 않는다. 즉 입력 x는 제어 변수이다.
각 상태는 2비트로 되어 있으므로 두 개의 플립플롭이 필요하다.
순차 회로의 외부 출력이 없어 입력만 표시되어 있다. 플립플롭의 상태가 회로의 출력으로 된다고 생각한다. 두 개의 플립플롭을 각각 A, B라고 할 수 있다.
플립플롭의 다음 상태는 현재의 상태와 입력의 함수이다. 상태도로부터 상태표를 구하면 다음과 같이 된다.
순차 회로의 여기표는 상태표의 연장이다.
플립플롭의 입력조건은 플립플롭의 종류에 따라 달라지게 된다. 여기서는 JK 플립플롭을 사용해서 설계한다.
J_A, K_A, J_B, K_B는 A, B, x에 따라 결정되어지며, 이를 간소화하기 위하여 맵방법을 사용할 수 있다.
설계 절차
순차 회로의 설계는 앞의 예에서 말한 절차를 따른다. 처음에 회로의 특성으로부터 상태도를 그린다. 상태도의 원 안의 상태의 비트수로부터 필요한 플립플롭의 개수를 결정한다. 또한 회로의 입력 수를 정한다. M개의 플립플롭을 쓰고, n개의 입력이 있으면 2^(m+n)개의 조합이 상태표에 나오게 된다. 이러한 상태표를 작성하고, 확장하여 플립플롭의 여기표를 만든다. 다음에 Karnaugh 맵을 이용하여 간소화된 플립플롭의 입력조건을 구한 후에 회로를 구성하면 된다.
플립플롭의 출력은 순차 회로의 출력이 되는 경우가 많다. 그렇지만 조합 회로에서 외부 출력이 나올 수도 있다. 그러한 경우에 외부 출력에 대한 부울 함수는 조합 회로의 설계 기법에 의해 상태표로부터 유도된다. (???)
플립플롭의 입력 함수는 대수 형식으로서 순차 회로를 표시한다. 플립플롭의 입력 함수로부터 논리도를 구하는 절차는, 처음에 플립플롭을 그리고 모든 입력과 출력에 기호를 붙인다. 플립플롭의 입력 함수에 의해 주어진 부울 함수로부터 조합 회로를 그린다. 마지막으로 플립플롭의 출력을 조합 회로의 입력에 연결하고, 조합 회로의 출력은 플립플롭의 입력에 연결시키면 된다.