Под катом небольшой обзор особенностей этой памяти, отличия от других типов памяти и в конце небольшой список того, что же взяла (позаимствовала) эта память из других типов.
Заметка будет полезна начинающим и не имевшим дела с этой памятью, вкратце попробую описать её назначение с индивидуально формирующимся выводом для каждого разработчика в процессе чтения, стоит ли она применения в своём проекте или нет.
Различные типы RAM
Существует довольно много различных типов памяти, возьмём бюджетный сегмент, куда и позиционируется применение HyperRAM, здесь в основном применяются следующие типы RAM:
- Асинхронные SRAM, требующие довольно много сигналов (около 30);
- SPI RAM, зачастую малых объёмов памяти;
- SDRAM, DDR, значительно превосходящие по объёму памяти первые два типа, но более сложные в подключении и разводке платы.
В итоге получается, что если SDRAM\DDR при подключении к ПЛИС отнимает очень ощутимое количество IO у ПЛИС, что особенно критично в малогабаритных устройствах, а первые два типа совершенно не пригодны в силу малых объемов памяти или\и малых скоростей, они больше подойдут для устройств с микроконтроллерами.
Если сравнить наиболее распространённые типы памяти по объёму памяти/размерам чипа и сложности интерфейса их подключения, можно составить примерно следующий график:
И как можно видеть, HyperRAM находится примерно посередине между бюджетными (менее объёмными и простыми) и более дорогими и сложными в подключении и работе с ними типами RAM. Почему так? Давайте разберёмся…
HyperBUS
HyperBUS — так называется интерфейс, по которому подключается HyperRAM, он довольно прост и содержит всего 12 сигналов. Более того, в нём можно вообще не использовать дифференциальные сигналы (а он тут один и только для тактирования), в отличие от большинства современных интерфейсов, где повсеместно используется LVDS: USB, PCI-E, MIPI CSI-2, HDMI и т. д. Другими словами, этот интерфейс дружественный к разработчику и вполне прощает плохое согласование сигналов шины по длине, не согласованное волновое сопротивление дорожек на печатной плате, а также он требует меньше свободных IO для подключения.
Также есть выбор между разными напряжениями питания\сигналов IO, на чём, собственно, и базируется необходимость\возможность дифференциального тактирования этой памяти:
Напряжение питания | Тактирование | Макс. частота тактирования | Пропускная способность |
1,8 В | Дифференциальная пара (LVDS) | 200 МГц | 400 Мбайт\сек |
3,3 В | Одиночная линия (Single-ended) | 100 МГц | 200 Мбайт\сек |
Фактически эту память легко подключать даже к самым бюджетным ПЛИС-ам или микроконтроллерам (если есть аппаратная поддержка), что делает её очень хорошим вариантом в сумме с малыми габаритами и невысокой ценой. К слову о габаритах и корпусе в целом (шары 0,4 мм, шаг 1 мм):
Как уже выше писал, требуется 12 сигналов для подключения этой памяти. Краткое описание этих линий:
Сигнал | Назначение |
CK, CK# | Вход тактирующего сигнала шины |
CS# | Вход выбора чипа (активный низкий) |
RWDS (Read Write Data Strobe) |
|
D7…D0 | Шина данных и адреса, совмещённая |
Обмен данными с памятью выглядит следующим образом: мастер опускает CS в 0, подает тактирующий сигнал и управляющие байты, ожидает несколько тактов, обменивается данными, перестаёт подавать тактирующий сигнал и поднимает CS в 1.
Пример записи управляющего пакета:
Данные с шины считываются по обоим фронтам, вне зависимости от типа сигнала тактирования.
Пример чтения данных:
Изменение данных на шине синхронизируется обоими фронтами сигнала RWDS.
Каждая транзакция сопровождается записью мастером управляющего пакета длиной 48 бит (а это займет 3 такта, 6 передач по каждому фронту такта). Таблица с описанием управляющего пакета:
Если вкратце, то тут задаётся:
- Адресное пространство — память или управляющие регистры;
- Тип транзакции — чтение или запись;
- Тип последовательности записи/чтения — линейная или пакетная (burst);
- Адрес начала обращения к памяти в столбцах и строках.
При необходимости память можно расширять параллельным включением:
Вот только это напрямую повлияет на пропускную способность — тут-то и выходит на сцену один из главных минусов этого интерфейса (пропускная способность снижается в n-раз, где n — количество чипов памяти на одной шине).
Более подробно обо всём можно прочитать в спецификации — HyperBus Specification. Да, там же можно прочитать и про HyperFLASH — это уже флешки с таким же интерфейсом для индустриального применения, и, более того, есть чипы, совмещённые FLASH + RAM, что может упростить схемотехнику и освободить место на печатной плате!
Настоящая сущность HyperRAM
Если же посмотреть более глубоко, то по факту HyperRAM — это просто псевдостатическая RAM (PSRAM) в новой обёртке (интерфес HyperBUS).
Вкратце PSRAM — это фактически обычная DRAM, но у PSRAM уже внутри происходят все процессы обновления данных, которые требуются обычной DRAM вследствие того, что она фактически построена на конденсаторах, которые требуют периодической «подзарядки» для поддержания своего состояния (1-цы) и разработчику, использующему PSRAM, не требуется заботиться об этом, как при применении DRAM.
И да, исходя из реальной внутренней работы HyperRAM накладываются некоторые ограничения на процесс обмена данными, т. к. память не может обновляться в процессе обмена данными, длительность одной транзакции (transaction duration) и задержки между ними (initial latency) ограничены! Значения максимальных длительностей зависят от температуры (приведены в спецификации).
Также из забавных вещей — HyperRAM фактически «взяла понемногу» от разных типов памяти (что -> где это было применено впервые):
- Сигналы уровней 1,8 \ 3,3 В -> асинхронная SRAM;
- Чтение по обоим фронтам -> DDR DRAM;
- Конфигурация регистров -> SDRAM;
- 8-битная шина -> асинхронная SRAM, DDR DRAM;
- Скрытое обновление данных -> PS DRAM;
- Дифференциальное тактирование -> DDR DRAM;
- Пакетный обмен -> SDRAM;
- Маскирование байтов при записи -> SDRAM;
- Адресация по шине данных -> SPI RAM.
Ссылки
- HyperBus Specification — официальная спецификация от Cypress;
- HBMC IP — платное IP ядро от S/Labs (вроде как тоже самое вот тут HyperRAM Controller на сайте Intel);
- blackmesalabs/hyperram — Open Source реализация;
- gtjennings1/HyperRAM — ещё Open Source реализация;
- HyperBus Memory — различные HyperRAM и HyperFlash от Cypress;
- HyperRAM — различная HyperRAM от ISSI.