'논리회로'에 해당되는 글 2건
* 논리회로 기초
<소수점 변환>
* 10진수의 소수를 r진수로 변화하려면 소수값에 기수를 곱하여 나온 정수가 r진수로 변환한 값이 된다.
<부호표현>
* 부호-보수방식(숫자부분으로만 구성)
1의보수 : 역수를 취하고 계산 중에 발생한 올림수는 마지막 자리에 더한다
2의보수 : 역수를 취한 후 1을 더하고 계산 중에 발생한 올림수는 버린다.
* 부호-크기방식(부호부분과 숫자부분으로 구성)
<10진수식 코드>
* BCD코드(0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001)
* 2421코드(0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1110, 1111)
* Excess-3(3초과코드) : BCD에 3을 더한 수
* 8 4-2-1코드(0000, 0111, 0110, 0101, 0100, 1011, 1010, 1001, 1000, 1111)
<아날로그-디지털변환 코드>
* 그레이코드
1. 한 번에 한 자리만 변한다.
2. 오른쪽 우선으로 변한다.
(단, 같은 수가 있을 경우는 변하지 않고 왼쪽에 우선권을 준다.)
<아스키 코드>
* 숫자 0 : 48(0110000), A: 65(1000001), a:97(1100001)
<부울대수의 공리와 정리>
* 공리
1. x+0=x, x*1=x
2. x+x'=1, x*x'=0
3. x*(y+z) = x*y+x*z, x+(y*z) = (x+y)*(x+z)
4. x+y=y+x, x*y=y*x
* 정리(공리로 증명이 된다.)
1. x+x=x, x*x=x
2. x+1=1, x*0=0
3. (x')' = x
4. x+(y+z)=(x+y)+z, x*(y*z)=(x*y)*z
5. (x+y)'=x'y', (x*y)'=x'+y'
6. x+xy=x, x(x+y)=x
※ 부울 대수의 조작은 대부분 간단한 회로를 얻기 위하여 수행된다.
<형식>
* 정준형식 : 최소항의 곱이나 최대항의 합으로 이루어진 식.
1. 최소항 : 각 원소를 모두 포함하는 AND식
※ 최소항의 합을 구할 때는 x+x'=1의 식을 이용한다.
F(A,B,C) = ∑(1,2,3,4,5) = m1+m2+m3+m4+m5 = a'b'c +a'bc' + a'bc + ab'c' + ab'c
위와 같은 식으로 표현한다.
2. 최대항 : 각 원소를 모두 포함하는 OR식
※ 최대항의 곱을 구할 때는 x+yz = (x+y)(x+z)와 xx' = 0의 식을 이용한다.
F(A,B,C) = ∏(1,,2,3,4,5) = M1․M2․M3․M4․M5
= (a'+b'+c)(a'+b+c')(a'+b+c)(a+b'+c')(a+b'+c)
* 정준형식 사이의 변환
① F(A,B,C) = ∑(1,2,3,4,5) = m1+m2+m3+m4+m5 일 때
② F'(A,B,C) = ∑(0,6,7) = m0+m6+m7인데 이를 다시 보수화하여 다른 정준형식으로 변환한다.
③ F(A,B,C) = ∏(0,6,7) = (m0+m6+m7)' = M0*M6*M7이 된다.
* 표준형식 : 정준형식을 간략화하여 곱의합과 합의곱으로 표현한 식
※ 최대한 식을 간략히 표현하고 레벨 수 역시 최대한 줄여야 한다.
<디지털 논리 게이트>
* AND, OR 는 교환법칙과 결합법칙이 성립하지만 NAND, NOR는 결합법칙이 성립하지 않아 다중 NOR(NAND)를 사용한다.
* exclusive-OR는 1의 개수가 홀수일 때 1이되고 짝수일 때는 0이된다.
<합의 곱의 간략화>
* 카르노맵을 이용하여 F'에 대한 곱의 합을 구한 후에를 다시 보수를 취하여 F의 합의 곱을 구할 수 있다.
<부울 함수로부터 NAND논리도표 얻는 과정>
1. 함수를 간략히하고 곱의 합 형태로 나타낸다.
2. 1단에서 NAND로 대치하고 리터럴이 하나이거나 inverter-OR과 바로 만나는 리터럴은보수화를 취한다.
3. 2단에서 AND-inverter 또는 inverter-OR을 사용하여 나타낸다.
cf) 나만의 노하우
: 일단 NAND로 나타내기 전에 평범하게 AND와 OR을 사용하여 표현한 후에 거기서 인버터를 이용하여 조절하면 된다.
cf) NAND : AND-inverter, inverter-OR , NOR : OR-inverter, inverter-AND로 표현한다.
<기함수>
* 다중 변수를 갖는 exclusive-OR연산 기함수라고 하며 이는 부울 함수의 표현식으로 나타낼 수 있으며 기함수의 보수는 우함수이다.
ex) A ⊕ B ⊕ C = (AB'+A'B)C+(AB'+A'B)C'
= AB'C+A'BC+AB'C'+A'BC' = ∑(1,2,4,7)
<래치>
* S-R 래치(NOR회로사용) * S'-R' 래치(NAND회로사용)
1. S = 1 : set 상태 1. S = 0 : set 상태
2. R = 1 : reser 상태 2. R = 0 : reset 상태
3. S = R = 0 : no change 3. S = R = 1 : no change
|
S |
R |
Q |
Q' |
|
1 |
0 |
1 |
0 |
|
0 |
0 |
1 |
0 |
|
0 |
1 |
0 |
1 |
|
0 |
0 |
0 |
1 |
|
1 |
1 |
0 |
0 |
|
S |
R |
Q |
Q' |
|
1 |
0 |
0 |
1 |
|
1 |
1 |
0 |
1 |
|
0 |
1 |
1 |
0 |
|
1 |
1 |
1 |
0 |
|
0 |
0 |
1 |
1 |
※ S-R래치는 둘다 1일 때(S'-R'래치의 경우 둘 다 0인 경우) 상태가 정의 되지 않는 단점을 보완한 것이 D플립플롭이다.
<트리거>
* 제어신호의 순간적인 변화 말하여 트리거로 인하여 상태 전이가 일어나게 되는 것을 트리거하다라고 한다.
* 상승 에지 트리거 : 전압이 ‘0’에서 ‘1’로 올라갈 때 상태 전이가 일어난다.
* 하강 에지 트리거 : 전압이 ‘1’에서 ‘0’으로 내려갈 때 상태 전이가 일어난다.
<D플립플롭>
※ D플립플롭은 입력 데이터 그대로 Q로 출력이 된다. 만약 D가 0이면 Q가 영이 되어 RESET상태를 나타내고 D가 1이면 Q가 1이 되어 SET상태를 나타낸다.
※ 여러 플립플롭 중에 게이트 수가 가장 작아 경제적이고 효율적이다. 다른 플립플롭은 이D플립플롭과 외부 논리를 이용하여 만들어 진다. ex) JK플립플롭과 T플립플롭
<JK플립플롭>
※ D플립플롭의 외부에 JQ'+ K'Q의 외부 논리를 두어 만든 플립플롭
|
J |
K |
Q(t+1) |
상태 |
|
0 |
0 |
Q(t) |
no change |
|
0 |
1 |
0 |
reset |
|
1 |
0 |
1 |
set |
|
1 |
1 |
Q'(t) |
보수 |
|
Q(t) |
J |
K |
Q(t+1) |
|
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
|
0 |
1 |
0 |
1 |
|
0 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
|
1 |
0 |
1 |
0 |
|
1 |
1 |
0 |
1 |
|
1 |
1 |
1 |
0 |
(특성표)
<T플립플롭>
※ 보수화를 수행하는 플립플롭으로 JK플립플롭의 입력을 동일하게 만들어서 표현할 수 있으며 Q(t+1)=T⊕Q(t)=T'Q(t)+Q'(t)T (입력T와 D플립플롭의 Q(t)의 exclusive-OR)로 표현할 수 있다.
|
Q(t) |
T |
Q(t+1) |
|
|
0 |
0 |
Q(t) |
0 |
|
0 |
1 |
Q'(t) |
1 |
|
1 |
0 |
Q(t) |
1 |
|
1 |
1 |
Q'(t) |
0 |
|
T |
Q(t+1) |
|
0 |
Q(t) |
|
1 |
Q'(t) |
<특성표>
* 플립플롭의 동작을 표의 형태로 나타낸 것으로 플립플롭의 논리적 속성을 나타낸다.
* 플립플롭의 다음 상태는 현재 상태와 입력에 의한 함수로 정의된다.
<특성식>
* 특성표에 나타난 플립플롭의 논리 특성을 대수학적 식으로 나타낸 것(다음상태의 나타내는 식)
ex) D플립플롭 : Q(t+1) = D, JK플립플롭 : Q(t+1) = JQ'+K'Q, T플립플롭 : Q(t+1) = TQ'+T'Q
<상태식>
* 상태식는 전이식이라고도 하며 플립플롭의 현재 상태와 입력과의 함수에 의해 다음 상태를 규정하는 식.
* 즉, 현재의 상태와 입력을 통하여 부울식으로 유도한 것이 상태식(전이식)이다.
* 상태표로부터 상태식을 유도해 낼 수 있으며 상태식으로부터 상태표를 유도해 낼 수 있다.
* 논리도표로부터 상태식을 유도해 낼 수 있으며 상태식으로부터 논리도표를 유도해 낼 수 있다.
cf) D플립플롭의 경우 상태식와 플립플롭의 입력식이 동일하다.
<상태표>
* 시간순서에 따른 입력과 현재 상태의 모든 경우에 대하여 출력과 다음 상태를 나타낸 표.
* 상태표로부터 상태식을 유도해 낼 수 있으며 상태식으로부터 상태표를 유도해 낼 수 있다.
* 논리도표로부터 상태식을 유도해 낼 수 있으며 상태표으로부터 논리도표를 유도해 낼 수 있다.
<상태도표>
* 상태표에 나타난 유용한 정보들을 시각적으로 표현한 그래프
* 각 상태는 둥근원으로 표시하고 상태 변화는 방향을 나타내는 화살표로 표시하고 화살표에는 입력/출력을 나타내는 수식이 존재한다.
<플립플롭의 입력식>
* 부울함수를 이용하여 플립플롭의 입력을 표현한 식
<플립플롭의 출력식>
* 플립플롭을 통하여 나온 값을 이용하여 외부 출력을 만들어내는 조합회로의 부분을 부울함수로 표현한 식
<플립플롭을 가진 회로의 분석 방법>
1. 현재 상태와 입력변수의 항으로 플립플롭의 입력식을 결정한다.
2. 상태식(다음상태)을 얻기 위하여 플립플롭의 입력식을 특성식으로 바꾼다
※ JK플립플롭의 특성식 : Q(t+1) = JA'+K'A 에 입력식 J=B, K=Bx'를 대입하여 상태식을 구한다.
3. 상태식을 통하여 각각의 다음의 상태표를 만들 수 있다.
cf) 나만의 방법 : 논리도표와 현재상태, 입력변수의 값을 이용하여 플립플롭의 입력표를 구하여 JK특성을 이용하여 현재상태와 비교하여 다음 상태를 예측할 수 있다.
cf) 현재상태와 다음상태를 이용하여 JK의 입력표를 구할 수 있어야 한다.
<상태축소>
* 두 상태가 입력변수의 모든 경우에 대하여 같은 출력을 내보내고, 다음 상태도 같은 경우 한 상태를 등가라고 하며 이 때는 하나를 삭제할 수 있다.
한 상태를 삭제한 후에 조정이 필요한데 다른 상태에서 다음 상태를 가리킬 때 삭제한 상태를 가리키고 있다면 이를 등가 상태로 바꾸는 과정이 필요하다.
<상태지정>
* 상태축소를 위하여 각 상태를 코드화하였는데 순차회로를 설계하기 위해서는 다시금 2진수 값들로 지정할 필요가 있다. 이때 사용되어지는 방법 3가지 Binary, Gray Code, One hot이다.
<순차회로 설계 과정>
1. 상태표 또는 상태도표와 같이 상태표와 등가의 표현을 구한다.
2. 상태축소
3. 상태지정
4. 사용할 플립플롭의 종류 선택
5. 플립플롭의 입력식과 출력식을 구한다.(부울함수로 표현된 식)
6. 논리도표를 그린다.
※ D플립플롭의 경우 입력식을 상태표에서 직접 구해 낼 수 있지만, JK와 T플립플롭의 경우에는 직접적으로 구할 수 없기 때문에 여기표가 필요하다.
|
Q(t) |
Q(t+1) |
J |
K |
|
Q(t) |
Q(t+1) |
T |
|
0 |
0 |
0 |
X |
|
0 |
0 |
0 |
|
0 |
1 |
1 |
X |
|
0 |
1 |
1 |
|
1 |
0 |
X |
1 |
|
1 |
0 |
1 |
|
1 |
1 |
X |
0 |
|
1 |
1 |
0 |
JK플립플롭 여기표 T플립플롭 여기표
<카운터>
* 입력 펄스에 따라 미리 정해진 순서대로 상태 전이가 진행되는 레지스터를 카운터라고 한다.
1. 리플카운터 : 한 플립플롭의 출력은 다른 플립플롭을 트리거링하기 위해 사용된다.
ex) 2진리플카운터, BCD리플카운터
※ 상승에지와 하강에지의 구분 : 최하위 자리에서 들어오는 클럭신호에 inverter가 붙으면 하강에지1→0이 될 때 값의 변화가 있으며 inverter가 붙지 않은 상승에지에서눈 0→1이 될 때 값이 변한다.
※ 상향식과 하향식의 구분 : 상향식카운터(값이 증가)는 플립플롭의 출력이 다른 플립플롭의 제어신호로 들어갈 때 인버터가 붙을 경우이고 반대로 인버터가 없이 제어신호로 입력되면 하향식카운터(값이 감소)가 된다.
2. 동기식카운터 : 모든 플립플롭은 동일한 클럭을 사용하여 동시에 상태 전환을 한다.
※ 최하위 비트는 펄스마다 보수화가 되고 다른 플립플롭은 자신보다 하위의 플립플롭 모두가 1이 됐을 때 보수화가 된다.
<기타 카운터>
1. 사용하지 않는 상태를 가진 카운터 : 순차회로에서 모든 상태를 사용하지 않는 경우의 카운터
* 사용하지 않는 상태는 don't care(don't care로 설정하게 되면 don't care가 미치는 영향을 반드시 밝혀야 한다.)로 되거나 특정한 상태를 가리키도록 한다.
* 만약, 외부 인터페이스에서 회로를 사용하지 않는 상태로 만들 경우에는 반드시 올바른 상태로 돌아올 수 있어야 한다.
* 사용하지 않는 상태를 알아보기 위해서는 don't care를 사용하여 부울 함수식을 구한 후에 논리도표를 만들고 사용하지 않는 상태를 대입하여 한 클럭이나 수 클럭후에 정상 상태로 돌아오는지 확인해야 한다. 이렇게 자동으로 돌아올 때의 카운터를 자동수정 카운터라고 부른다.
<링카운터>
* 어떤 특정한 시간에 하나의 플립플롭만 세트하고 나머지 플립플롭은 모두 클리어된 상태로 동작하는 순환식 시프트 레지스터이다.
n n n
* 2 개의 타이밍 신호를 발생시키려면 2 개의 플립플롭으로 구성된 시프트 레지스터나 또는 n-to-2 라인 디코더를 가진 n비트 레지스터를 필요로 한다.
ex) 16개 타이밍신호는 16비트의 시프트레지스터나 4-to-16라인디코더를 사용하여 구현가능하다.
<Johnson카운터>
* 링카운터의 변형으로 k개의 플립플롭으로 구성된 시프트레지스터를 사용하여 2k개의 타이밍신호를 만들어 낼 수 있다. (꼬리바꿈식 : 맨 오른쪽 플립플롭의 출력을 보수화하여 맨 왼쪽 플립플롭의 입력으로 들어가는 방식)
* 단점 : 사용되지 않는 상태에 있으면 다르 사용되지 않는 상태로만 이동을 계속하고 정상상태를 찾지 못한다.
* 해결책 : Dc = (A+C)B를 사용하여 동작가능 상태로 만든다.(플립플롭 C의 입력식이다.)
* 필요한 플립플롭의 수는 타이밍 신호 개수의 절반이고 디코딩 게이트의 수는 타이밍 신호 개수와 동일하고 단지 2입력 게이트(디코딩 순서 : 모두 0 또는 모두 1인 상태에서는 양쪽 끝에 플립플롭의 출력을 취하고 그렇지 않은 경우는 서로 인접한 1과0 또는 0과1의 상태를 가지는 두 플립플롭의 출력을 선택하여 디코딩한다.)만이 사용된다.
<ROM>
k k
* 2 x n 개 ROM은 k x 2 내부 디코더와 n개의 OR 게이트를 가진다.
* ROM을 프로그램 할 때 퓨즈 링크가 끊어지게 하는데 끊어지는 것은 ‘0’이 되고 끊어지지 않은 것은 ‘1’이 된다. (논리도표에서 표현을 할 때 연결된 ‘1’에 ‘X’표시를 한다.)
* ROM을 조합회로를 이용하여 설계할 때 상수값과 0,1을 가질 경우는 이는 ROM으로 표현하지 않고 바로 표현한다.
<조합 PLD유형>
* 조합회로를 프로그램할 수 있는 프로그래머블 논리장치를 PLD라고 한다.
1. PROM : 디코더로 만들어진 AND 배열과 프로그램 가능한 OR배열을 가지며 최소항의 합으로 부울 함수들을 실행한다.
2. PAL : 프로그램 가능한 AND배열과 고정된 OR 배열을 갖는다.
* three-wide AND-OR(3개의 프로그램 가능한 AND와 고정된 OR로 구성)
* eight-wide AND-OR(7개의 프로그램 가능한 AND와 고정된 OR로 구성)
cf) 만약에 최소항을 구했는데 항이 3개 이상이 될 때는 출력 값들 중에 대치 될 수 있는 것을 찾아야 한다.
* term 수 : 입력값 * 3(AND게이트 수)
3. PLA : 가장 유연한 PLD로 AND배열과 OR배열이 모두 프로그램될 수 있다. 이는 변수들을 완전히 디코딩하지 않고 또한 모든 최소항들을 생성하지 않는다는 것을 말한다.
* 퓨즈의 수 : (2n * k) +(k * m)+(2 * m) ⇒ n은 입력수, k는 AND수, m은 출력수를 나타낸다.


MANOSM.zip