[컴퓨터 구조]Combinational Logic + Sequential Logic(작성 중)
내용에 들어가기에 앞서서 반도체에 대한 이론과 불 대수에 대한 기본적인 이해가 있다고 가정한다. 불 대수를 회로로 옮기는 방법과 회로를 분석하는 방법에 대해서는 나중에 한 번 다루겠다.
Combintaional Logic Design
Combinational Logic Design : 하나 이상의 입력 + 하나 이상의 출력으로 구성된다. 출력이 현재의 값에만 의존한다.
functional specification : 입력과 출력 간의 관계를 표현한다.
timing specification : 현실에서는 입력과 출력 사이의 딜레이가 발생한다. 딜레이를 적절하게 조정하는 것은 중요한 일이다.
VIL, VIH, VOL, VOH
하나의 모듈은 입력부와 출력부로 구성된다. 가장 낮은 전압은 GND가 될 것이고, VDD는 가장 큰 전압이 될 것이다.
VIL : 입력부에서 Logic이 0으로 인식되는 최대 전압
VIH : 입력부에서 Logic이 1로 인식되는 최소 전압
VOL : 출력부에서 Logic이 0으로 인식되는 최대 전압
VOH : 출력부에서 Logic이 1로 인식되는 최소 전압
VIL > VOL, VOH > VIH를 만족한다.(출력에서 좀 더 까다롭다.) VIL-VOL은 NML이고 VOH - VOL은 NMH이다. 모듈이 잘 설계되어 있다면 VOL보다 다소 높은 전압의 0 신호가 들어와도 VOL 밑으로 낮추어 줄 것이고, VOH보다 낮은 전압의 1 신호가 들어와도 VOH보다 높게 조정하여 1을 출력할 수 있도록 할 것이다.(버퍼인 경우) NML, NMH은 보정 가능한 범위를 의미한다.
불 대수를 이용하면 논리식을 간략하게 할 수 있다. 반드시 그런 것은 아니지만 수식이 간략해지면 회로도 간단해지는 경향이 있다. CMOS 회로의 경우 NAND gate와 NOT gate를 기본으로 사용한다. 이 경우, 식과 회로의 복잡도가 반드시 비례하지는 않는다.
X and Z
X : 특정 노드에서 값이 불명확하거나 illeagl인 경우를 표기한 것 (ex) 하나의 노드에 1과 0이 모두 인가된 경우)
이러한 경우를 contention(경합)이라 부르며, 회로를 구성할 때 제거해야하는 요소이다.(의도되지 않은 불확실함)
Z : 특정 노드에 HIGH도 LOW도 아닌 값이 인가되는 경우, floating state, 의도된 불확실함
Combinational Building Blocks
Multiplexer : S(select signal)에 따라 여러 입력 포트 중 하나를 선택하여 하나의 출력 포트로 출력한다.
DeMultiplexer : S에 따라 하나의 입력을 여러 출력 포트 중 하나를 선택하여 출력한다.
Encoder : 주어진 입력 2^N을 N 개 비트 신호로 반환한다.
Decoder : N 개 비트 입력을 2^N 개 종류의 출력 중 하나를 선택한다. (부호를 해석한다.)
***Timing***
rising edge : LOW -> HIGH, 50% 지점이 경계
falling edge : HIGH -> LOW, 50% 지점이 경계
현실의 회로에서는 신호가 전달되는 데 시간이 소요된다. 논리 게이트를 통과하면서 소요되는 시간을 propagation delay(tpd), contamination delay(tcd)로 분석할 수 있다. 전자는 입력 신호가 출력까지 도달하는 데 걸리는 최대 시간이고, 후자는 입력 신호가 출력까지 도달하는 데 걸리는 최소 시간이다. tpd와 tcd를 최소로 하는 것이 Timing을 고려한 회로 설계의 목적이다.
tpd와 tcd가 차이나는 이유 : rising과 falling의 딜레이 차이, 여러 개의 입력과 출력에서 발생하는 전달 속도 차이, 온도에 따른 속도 차이
Critical Path : 가장 많은 논리 소자를 거치는 경로
***Glitch***
Glitch : 여러 개의 경로가 있고, 각 경로의 delay 차이는 여러 번의 output 변화로 이어진다. 이를 glitch라 한다.
glitch는 예상하지 못한 결과를 야기한다. glitch를 피하는 방법은 gate를 추가해주는 것이다. 카노르 맵으로 이를 쉽게 이해라 수 있다.
다음과 같은 경우를 생각해보자.
회로를 보면 B를 입력으로 하는 두 AND gate에서 딜레이 차이가 발생한다는 것을 알 수 있다. ABC = 011 => ABC = 001로 전환되는 것을 카노르 맵으로 표현하면 다음과 같다. 세로는 C, 가로는 AB이다. (~A~B + ~BC) => (~AB + BC)
초기 상태
~A~B | ~AB | AB | A~B | |
~C | 1 | 0 | 0 | 0 |
C | 1 | 1 | 1 | 0 |
완료 상태
~A~B | ~AB | AB | A~B | |
~C | 0 | 1 | 0 | 0 |
C | 0 | 1 | 1 | 0 |
완료 상태 + gate 추가
~A~B | ~AB | AB | A~B | |
~C | 0 | 1 | 0 | 0 |
C | 1 | 1 | 1 | 0 |
입력인 B 부분이 전환 된다는 관점에서 보았을 때, 초기 상태에서 switching이 이루어진 부분은 색칠한 부분이다. 속도가 빠른 부분은 B와 C가 관여하는 gate이다. 그렇다면 해당 부분에 영향이 없는 gate를 추가해주는 것이다. AC를 보충해주기 위해서는 ~AC를 추가해준다. (~AC는 겹치는 부분이어서 POS에서 영향을 주지는 않지만, AC 경로에 추가해주어 과도 상태에 도움을 준다. + B는 transition이 일어나는 부분으로 나머지 부분의 영향을 제거해주어야 한다. + 개인적으로 glitch를 보충해줄 때 값이 변한다고 생각하지 말고, 회로가 변경된다고 생각해보자. 입력 앞에 NOT gate가 하나 추가된다고 생각해보면 된다. 괜시리 값이 변하는 상황을 생각하면 머리가 아파진다.)
nandtotetris 실습 하면서 해당 부분은 보충할 예정이다!