칩의 각 기억장소에 저장되는 비트 수가 일반적으로 컴퓨터의 단어 길이보다 적기 때문에, 한 번에 한 단어씩 엑세스할 수 있도록 하기 위해서는 여러 개의 칩들을 병렬로 접속해야 한다.
컴퓨터의 단어 길이가 N비트이고 기억장치 칩의 데이터 입출력 비트 수가 B개라고 가정하자.
한 번에 한 단어씩의 데이터 엑세스가 가능하도록 하기 위해서는 N/B개의 칩들로부터 동시에 B비트씩 엑세스 할 수 있어야 한다.
그렇게 하기 위해 기억장치 칩들을 병렬로 접속하는 방법을 알아보자.
병렬 접속
16x8bit RAM
16x4bit RAM 칩의 구성이다.
칩 2개를 병렬로 접속하여 한 번에 8비트씩 읽기/쓰기가 가능하도록 설계했다.
병렬접속을 위해서 모든 주소비트들(A0 ~ A3)을 두 칩에 공통적으로 인가하며, 칩 선택(CS: chip select) 신호도 동일하게 인가한다.
이렇게 연결되면 두 RAM 칩에서 동일한 위치에 있는 기억 장소들에게 같은 주소가 배정된다.
두 칩의 첫 번째 기억 장소들에게 모두 '0000'번지가 배정되며, 다음 기억 장소에는 '0001', ... '1111'번지가 배정된다.
즉, 전체 주소 영역은 0000~1111번지가 된다.
그리고 RAM1의 데이터 입출력 선들은 상위 데이터 버스 선들(D7 ~ D4)과 접속하고,
RAM2의 데이터 입출력 선들은 하위 데이터 버스 선들(D3 ~ D0)과 접속한다.
따라서 어떤 한 기억장소가 선택되었을 때 각 칩에서 4비트씩, 전체적으로 8비트 데이터가 동시에 입출력 될 수 있다.
4K x 8bit RAM
RAM의 용량과 단어 길이의 비트수를 늘릴 경우를 알아보자
단어길이가 32비트인 컴퓨터의 기억장치 모듈을 내부 조직이 1K x 8비트인 RAM으로 구성했다.
즉, 각 읽기/쓰기 동작마다 32비트씩의 데이터가 엑세스되는 기억장치 모듈을 칩당 8비트씩 입출력되는 RAM을 이용하여 설계한 것이다.
첫 번째 예와 동일하게 모듈 내의 모든 칩들에 같은 주소를 가진 기억 장소들이 한 개씩 존재한다.
각 단어의 길이는 4바이트 = 32비트 이므로, 기억장치의 전체 용량은
1K x 8bit x 4개 = 32Kbit = 4Kbyte가 된다.
직렬 접속
32 x 4bit RAM
직렬접속을 이용하여 기억장소의 수를 확장하는 방법에 대하여 알아보자.
두 개의 16 x 4bit RAM 칩들을 이용하여 32 x 4bit기억장치 모듈을 구성한다면, 그 칩들을 직렬로 접속하면 된다.
이 경우에는 전체 기억 장소의 수가 32개이기 때문에 주소 비트는 다섯 개가 필요하다.
칩들을 직렬로 접속하기 위해서는 위 그림과 같이 최상위 주소비트인 A4를 RAM1의 CS핀으로 인가하고, 반전된 값을 RAM2의 CS핀으로 인가한다. 그림에서는 -CS 핀은 반전된 값을 받아들이므로 'active low'상태(값이 '0'일 때 칩 선택)이다.
따라서 두 RAM 칩들에게는 다음과 같은 주소 영역들이 배정된다.
RAM1 : 00000 ~ 01111
RAM2 : 10000 ~ 11111
전체 32개 기억 장소들의 주소는 00000번지부터 11111번지가 배정되었다.
이 경우 각 RAM 칩의 데이터 입출력 선들을 데이터 버스 선들(D3-D0)에 공통으로 접속하게 되면, 각 주소가 인가될 때마다 해당 기억장소가 위치한 RAM칩으로부터 4비트씩 읽기/쓰기가 수행된다.
4K x 8bit(4Kbyte) RAM
완전히 동일한 방식으로 1K x 8bit RAM 칩들을 이용하여 4K x 8bit(4Kbyte)의 기억장치 모듈을 구성해보자.
위 기억장치 모듈의 단어 길이는 8비트이다. 따라서 각 기억장치 주소에 대하여 RAM 칩이 한 개씩만 선택되도록 하면된다.
그리고 전체 용량이 4KByte가 되도록 하기 위해서는 모든 RAM 칩들이 순차적인 주소 영역을 가지도록 해야 한다.
그래서 위 그림처럼 4개의 RAM 칩들을 직렬로 연결한다.
이때 기억장치 모듈의 전체 기억 장소 수는 4K = 2^12 = 4096개가 되므로 주소 비트는 12개가 필요하다.
그런데 칩이 4개이므로 주소버스의 상위 2비트는 칩을 선택하는 CS핀으로 들어간다.
나머지 10비트는 모든 칩들에 공통으로 접속해야 한다.
병렬접속과 직렬접속을 조합하면 더 큰 용량의 기억장치 모듈도 설계할 수 있다.
실습
지금까지의 설계 방법들을 이용하여 ROM과 RAM들로 구성된 주기억장치를 가진 간단한 마이크로컴퓨터를 설계해보자.
- 컴퓨터에 필요한 전체 기억장치 용량을 결정한다.
- 사용가능한 칩들을 조사하고, 그들에 대한 주소 표(Address Map)를 작성한다.
- 세부적인 회로를 설계한다.
단어 길이가 8비트이고 1KByte의 ROM과 2KByte의 RAM으로 구성된 주기억장치를 가진다.
시스템 초기화 및 OS 프로그램이 저장되는 ROM들의 주소를 0번지부터 시작하고, RAM의 주소를 800H(2048)번지부터 시작한다.
사용할 수 있는 칩들로는 1K x 8bit의 ROM 1개, 512 x 8bit의 RAM 4개가 있다.
먼저 기억장치 주소 표를 만들어 보면 다음과 같다.
X는 0, 1 중의 어느 값이든 가질 수 있다는 표시이다.
현재 사용할 기억장치가 RAM인지 ROM인지를 구분하기 위한 1비트가 필요하다.
단어 길이가 8비트(데이터 버스가 8비트)이고, 사용할 수 있는 RAM의 용량이 512 x 8bit이므로 칩들을 직렬로 연결해야 한다. 따라서 직렬로 이어진 4개의 RAM중 하나를 선택하기 위한 2비트가 필요하다. -> 2 x 4 해독기
RAM의 기억장소에 엑세스 하기 위해 9비트가 필요하다.
ROM의 기억장소에 엑세스 하기 위해 10비트가 필요하다.
RAM과 ROM에 엑세스 하기 위한 주소비트는 중복될 수 있다. 따라서 비트 수를 모두 더하면 1 + 2 + 10 = 13비트가 필요하다.
그런데 ROM을 사용할 때를 생각해보자.
직렬로 이어진 4개의 RAM중 하나를 선택할 수 있게 해주는 2비트가 있었다. 이 2비트는 ROM에 접근할 때는 사용되지 않기 때문에 하나를 빌려서 기억장소에 엑세스 하기 위한 주소 비트로 사용할 수 있다.
결국 하나의 비트가 2개의 역할을 해 줌으로써 총 12개의 주소비트를 사용하게 된다.
이를 바탕으로 한 최종 설계도는 다음과 같다.
연습문제
5.10
16 x 4비트 RAM 칩들을 이용하여 32 x 8비트 기억장치 모듈을 설계하고, 각 칩에 할당된 주소 영역을 2진수로 표시하라.
5.11
1K x 8비트 RAM 칩들을 사용하여 2K x 16비트 기억장치 모듈을 구성하는 회로를 설계하고, 각 칩에 할당된 주소 영역을 2진수로 표시하라.
'CS > Computer Architecture' 카테고리의 다른 글
[컴퓨터 구조] 인터럽트와 DMA를 이용한 I/O (0) | 2022.01.13 |
---|---|
[컴퓨터 구조] 캐시 메모리 (0) | 2022.01.06 |
[컴퓨터 구조] RAM & ROM (0) | 2021.12.30 |
[컴퓨터 구조] 기억 장치 기본 (0) | 2021.12.29 |
[컴퓨터 구조] 제어 유니트 (Control Unit) (0) | 2021.12.26 |