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

효과적으로 많은 양의 데이터를 저장하는 저장장치이다.
-bit의 데이터가 -bit의 고유한 주소에 저장된다.
DRAM, SRAM, ROM의 세 가지 타입이 있다.
memory array는 bit cell로 설계되는데 각 cell마다 1 bit의 데이터를 저장한다.
address bits와 data bits로 구성된 memory array는 개의 행(row)과 개의 열(column)로 구성된다. Depth는 행의 개수이고 Width는 열의 개수이다. array의 크기는 이다.
예시) -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는 wordline를 활성화한 후 해당 행의 bitcell에 저장된 데이터(1,0,0)를 Data bitline(Data, Data, Data)을 통해 출력한다.
address 11에 값 001을 쓴다면 어떨까?
bitline=0, bitline=0, bitline=1로 bitline을 구동시킨다.
그 다음 wordline을 활성화하고 새로운 값(001)을 연결된 bitcell에 저장한다.
메모리는 크게 다음과 같이 구분지을 수 있다.
주의할 점이 있는데, ROM도 사실 random access하다. 따라서 주요 차이점은 volatile 여부로 봐야한다.
전원을 끄면 값을 잃는(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은 과 의 두 출력을 가진다.
wordline이 활성화 되면 양 쪽의 nMOS 트랜지스터가 켜져서bitline과 데이터 이동이 일어난다.
DRAM과 달리 노이즈에 의해 값이 손상되더라도 cross-coupled inverter가 값을 복원해준다. refresh가 필요없는 이유다.
정리

전원을 꺼도 값이 유지되는(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으로도 사용될 수 있다.
예를 들면, 위 그림에서 Data, Data, Data에 로직 게이트를 연결하여 다음과 같이 설계하는 방식이 있다.
Data
Data
Data
각 주소에 의한 연산 결과를 적은 테이블을 Lookup tables(LUTs)라고 한다.

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