디지털 시스템에서는 각 회로에서 사용되고 생성되는 데이터를 저장할 곳이 필요하다. 바로 메모리(Memory)다.

Memory Array

효과적으로 많은 양의 데이터를 저장하는 저장장치이다.
MM-bit의 데이터가 NN-bit의 고유한 주소에 저장된다.
DRAM, SRAM, ROM의 세 가지 타입이 있다.

memory array는 bit cell로 설계되는데 각 cell마다 1 bit의 데이터를 저장한다.
NN address bits와 MM data bits로 구성된 memory array는 2N2^N개의 행(row)과 MM개의 열(column)로 구성된다. Depth는 행의 개수이고 Width는 열의 개수이다. array의 크기는 depth×width=2N×M\mathsf{depth\times width}=2^N\times M이다.

예시) 22×32^2\times3-bit array

Bit cell

각 bit cell은 wordline과 bitline에 연결되어 있다.
각 주소의 bit 조합에 따라 활성화 할 bit cell이 있는 행의 wordline을 선택한다. wordline이 HIGH일 때, 저장된 bit가 bitline으로 전송되거나 bitline에서 cell로 받아진다. LOW가 되면 연결이 끊긴다(bitline = Z; floating).

  • bitcell read
    bitline이 Z(floating)인 상태에서 wordline이 HIGH가 되면 저장된 bit가 bitline으로 이동할 수 있게 된다.

  • bitcell write
    bitline에 저장하려는 값이 위치한 상태에서 wordline이 HIGH가 되면 bitline의 값이 cell로 이동한다.

이제 이 cell들을 확장해보자.


bitcell들이 위와 같이 연결되어 memory array를 구성한다.

  • 메모리 읽기(read)
    wordline이 활성화(assert)되고 해당 bitcell의 행이 bitline을 HIGH 또는 ROW로 구동(drive)한다.

  • 메모리 쓰기(write)
    bitline이 HIGH 또는 LOW로 구동되고 wordline이 활성화되어 bitline의 값이 cell로 저장된다.

위 회로에서 address 10을 읽어보자.
bitline들은 모두 floating상태로 두고 decorder는 wordline2_2를 활성화한 후 해당 행의 bitcell에 저장된 데이터(1,0,0)를 Data bitline(Data2_2, Data1_1, Data0_0)을 통해 출력한다.

address 11에 값 001을 쓴다면 어떨까?
bitline2_2=0, bitline1_1=0, bitline0_0=1로 bitline을 구동시킨다.
그 다음 wordline3_3을 활성화하고 새로운 값(001)을 연결된 bitcell에 저장한다.

Memory Type

메모리는 크게 다음과 같이 구분지을 수 있다.

  • Random access memory (RAM)
    volatile 메모리로 전원을 끄면 저장된 값이 증발한다.
  • Read only memory (ROM)
    nonvolatile 메모리로 전원을 꺼도 값이 유지된다.

주의할 점이 있는데, ROM도 사실 random access하다. 따라서 주요 차이점은 volatile 여부로 봐야한다.

RAM - Random Access Memory

전원을 끄면 값을 잃는(volatile) 메모리로 읽기와 쓰기 속도가 빠르다.
컴퓨터의 메인메모리는 RAM(DRAM)이다.
random access라는 말은 어느 위치에 접근하든 걸리는 시간이 일정하다는 뜻이다.

DRAM - Dynamic RAM
데이터가 커패시터(capacitor)에 저장된다.
DRAM의 커패시터는 데이터를 전하의 형태로 저장하며, 외부회로가 지속적으로 전압을 유지해주지 않기 때문에 시간이 지나면 데이터가 소실된다. 이 때문에 주기적인 refresh가 필요하며, 이 특성 때문에 Dynamic이라고 불린다.

DRAM의 bit cell은 위와 같이 생겼다.

nMOS 트랜지스터가 bitline과 커패시터의 연결 여부를 결정하는 스위치 역할을 한다.
wordline이 HIGH면 nMOS 트랜지스터가 ON이 되고 bitline과 데이터 이동이 일어난다. 위 그림에서 (a)는 커패시터가 VDD에 의해 충전된 상태이고 1을 저장하고있다. (b)는 GND에 의해 방전된 상태이고 0을 저장하고 있다.

SRAM - Static RAM
SRAM은 데이터를 cross-coupled inverter에 저장한다.
DRAM과 다르게 데이터를 refresh해줄 필요가 없어서 Static이라고 불린다.

SRAM의 bitcell은 bitline\mathsf{bitline}bitline\overline{\mathsf{bitline}}의 두 출력을 가진다.
wordline이 활성화 되면 양 쪽의 nMOS 트랜지스터가 켜져서bitline과 데이터 이동이 일어난다.
DRAM과 달리 노이즈에 의해 값이 손상되더라도 cross-coupled inverter가 값을 복원해준다. refresh가 필요없는 이유다.

정리

ROM - Read Only Memory

전원을 꺼도 값이 유지되는(nonvolatile)메모리로 읽기는 빠르지만 쓰기가 불가능하거나 느리다.
usb나 카메라 등에 있는 flash memory가 ROM이다.

ROM은 데이터를 트랜지스터의 존재 유무로 저장한다.

위 그림은 나중에 설명할 fuse-programmable ROM의 bitcell이다.

cell에서 데이터를 읽기 위해, bitline이 약하게 HIGH로 당겨지면 wordline이 활성화된다. 트랜지스터가 존재한다면 bitline을 LOW로 당기고, 트랜지스터가 없다면 bitline을 HIGH로 유지한다.

ROM은 dot notation을 이용해 나타낼 수 있다.

현재 ROM의 저장상태는 아래와 같다.

ROM은 주로 데이터 저장소로 쓰이지만 combinational logic unit으로도 사용될 수 있다.
예를 들면, 위 그림에서 Data2_2, Data1_1, Data0_0에 로직 게이트를 연결하여 다음과 같이 설계하는 방식이 있다.
Data2=A1A0_2=A_1\oplus A_0
Data1=A1+A0_1=\overline{A_1}+A_0
Data0=A1A0_0=\overline{A_1}\cdot \overline{A_0}

각 주소에 의한 연산 결과를 적은 테이블을 Lookup tables(LUTs)라고 한다.


<참고자료>
Harris & Harris, Digital Design and Computer Architecture, RISC-V Edition, 2022.

0개의 댓글