디지털 회로

날짜=2013-05-06 브레드보드에 구현한 디지털 회로]] **디지털 회로** 혹은 정답조합회로(digital circuit)는 디지털 신호를 이용하는 전자 회로로, 아날로그 신호를 이용하는 아날로그 회로와는 반대되는 개념이다. 일반적으로 불 대수로 표현할 수 있으며, 디지털 회로는 기본적으로 논리 회로와 정답조합회로를 조합하여 만들어진다.url-access=registration 디지털 회로는 컴퓨터와 같은 장치에 많이 사용된다.
# 주요 회로
디지털 회로는 기본적으로 논리 회로들을 조합하여 만들어지며, 기능에 따라서 다음과 같은 회로가 자주 사용된다. * 플립플롭 * 카운터 ** 프로그래머블 카운터 * 위상동기회로 * 가산기 * 디지털-아날로그 변환회로 * 아날로그-디지털 변환회로
# 디지털 회로에서 논리 표현
수학적 개념의 논리를 전자회로로 표현하기 위해 표준화 된 방법이 필요하다. 우선 결정할 것이 논리 0과 1을 어떻게 표현할 것인가이다. 기본적인 개념은 논리표현에서 전압을 기준으로 표현한다. 전류를 흐르면 1아니면 0으로 표현할 수 있지만 이것을 전자회로를 표현하기는 전압으로 하는 표현보다 어렵다. 입력과 출력에서 많은 다양한 회로를 수용하기가 경험적으로 쉽지 않다. 따라서 초기에 전압을 기준으로 논리를 표현한다. 참과 거짓은 다음 기준이다: * 참 (True) : 전압 V_{CC} [V] * 거짓 (False) : 전압 0 [V] 보통 논리회로에서는 단일전원을 사용하는 것이 보통이다. 그렇다면 입력과 출력이 반드시 Vcc나 0V이어야 하는가 하는 문제이다. 이것은 BJT나 FET등을 이용해서 논리소자를 만드는데, 스위치 기능상 Vcc 또는 0V로 출력되지는 않는다. 보통의 전기 스위치는 저항이 0이지만, BJT나 FET로 스위치 할 때는 저항이 0이 아니다. 따라서 특정 전압 범위안에서 결정하면 된다. 다음과 같은 최소 고려 전압 밖에서 고려해야 한다. 즉, 각 논리의 출력 전압에서 스위칭 전압강하 만을 고려하므로 최소 이 전압보다는 큰 마진전압을 가져야한다: * H (논리1) : (V_{CC}-V_S) **~** V_{CC} * L (논리0) : V_S ~ 0V 가 된다. 여기서 : V_S는 BJT나 FET의 스위칭의 임피던스에 걸리는 전압이다. BJT의 경우 포화상태(Saturation Mode)에서 걸리는 C-E간의 전압이다. 일반적인 BJT가 0.2V 이하이다. 쇼트키-트랜지스터는 ON시 0.35V로 또 다른 전압으로 동작한다. 그렇다면 논리 0이 0~0.2V 범위인가의 범위 설정문제가 나온다. 실제로 동작할 때는 위와 같은 범위에서는 동작하지만, 표준화 과정에서 전압범위는 외부회로의 전압관계를 고려하여 마진이 더 크다. TTL LS형의 경우 0 ~ 0.8V로 설정되어 있다. 이것은 스위칭하는 트랜지스터의 포화영역의 전압과 노이지 마진을 추가한 전압 범위이다.
## 전압 레벨
논리에서 전압으로 논리상태를 표시하는데 이것은 경험적인 회로 구현에서 나온개념이라고 볼 수 있다. 전류는 다양한 상황에서 적용하는데 어려움이 많다. 그렇다면 전압을 몇 V로 할것인가를 생각해야 한다. 칩을 만드는 회사가 여러개가 존재하므로 표준화 하지 않으면 안 된다. 초기의 논리회로는 5V 기준이였다. 5V를 정해 놓고 이것에 맞추어 논리게이트든 마이크로프로세서든 만들어졌다. 그래서 5V를 Vcc라고 표시한다. 그렇다면 굳이 5V을 계속 해야 하는가가 문제이다. 전압이 높으면 고속의 클럭등에서 전력면에서 불리하다. 그리고 엣지에서 변화하는 속도가 존재하므로 고속의 처리에 불리하다. 따라서 전압은 낮으면 좋을 것이다. 따라서 경향은 점점 낮아지고 있다. 3.3V 많이 사용하는 전압이다. TTL에 비해 CMOS는 전압 적응성이 좋다. 그리고 마이크로프로세서 분야에서는 FET을 이용한다. 그렇다면 무조건 전압을 낮출수 있는가이다. 이것은 여러 가지 이유에서 불가능하다. 논리0을 표시할 때, 0V가 출력이 되면 좋지만 BJT나 FET을 사용하면 내부저항 때문에 전압이 나타난다. 따라서 개별 스위칭하는 전자소자의 포화상태 전압을 낮는 것이 전체 전원을 낮추는 열쇠다. {| border="1" class="wikitable" align="right" |+두 가지 논리 레벨의 예시 |- ! 논리 소자 기술 ! L 전압 ! H 전압 |- | 시모스 || 0V ～ 0.3VccVcc는 전원 전압을 말하며, 4.75V ~ 5.25V이다. || 0.7Vcc ～ Vcc |- | TTL || 0V ～ 0.8V || 2V ～ Vcc |} NMOS의 로직 게이트 디지털 회로는 두 가지 전압 레벨을 이진수나 논리 레벨의 0과 1로 나타내기 위해 사용된다. 액티브 하이(정논리)에서는 L는 이진수 0, H는 이진수 1을 나타내며, 액티브 로우(부논리)에서는 반대의 의미로 사용된다. 예를 들어 0 ~ 1.5 볼트는 논리 0, 3.5 ~ 5 V는 논리 1과 같다. 1.5 ~ 3.5 V는 논리가 변경될 때 사용되는 상태로 이상 상태라고 한다. 논리가 변경될 때 사용되는 상태는 대부분의 회로가 순수한 저항 회로가 아니기 때문에 전압 수준이 빠르게 변경되지 않아서 발생된다. 이러한 이상 상태를 인식하는 논리 회로도 있지만, 대부분 랜덤으로 0 혹은 1로 해석한다. 시모스의 디지털 회로는 내부 구조로 인하여 이러한 이상 상태에 있을 때 많은 전력을 소비해 버린다. 그렇기 때문에 이상 상태를 계속하면 소자가 발열로 인하여 파괴 될 수 있고, 회로를 설계할 때 이상 상태를 피해야 한다. 초기의 디지털 회로는 실리콘 기판에서 트랜지스터 제작에 제한이 있어서 PMOS나 NMOS에 의하여 내부 회로를 구성했었다. 이 경우에 입력이 0일 때는 전력소비가 적었지만 입력이 1일 때는 큰 전력을 소비한다. 또는 반대의 특성을 가지기도 했으며, 이 특성에 따라서 논리 회로를 액티브 하이 혹은 액티브 로우로 설계를 해야 하는 것이 중요했었다. NMOS의 로직에서 논리 1의 H출력시 전류가 흐르면 저항에 전압이 걸린다. 출력회로에 따라서는 가끔은 토템폴의 출력구조에 비해 전력면에서 불리하다.
### 슈미트 트리거 (Schmitt trigger)
{| |B: 슈미트 트리거 효과, A : 단순 비교기 출력. |슈미트 트리거 심볼 |} 파형의 상승이나 하강으로 논리의 의도적으로 다르게 해서 이상 상태를 피하는 방법으로 히스테리시스(이력 현상)을 이용하는 경우도 있다. **슈미트 트리거**(Schmitt Trigger)라고 불리는 로직 게이트가 별도로 존재한다. 위 그림에서 논리 A 출력은 엣지에서 실제로 발생할 수도 있다. 따라서 전압이 상승할 때, 논리를 인식하는 전압 레벌의 차이를 두어 이 문제를 어느정도 극복할 수 있다. 74LS04는 LS의 타입의 일반적인 전압 기준에 따라 동작하나 74LS14는 슈미트 트리거 특성을 갖는다. 슈미트 트리거의 동작에서 LS와 HC타입의 동작범위가 다르므로 선택적으로 사용하면 된다.
## 입력
입력은 논리전압 기준을 따라 특정전압을 입력하면 된다. 논리 1은 Vcc로 규정되어 있기 때문에 어떤식으로든 Vcc을 입력하면 된다. 반대로 논리0은 0V로 입력하면 된다. {| class="wikitable" align="center" ! 논리 0 !! 논리 1 |- | | |} 전류는 회로의 구성에 따라 전압과 저항의 옴의 법칙에 따라 전류가 흐른다. 논리를 입력한다고 해서 반드시 전류가 흘러 들어가지는 않는다. 오히려 논리 0일 때 입력의 반대방향으로 전류가 흐른다. 입력을 드라이브 하는 쪽이 씽크(sink)가 된다. 전력측면에서는 오히려 입력이 전력을 소모할 수도 있고 전력을 공급할 수도 있다. 즉, 입력이 전력입력과는 다른 문제이다. 단지 입력 노드에 특정 전압을 유지함으로써 신호가 입력되는 것이다. 그리고 입출력의 전류는 받드시 존재하는가이다. 이 역시 경우에 따라 전류가 있는 경우도 있고 전류가 거의 없어도 전압을 인가할 수 있기 때문에 전압 입력이 전력이 거의 0이 되는 경우도 있다. 이것은 BJT 보다 FET에서 더 적은 전력을 사용한다.
## 출력
우선 출력은 특정 노드에 전압이 Vcc로 하이볼트 면 논리 1이다. 반대로 0V로 전압이 나타나면 논리 0이다. 출력노드에서는 정해진 전압이 나타나면 된다. 그렇다고 출력노드가 전력의 관점에서 전력을 출력하는 것만은 아니다. 즉, 출력 노드에서 출력회로에 전류가 흘러 나오지 않을 수도 있다. 경우에 따라 출력노드에 전력이 나오기도 하고, 전류가 흘러들어 오히려 전력을 소모하는 경우도 있다. 경우에 따라 전류가 흐르지 않을 수도 있다. 전력적인 측면에서 구성되는 회로에 따라, 전력출력과 전력소모는 여러 양상이 존재한다. 이러한 개념에 따라 출력을 구사하는 방법은 여러 가지가 있다. 그러나 현재 가장많이 사용하는 방식이 토템폴 출력 방식이다.
### 토템폴 출력
논리게이트 단위의 TTL 중에 74시리즈가 가장 유명하고 많이 사용되어 왔다. 여기서 중요한 출력 방식이 토템폴(Totem Pole) 방식이다. 두개의 스위치를 배치하고 다음 개념적 표현과 같이 구성한다. 개념적으로 스위치를 이용해서 표현하면 다음과 같다: {| Class="Wikitable" Align="Center" ! 논리 0 !! 논리 1 !! 논리 Z |- | | | |} 위 개념도에서 스위치가 Vcc와 GND 사이에 2개의 스위치 구조를 토템폴(Totem Pole)이라고 한다. 논리 1일 때는 위의 스위치를 열어 출력 노드에 Vcc가 출력되도록 하고, 반대로 0일 때는 GND 쪽의 스위치를 열어 0V을 유지하도록 한다. 이 개념도에서 각각의 스위치는 디지털회로에서 BJT, FET등으로 대처된다. 고속의 논리신호처리를 위해서는 전자 스위치로 바꿀수 밖에 없다. 각각의 스위치는 BJT나 FET로 만들어지고, 시대별로 발전하는 과정을 거쳐 트랜지스터의 모양도 변화한다. BJT를 사용한 대표적인 경우가 TTL 계열 74시리즈가 대표적이고, FET CMOS를 사용한 4000시리즈가 구현되어 칩화되었다.
### 하이 임피던스
그림에서 출력 Z는 출력측에서 어떤 전압도 드라이브 하지 않는 상태다. 즉, 신호가 없고 뜬 상태이다. 하나의 신호선에 복수의 출력 소자를 연결하는 버스 구조를 사용하는 경우에는 신호를 출력할 소자와 수신할 소자만 연결되어 있어야 한다. 회로 제어를 잘못하여 복수의 출력 회로가 동시에 접속되어 버리면 회로 사이에 비정상적인 전류가 흘러서 소자가 파괴될 수도 있다. {| class="wikitable" align="center" ! 출력의 충돌로 쇼트가 일어나는 예 |- | |- | |} 이 파괴를 피하기 위해서 신호를 출력하면 안 되는 소자는 전기적으로 절연 상태가 되어야 한다. 이와 같이 출력 신호선에서 전기적으로 절연된 상태를 **하이 임피던스**(High Impedance)라고 부르며 H, L 둘 다 아닌 제3의 상태로 취급된다. 하이 임피던스 상태는 기호로 "Z"라고 표기한다. 어떤 입력 단자에 연결되어 있는 모든 출력 단자가 동시에 하이 임피던스 상태가 되면 전기적으로 입력 단자에 아무것도 연결되어 있지 않는 것과 동일한 상태가 되어서 안정적인 논리상태를 구현할 수 없다. 그렇기 때문에 하이 임피던스 상태를 수반하는 신호선은 풀업 또는 풀다운을 하는 것이 보통이다. 하이 임피던스 출력과 비슷한 것으로 아래의 오픈 컬렉터 출력이 있다. 이것은 출력이 논리 1일 때 L의 전압을 출력 하지만 논리 0일 때는 H의 전압을 출력하는 것이 아니라 하이 임피던스 상태가 되는 출력 소자이다. (부논리의 출력이 됨)
#### 트라이 스테이트 게이트에서 EN신호를 이용한 출력 Z 회로
출력상태에서 Y 상태를 만들기 위해, EN(Enable) 또는 OE(Output Enable) 신호입력에 의해 제어한다. 심볼에서 EN의 신호에 작은 동그라미가 있을 때는 0일 때 액티브(정의된 기능의 동작 상태, 입력신호에 따라 0 또는 1을 출력)되고 아래 회로처럼 그냥 연결되면 1일 때 액티브 된다. 마이크로프로세서의 버스구조에서 여러개의 칩에서 출력을 공동으로 연결하는 것은 일반적이다. 따라서 각각의 칩에서는 자기의 출력을 원할때만 버스에 출력하는 방식이 필요하다. 일반적인 로직에서도 Z 상태로 출력하는 경우 역시 사용할 수 있다. {| class="wikitable" align="center" ! Z 출력의 정상적 회로 !! 회로의 충돌로 쇼트가 발생한 경우 |- | | |- | | |}
### 오픈-컬렉터 출력
위의 스위치를 제거하고 다음과 같이 출력하는 것을 오픈-컬렉터 (Open-Collector, TTL 게이트) 또는 오픈-드레인(Open-Drain, FET 게이트)라고 한다. 논리 0을 출력할 때는 GND 쪽의 스위치를 닫아 0V를 유지하고 논리1일 때는 Z 상태를 유지한다. 논리1일 때 외부에서 전압을 결정하도록 회로를 구성해야 한다. 다음과 같이 예로 개념적 도식할 수 있다: {| class="wikitable" align="center" ! 논리 0 !! 논리 1 |- | | |} 논리 1 출력할 때 하이 임피던스가 되므로 여러 오픈 컬렉터 출력들을 단순하게 연결한 다음에 풀업을 하면, 출력의 어떤 것이라도 논리 0이 되었을 때 L가 되므로 논리곱 연산을 하게 된다. 이와 같이 논리합 디지털 회로 소자 없이 논리곱을 구현한 회로를 「와이어드 AND」라고 부른다. 오픈 컬렉터를 이용하는 경우는: * 단일전원을 사용하는 논리 게이트 동작에서 다른 전압의 출력을 원할 때 * 일반 출력 단자보다 더 많은 전류를 흘릴 필요가 있을 때 * 와이어드 AND 구현할 때 사용하는 경우가 일반적이다. 아날로그 회로에 의한 전류 증폭을 하지 않고도 직접 LED를 점등시키는 주변 장치와 연결할 수 있다. 마이크로프로세서에서 다른 칩과의 통신을 위해서 이 회로를 많이 사용한다. I2C등의 회로가 이 경우이다.
## 논리의 입력과 출력 예
어떤 게이트의 논리 출력은 다음 게이트의 입력이 된다. 따라서 실제 스위치처럼 완전히 0V 또는 Vcc 전압으로 입력되지 않고 마진 전압이 입력된다.
### 저전력 쇼트키 TTL의 동작 예
트랜지스터-트랜지스터 논리(TTL,Transistor–Transistor Logic)은 내부적으로 스위치와 제어신호를 BJT을 사용한다. 속도면에서 쇼트키-트랜지스터를 사용하면서 쇼트키 TTL(S 타입)로 개발되었고 다시 저전력을 위해 LS타입이 개발되어 대중화되었다. LS타입의 TTL은 다음과 같은 예에서 내부회로를 분석할 수 있다: {| | |- | |} 입력이 0으로 되었을 때의 각각의 스위치 반응이다. 여기서 빨간색은 전류 흐름의 방향이다. 왼쪽의 0입력은 내부의 저항을 통해 전류가 흐른다. 출력쪽은 출력 회로에 의해 전류가 결정되지만 방향은 안쪽으로 들어온다. {| | |- | |} 입력이 1으로 되었을 때의 각각의 스위치 반응이다.
### 입력과 출력 예
입력과 출력의 예를 보면 다음과 같다: {| class="wikitable" align="center" ! 논리 0 입력 !! 논리 1 입력 |- | | |- | | |}
# 풀업과 풀다운
풀업 저항 위 언급처럼 디지털 회로는 원칙적으로 H나 L의 전압 인가가 되어 있어야 한다. H와 L의 중간 전압이 되게 되면 내부 상태가 불안정하게 되거나 전력 소비가 증가한다. 그리고 L보다 낮은 전압이나 H보다 높은 전압이 인가되면 방해 전류 흐름이 생겨서 회로를 파괴할 수 있다. 일반적으로 디지털 회로의 입력 단자는 내부 임피던스가 높기 때문에(전원 회로와 저항이 큼) 입력 단자가 어디에도 연결되어 있지 않으면 근처의 정전기나 전자기 유도에 의하여 예상할 수 없는 전압이 인가될 수 있다. 그렇기 때문에 연결기에 의하여 외부로 연결되는 입력 단자는 커넥터가 잘못 연결되어 비정상적인 전압이 인가되지 않도록 해야 한다. 추가로 입력 단자가 어디에도 연결되어 있지 않은 상태를 「플로팅」란 표현이 널리 사용된다. 이러한 경우에는 수kΩ ~ 수백kΩ 정도의 높은 저항으로 전원선이나 접지선에 연결시킨다. 전원선에 연결한 것을 「풀업」이라고 하고 접지선에 연결한 것을 「풀다운」이라고 한다. 풀업이나 풀다운된 입력 단자는 출력 단자가 연결되지 않는 상태에도 풀업 저항이나 풀다운 저항에 의해서(큰 전자 유도가 일어나지 않는한) 전원 전압이나 접지 전압이 유지된다. 여기서 다른 디지털 회로의 출력 단자가 접속되었을 경우에는 디지털 소자의 출력 회로는 내부 임피던스가 지극히 작으므로 풀업 또는 풀다운에 사용된 저항값은 거의 무시할 수 있는 상태가 된다. 큰 저항과 작은 저항을 병렬로 연결한 경우에는 전류는 작은쪽으로 흘러서 큰 저항의 영향은 거의 없다. 풀업 저항값이 너무 크면 플로팅 상태와 비슷하게 되어서 전자 유도에 의해서 약해져 버린다. 그러나 너무 작으면 연결된 출력 소자에 큰 전류가 흘러서 회로의 소비 전력이 증가되고 최악의 경우에는 출력 소자가 파손된다. 입력 단자로 연결되는 신호선이 통신선처럼 비교적 길 경우에는 신호선으로 전자 유도가 일어나 전원 전압이나 접지 전압의 범위 밖의 이상 전압이 더해질 가능성이 높아진다. 이러한 경우에는 풀업 저항에 병렬로 다이오드를 연결해서 이상 전압에 의한 전류가 전원선 쪽으로 흘러 나가게 해서 디지털 회로 소자가 안전하게 동작하게 한다. 이 용도의 다이오드를 「클램프 다이오드」라고 불린다. (디지털 입력의 보호 목적 외에도 전압 치역을 제한하는 목적으로도 사용됨) 디지털 회로 설계상 하나의 IC속에 있는 모든 디지털 회로를 사용하지 않고 일부의 회로만 사용하는 경우도 있다. 이때 사용하지 않는 회로의 입력 단자는 그 상태가 H혹은 L이겠지만 동작에 전혀 관계 없기 때문에 플로팅시켜 버리는 경우가 있다. 논리적으로는 상관 없겠지만 전기적으로는 앞과 같은 이상 전압이 더해졌을 때는 회로가 파괴될 수 있으므로 쓰지 않는 입력 단자는 반드시 풀업이나 풀다운하는 것이 좋다. 다만 이 경우에는 다른 출력 단자의 상황을 고려하지 않아도 되기 때문에 직접 전원선이나 접지선에 연결해도 된다. 올해에 들어온 중앙 처리 장치 IC같은 경우는 외부에 붙여야만 하는 부품비를 줄이기 위해서 풀업 저항을 IC 안에 내장하는 경우가 많아지고 있다. 또 어떤 제품은 내장된 풀업 저항의 사용 여부를 소프트웨어로 제어할 수 있는 것도 있다.
# 팬 아웃
위와 같이 디지털 회로에서는 전압차에 의해 정보를 각 소자에 전달하지만, 당연히 전기 회로이기 때문에 전류가 흐른다. 구체적으로 출력측 레벨을 L로 하기 위해서는 출력 단자쪽으로 전류가 흘러 들어가는 동작을 하고, 출력측 레벨을 H로 하기 위해서는 출력 단자쪽에서 전류가 흘러 나오는 동작을 한다. 다만 일반적으로 디지털 회로의 입력 단자는 내부 임피던스가 높게 만들어져 있기 때문에(전원이나 접지에 대한 저항값이 높음) 이 전류값은 아주 낮다. 특히 시모스(CMOS) 방식으로 제작된 회로는 거의 흐르지 않는다. TTL처럼 입력 단자에서 전류 소모가 발생하는 회로를 설계하는 경우에는 출력측 소자의 전류 구동 능력에 따라서 입력 단자의 개수가 제한되는데 이 제한치를 **팬 아웃**이라고 불린다. TTL은 표준 형식, LS 형식, ALS 형식등 다양한 종류가 있지만 같은 종류의 형식은 동일한 팬 아웃 값을 가지고 있다.(출력 단자의 전류 구동능력이 동일함) 다만 다수의 입력 신호를 분배할 목적으로 제작되어서 같은 형식임에도 불구하고 높은 팬 아웃값을 가지는 회로 소자도 있다. 이러한 회로 소자는 논리적으로는 아무것도 하지 않거나 반전의 기능만을 가져서 버퍼, 버스 버퍼, 드라이버라고 불린다. 다른 형식의 종류를 조합해서 사용할 때에는 각 데이터 시트를 조사해서 접속할 수 있는 개수를 결정해야 한다. 시모스형 논리 회로는 입력 단자에서 소비되는 전류는 적지만 많은 입력 단자를 연결하면 각 단자와 배선에서 전기 용량이 커져서 출력 단자에서 용량성 저항이 커지게 된다. 이것을 가리켜 팬 아웃이라고도 부른다. 이렇기 때문에 출력측 소자의 구동 능력이 부족하면 H가 L, L가 H로 상태가 변경되는 시간이 길어지게 되어서 회로 동작에 제한이 되므로, 후단에 연결할 수 있는 입력 단자의 개수는 제한된다.
# 버퍼
{| class="wikitable" ! width="200" align="center" |트라이 스테이트 버퍼 ! width="200" align="center" |쌍방향 버퍼 ! width="200" align="center" |데이터 셀렉터 |- | align="center" | | align="center" | | align="center" | |- | align="center" | {| class="wikitable" align="center" !G!!X!!Y |- |0||0||Z |- |0||1||Z |- |1||0||0 |- |1||1||1 |} | align="center" | {| class="wikitable" align="center" |- !G!!X!!Y |- |0||0(Out)||0(In) |- |0||1(Out)||1(In) |- |1||0(In)||0(Out) |- |1||1(In)||1(Out) |} | align="center" | {| class="wikitable" align="center" |- !S !! X1 !! X2!!Y |- |0 || 0 || 0||0 |- |0 || 0 || 1||1 |- |0 || 1 || 0||0 |- |0 || 1 || 1||1 |- |1 || 0 || 0||0 |- |1 || 0 || 1||0 |- |1 || 1 || 0||1 |- |1 || 1 || 1||1 |} |}
## 트라이 스테이트 버퍼
출력을 하이 임피던스로 할 수 있는 출력 회로를 트라이스테이트（*tri-state* : 세 가지 상태）라고 하며 입력 신호를 그대로 출력하거나 하이 임피던스로 출력할 수 있는 회로를 트라이스테이트 버퍼(*tri-state buffer*)라고 한다. 회로 기호에서는 버퍼를 나타내는 삼각의 표와 측면에는 출력을 하이 임피던스로 할지 아니면 입력 신호로 할지 결정할 수 있는 신호선이 있는 기호로 표시한다. 출력을 하이 임피던스로 하지 않을 것을 결정하는 입력 신호선은 게이트(gate)의 의미로 'G'로 표기하거나 작동(enable)의 의미로 'E', 'EN'로 표기하기도 한다. 또 데이터 버스에서 사용되는 경우 출력 작동(output enable)의 약자로 'OE'나 칩 선택(chip select)의 약어로 'CS'의 기호를 사용하는 경우도 많다.
## 쌍방향 버퍼
트라이스테이트 버퍼 2개를 조합하여 데이터 통신의 방향을 변경할 수 있게 만든 회로도 자주 사용되고 있다. 이 회로는 쌍방향 버퍼라고 불리며 G가 L일 때는 Y에서 X방향으로 데이터가 전송되며, G가 H일 때는 X에서 Y방향으로 데이터가 전송된다. 트라이스테이트 버퍼나 쌍방향 버퍼는 많은 회로가 신호선을 공유하는 데이터 버스나 주소 버스에 널리 사용된다. 그렇기 때문에 데이터 버스의 비트의 단위가 되기 쉬운 8 채널 트라이 스테이트 버퍼 IC가 대중화되어 자주 사용된다.
## 데이터 셀렉터
그리고 동일한 트라이스테이트 버퍼를 여러 개 조합, 와이어드 오어의 원리를 사용하여, 복수의 입력 신호 중 하나만 출력하는 회로를 만들 수 있다. 이것을 데이터 셀렉터(data selector)라고 불린다. 데이터 셀렉터는 일반 논리 소자로 이용해 구성하는 `(Y ← (S AND X1) OR ((NOT S) AND X2))`가 트라이스테이트를 이용하여 훨씬 간단한 내부 회로로 제작할 수 있다. 옆의 그림은 두 채널 데이터 셀렉터이지만 네 채널, 여덟 채널의 데이터 셀렉터도 이 회로를 응용하면 쉽게 제작할 수 있다.