디지털 회로의 양방향 병렬 인터페이스 방식
이크로프로세서는 다수의 주변장치를 가질 수 있습니다. 주변장치는 입력과 출력이 가능합니다. 입출력이 가능한 다수의 주변장치를 한개의 마이크로프로세서와 연결하려면 수많은 도선 연결이 필요합니다. 더구나 디지털 회로는 여러가닥의 전선을 묶은 버스로 구성됩니다.
입력과 출력이란 전기적으로 전류의 흐름을 의미합니다. 양방향으로 전류를 흐르게 하려면 두벌의 전선이 필요합니다. 따라서 데이터 버스가 8비트라면 입출력이 가능한 4개의 주변장치를 위해 64가닥의 도선 연결이 필요합니다.
디지털 회로의 버스 구조는 어마어마한 도선 연결을 필요로 합니다. 뭔가 대책이 필요합니다. 그래서 양방향 버스라는 것을 도입 했습니다. 한 도선을 입력과 출력이 공유하는 것이죠. 그대신 스위치를 달아 적절히 조합하여 전류원과 소비처를 적절히 맞춰줍니다.
왼쪽에서 오른쪽으로 정보를 전송하려면 S1과 S3를 켭니다. 반대로 오른쪽에서 왼쪽으로 정보를 전송하려면 S4와 S2를 켜죠. 만일 S1과 S4를 켰다면 문제가 심각해 집니다. 왼쪽에서 디지털 정보 1을 출력하고 오른쪽에서 0을 출력한다고 해보죠. 디지털 데이터 1은 VCC 를 의미하고 0은 GND 입니다. 이런 상황이 벌어지면 전기적으로 단락된 것과 같아서 전류가 무한히 흘러 회로가 타버릴겁니다. 이것을 전기적으로 데이터 충돌이라고 합니다.
양방향 버스와 제어선을 동원하여 마이크로프로세서와 주변장치의 연결선 수를 줄여봅니다. 제어선은 디지털 신호가 충돌하지 않도록 스위치를 켜고 끄는 역활을 합니다. 디지털 회로 소자에서 스위치 역활을 하는 것이 바로 트라이 스테이트 버퍼 입니다.
스위치를 켜고 끄기위한 제어선의 용도와 절차에 따라 인텔 8080 혹은 모토롤라 6800 방식으로 구분 하게 됩니다.
인텔 방식은 주변장치 내부에 레벨 래치를 두고 있습니다. 읽기(RD#)와 쓰기(WR#) 신호를 별도로 두고 있습니다.
모토롤러 방식은 입출력 장치 내부에 트리거 방식 플립-플롭을 두고 있습니다. 읽기와 쓰기 선을 공유(R/W#)하며 플립플롭 트리거용 신호(E)로 데이터를 래치합니다.
인텔 방식이든 모토롤러 방식이든 모두 칩 셀렉터(CS#)를 사용하는데 입출력 장치의 제어를 활성화 시킵니다. 마이크로프로세서가 디수의 입출력 장치중 한개를 선택할 때 사용하는 제어선입니다. 입출력 장치를 지정하기위해 대개 주소 버스를 디코딩하여 칩 셀렉트 신호를 만들어냅니다.
인텔 방식은 구식입니다. 작은 신호변화에도 반응하는 레벨 트리거 방식은 거의 사용되지 않습니다. 요즘처럼 빠르게 작동하는 반도체에서 클럭의 간격이 매우 작은데 제어용 신호간격을 유지하는것이 바람직하지 않을 뿐더러 글리치같은 일종의 잡음에 반응하면 곤란하니까요.
요즘은 모토롤라 방식이 주로 사용됩니다. 레벨 트리거는 플립플롭이 작동하기 위해 래치 제어가 일정한 간격이 유지되어야 합니다만 엣지 트리거 방식 플립 플롭은 작동하는 간격이 거의 0에 가깝기 때문에 속도를 다투는 요즘 장점이 많습니다. 엣지 트리거 방식 플립 플롭은 게이트수가 약간 더 들어가긴 합니다만 고집적 회로 시대라 단점이라고 할 것이 없습니다.
위와 같이 구성한 경우를 양방향 공통 버스 인터페이스라고 합니다. 다수의 입출력장치가 한 벌의 버스선을 공유하고 데이터 버스는 입출력을 겸하고 있습니다. 이러한 버스 방식은 칩마다 장착할 수 있는 핀의 갯수가 제한되므로 이를 극복하기 위한 방편입니다. 입력과 출력을 위해 먼저 제어신호가 나오고 읽기 혹은 쓰기를 하며 제어를 종료하는 일정한 절차를 필요로합니다. 이런 절차를 입출력 트랜잭션(transaction)이라고 합니다. 입출력 트랜잭션에는 제어 절차가 포함되어 시간적으로 손해입니다.
요즘처럼 대규모 반도체 집적화가 가능하므로 마이크로프로세서와 주변장치기능을 모두 한 칩에 집적화 시킵니다. 칩 내부에는 땜질을 할 필요가 없으므로 엄청나게 많은 수의 연결선을 배치할 수 있습니다. 도선의 굵기가 흔히 말하는 반도체 공정기술의 선폭과 같습니다. 수십 나노미터 폭의 도선을 사용할 수 있고 가닥의 수도 제한 없을 지경입니다. 배선의 길이도 기판에 연결하는 것보다 엄청나게 짧습니다. 그래서 칩 내부의 병렬 버스 연결방식은 공통버스를 사용하지 않습니다. 양방향 버스도 사용하지 않습니다. 따라서 트랜잭션에 제어절차가 간소화되어 입출력 속도를 높입니다. 버스의 폭(선갯수)도 8비트가 아닌 64비트 128비트로 늘려 놓습니다. 필요하다면 입출력 장치의 갯수에 따라 여러 벌의 버스를 배치하여 초고속의 데이터 전송이 가능하게 됩니다. 메모리처럼 빠른 속도가 가능한 버스와 느리게 작동할 외부 입출력 장치용 버스를 구분하여 버스 효율을 높입니다. 이런 버스를 온-칩 버스라고 하며 ARM 사에서 규정한 AMBA가 바로 이에 해당합니다.
댓글 없음:
댓글 쓰기