SDRAM 컨트롤러
요약
SDRAM 컨트롤러는 복잡한 타이밍 및 신호를 가진 SDRAM을 마치 일반적인 정적 메모리처럼 다룰 수 있게 해주는 필수 구성 요소입니다. 이 컨트롤러는 주소 지정, 프리차징, 리프레싱 등의 복잡성을 숨기고 32비트 동기식 읽기/쓰기 인터페이스를 제공합니다. 특히 버스트 전송을 통해 높은 대역폭 활용이 가능하며, 체인화된 요청으로 연속적인 데이터 읽기가 효율적입니다.
핵심 포인트
- SDRAM 컨트롤러는 복잡한 메모리 타이밍을 단순화하여 사용성을 높임.
- 32비트 동기식 인터페이스를 제공하며 버스트 전송에 최적화됨.
- 요청(req)과 승인(ack) 신호를 통해 읽기/쓰기 작업을 제어함.
- 읽기 요청의 체인화를 통해 최대 대역폭을 효율적으로 활용할 수 있음.
SDRAM 컨트롤러
동기식 동적 RAM (SDRAM)은 복잡한 타이밍 및 신호 요구 사항을 가지고 있기 때문에, 메모리에 읽거나 쓸 때 세부적인 내용을 다루지 않아도 되도록 메모리 컨트롤러가 필요합니다. 이 컨트롤러의 역할은 행(row) 주소 지정, 열(column) 주소 지정, 프리차징(precharging), 리프레싱(refreshing)과 같은 복잡성을 숨기는 것입니다. 대신, SDRAM을 마치 평범한 정적 메모리처럼 다룰 수 있게 해줍니다.
이 SDRAM 컨트롤러는 16Mx16비트 SDRAM 칩(예: AS4C16M16SA-6TCN, IS42S16400F 등)에 대한 대칭적인 32비트 동기식 읽기/쓰기 인터페이스를 제공합니다.
SDRAM 칩이 데이터 버스로 16비트만 가지고 있음에도 불구하고, 컨트롤러는 개별적인 읽기와 쓰기를 하는 것보다 SDRAM에서 여러 워드(word)를 버스트(burst)하는 것이 더 효율적이기 때문에 32비트 데이터 버스를 사용합니다.
문서화
신호 (Signals) :traffic_light:
| 이름 (name) | 방향 (direction) | 설명 (description) |
|---|---|---|
| reset | input | reset이 활성화되면 SDRAM 컨트롤러를 리셋합니다. |
| ... |
Reset
reset 신호는 SDRAM 컨트롤러의 내부 상태 기계(internal state machine)를 리셋하는 데 사용될 수 있습니다.
Clock
clk 신호는 SDRAM 컨트롤러가 사용하는 시스템 클럭입니다.
이상적으로는 SDRAM 클럭(즉, 실제 SDRAM 칩의 클럭)과 달라야 합니다. 위상 관계를 조정하여 SDRAM 클럭이 시스템 클럭보다 앞서도록 함으로써, SDRAM 출력 신호가 타이밍 제약 조건을 충족할 수 있도록 제때 도착하는지 확인할 수 있습니다.
Address Bus
addr 신호는 접근하려는 메모리 위치의 주소로 설정되어야 합니다.
Input Data Bus
data 신호는 주어진 주소의 메모리 위치에 쓰기 할 32비트 값으로 설정되어야 합니다.
Write Enable
we 신호는 SDRAM에 쓰기를 하려고 할 때 활성화되어야 합니다. 이 신호는 req 신호와 함께 활성화되어야 합니다.
Request
요청(req) 신호는 SDRAM에 읽기 또는 쓰기를 하려고 할 때 활성화되어야 합니다. 요청을 할 때는, 요청이 승인될 때까지 req, we, addr, data 신호를 변경해서는 안 됩니다.
승인 (Acknowledge)
요청이 승인되면 SDRAM 컨트롤러가 ack 신호를 활성화합니다.
유효 (Valid)
유효(valid) 신호는 출력 데이터 버스에 유효한 데이터가 있을 때 SDRAM 컨트롤러에 의해 활성화됩니다.
출력 데이터 버스 (Output Data Bus)
q 신호는 SDRAM에서 읽은 마지막 32비트 워드로 설정됩니다. 출력 버스의 데이터는 valid 신호가 활성화된 동안에만 유효합니다.
읽기 (Reading)
SDRAM 컨트롤러를 사용하면 간단한 인터페이스로 읽기 작업을 수행할 수 있습니다.
읽기 요청은 체인화(chained)될 수 있어, 현재 작업이 완료되기 전에 새로운 읽기 작업을 요청할 수 있습니다. 이 전략을 사용하여 클럭 사이클 낭비 없이 SDRAM에서 원하는 만큼의 워드를 읽을 수 있으며, 이를 통해 SDRAM의 최대 사용 가능한 대역폭을 활용할 수 있습니다.
다음 예시는 SDRAM 컨트롤러를 사용하여 두 개의 32비트 워드를 읽는 방법을 설명합니다. 이 방법은 원하는 모든 워드의 개수를 읽는 데 사용할 수 있습니다.
- 주소(address)를
addr버스에 작성합니다. we신호를 비활성화하고req신호를 활성화하여 읽기 작업을 요청합니다.ack신호가 활성화될 때까지 기다립니다. 이는 읽기 요청이 승인되었고, 읽기 작업이 시작되었음을 의미합니다.- 다른 주소를
addr버스에 작성합니다. valid신호가 활성화될 때까지 기다립니다. 이는 첫 번째 읽기 요청이 완료되었고 데이터가 데이터 버스(data bus)에 사용 가능함을 의미합니다.q데이터 버스에서 값을 읽습니다.ack신호가 활성화될 때까지 기다립니다. 이는 두 번째 읽기 요청이 승인되었고, 읽기 작업이 시작되었음을 의미합니다.- 요청을 모두 마쳤으면
req신호를 비활성화합니다. valid신호가 활성화될 때까지 기다립니다. 이는 두 번째 읽기 요청이 완료되었고 데이터가 데이터 버스에 사용 가능함을 의미합니다.q데이터 버스에서 값을 읽습니다.
쓰기(Writing)
SDRAM 컨트롤러는 읽기 작업과 유사하게 쓰기 작업을 처리합니다.
쓰기 요청 또한 체인화(chained)될 수 있어, 현재 작업이 완료되기 전에 새로운 쓰기 작업을 요청할 수 있습니다.
다음 예시는 SDRAM 컨트롤러를 사용하여 32비트 워드 두 개를 쓰는 방법을 설명합니다. 이 방법은 모든 수의 워드를 쓰는 데 사용될 수 있습니다:
addr버스에 주소를, 데이터 버스(data bus)에 값을 작성합니다.we와req신호를 활성화하여 쓰기 작업을 요청합니다.ack신호가 활성화될 때까지 기다립니다. 이는 쓰기 요청이 승인되었고, 쓰기 작업이 시작되었음을 의미합니다.addr버스에 다른 주소를, 데이터 버스에 값을 작성합니다.ack신호가 활성화될 때까지 기다립니다. 이는 두 번째 쓰기 요청이 승인되었고, 쓰기 작업이 시작되었음을 의미합니다.- 요청을 모두 마쳤으면
we와req신호를 비활성화합니다.
상태 다이어그램 (State Diagram)
<p align="center"> <img alt="State Diagram" src="https://raw.githubusercontent.com/nullobject/sdram-ctrl-fpga/master/state-diagram.png" height="488px" /> </p>라이선스 (Licence)
본 프로젝트는 MIT 라이선스(MIT licence) 하에 라이선스가 부여되었습니다. 자세한 내용은 LICENCE 파일을 참고하십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기