BRAM
BRAM — это аббревиатура от англ. Block Random Access Memory (блочная память с произвольным доступом), обозначающая специализированный тип статической памяти с произвольным доступом (SRAM), встроенный непосредственно в программируемые логические интегральные схемы (ПЛИС) и системы на кристалле (SoC). BRAM представляет собой аппаратные блоки памяти, предназначенные для хранения данных и программного кода, и является ключевым ресурсом для реализации цифровых схем, требующих быстрой и предсказуемой работы с памятью.
История и предпосылки появления
Развитие ПЛИС (FPGA) в 1980–1990-х годах привело к необходимости интеграции на кристалл не только логических элементов (LUT), но и блоков памяти. Первые ПЛИС, такие как Xilinx XC4000 (1990-е), уже содержали небольшие встроенные блоки ОЗУ, но они были ограничены по объёму и конфигурации. С ростом сложности проектов (обработка сигналов, сетевое оборудование, криптография) потребовалась более ёмкая и гибкая память, работающая на той же частоте, что и логика.
В 1998 году компания Xilinx представила архитектуру Virtex, в которой впервые были реализованы специализированные блоки BRAM, отделённые от конфигурационной логики. Этот подход стал стандартом де-факто для всех ведущих производителей ПЛИС, включая Intel (Altera) и Lattice.
Архитектура и устройство
Физическая реализация
BRAM реализуется на кристалле как отдельные массивы SRAM-ячеек (обычно 6-транзисторные), окружённые схемами адресации, управления и синхронизации. Каждый блок BRAM имеет фиксированный объём, который различается в зависимости от семейства ПЛИС:
- Малые блоки (например, в Xilinx 7 Series): 36 Кбит (4,5 КБ).
- Средние блоки (в Xilinx Spartan-6): 18 Кбит.
- Крупные блоки (в Intel Stratix 10): до 20 Кбит.
Общее количество блоков BRAM на кристалле может достигать нескольких тысяч (например, в Xilinx Virtex UltraScale+ — до 2160 блоков по 36 Кбит, что даёт около 77 Мбит встроенной памяти).
Режимы работы
BRAM может быть сконфигурирована пользователем для работы в одном из нескольких режимов:
- Двухпортовый режим (True Dual-Port): два независимых порта чтения/записи с собственными адресами, данными и сигналами управления. Позволяет одновременно читать и писать в разные ячейки.
- Однопортовый режим (Simple Dual-Port): один порт только для записи, другой — только для чтения.
- Режим FIFO: блок работает как очередь (First-In, First-Out) с аппаратным управлением указателями.
- Режим ROM: данные записываются один раз при конфигурации и далее доступны только для чтения.
- Режим Shift Register: реализация сдвиговых регистров большой длины (до 1024 бит).
Разрядность данных
BRAM поддерживает настройку разрядности данных от 1 до 72 бит (с контролем чётности). Например, блок 36 Кбит может быть организован как:
- 32K × 1 бит
- 16K × 2 бита
- 8K × 4 бита
- 4K × 9 бит (8 данных + 1 бит чётности)
- 2K × 18 бит
- 1K × 36 бит
Классификация и разновидности
По производителю
- Xilinx (AMD): BRAM (Block RAM) — стандартный термин. В семействах Zynq и Versal также присутствуют UltraRAM (большие блоки по 288 Кбит).
- Intel (Altera): M9K, M20K, M144K — блоки памяти ёмкостью 9, 20 и 144 Кбит соответственно. Используется термин «embedded memory blocks».
- Lattice: EBR (Embedded Block RAM) — блоки по 9 Кбит в семействах ECP5 и iCE40.
- Microchip (Microsemi): uPROM и RAM блоки в ПЛИС IGLOO и SmartFusion.
По функциональному назначению
- Синхронная BRAM: данные записываются/читаются по фронту тактового сигнала. Стандартный тип.
- Асинхронная BRAM: доступ без тактового сигнала, встречается редко (в основном в старых ПЛИС).
- BRAM с контролем чётности (ECC): в некоторых семействах (например, Xilinx 7 Series) блоки могут автоматически обнаруживать и исправлять однобитовые ошибки.
Применение
BRAM используется во всех цифровых проектах на ПЛИС, где требуется локальное хранение данных с низкой задержкой. Основные области применения:
Буферизация данных
- FIFO-буферы: для согласования потоков данных между разными тактовыми доменами (Clock Domain Crossing).
- Видеобуферы: хранение строк или кадров изображения при обработке видео (например, в системах машинного зрения).
Хранение коэффициентов и таблиц
- LUT-таблицы: для реализации нелинейных функций (синус, косинус, корень) в цифровой обработке сигналов (DSP).
- Коэффициенты фильтров: в КИХ- и БИХ-фильтрах.
- Таблицы перекодировки: например, для цветовых преобразований (RGB → YUV).
Реализация кэш-памяти
- В процессорных ядрах, встроенных в ПЛИС (например, MicroBlaze или Nios II), BRAM используется как кэш инструкций и данных.
- В системах с аппаратным ускорением (например, нейронные сети) BRAM может служить локальным хранилищем весов и активаций.
Коммуникационные интерфейсы
- Пакетные буферы: для временного хранения пакетов в сетевых процессорах (Ethernet, PCIe).
- Дескрипторы DMA: хранение управляющих структур для прямого доступа к памяти.
Преимущества и недостатки
Преимущества
- Высокая скорость: время доступа составляет 1–2 такта (обычно 2–4 нс для современных ПЛИС).
- Предсказуемость: задержки фиксированы, что упрощает синтез и временной анализ.
- Энергоэффективность: потребление ниже, чем у внешней DDR-памяти, за счёт отсутствия буферов ввода-вывода.
- Гибкость: возможность настройки разрядности, режимов и синхронизации под конкретную задачу.
Недостатки
- Ограниченный объём: максимальный суммарный объём BRAM на кристалле редко превышает 100–200 Мбит (для сравнения, внешняя DDR4 может быть десятки Гбит).
- Фиксированное расположение: блоки распределены по кристаллу, что может приводить к сложностям трассировки при большом количестве одновременных обращений.
- Отсутствие возможности динамического расширения: объём BRAM нельзя увеличить без замены ПЛИС.
Интересные факты
- В ПЛИС Xilinx Virtex-7 (XC7V2000T) содержится 1292 блока BRAM по 36 Кбит, что в сумме даёт 46,5 Мбит. Однако реально доступно для пользователя около 42 Мбит из-за служебных накладных расходов.
- BRAM может использоваться для реализации криптографических ускорителей: например, в проектах AES-256 блоки BRAM хранят раундовые ключи и таблицы замены (S-box).
- В некоторых ПЛИС (например, Intel Agilex) блоки BRAM могут быть сконфигурированы для работы в режиме «сжатой памяти» (Compressed Memory), что позволяет хранить данные с аппаратным сжатием без потерь.
- Технология BRAM является основой для так называемых «распределённых RAM» (Distributed RAM), которые реализуются на логических элементах (LUT) и имеют меньший объём, но более высокую скорость.
Критика и альтернативы
Основной критикой BRAM является её относительно малая ёмкость по сравнению с внешней памятью. Для проектов, требующих хранения больших массивов данных (например, обработка видео 4K или обучение нейросетей), BRAM оказывается недостаточной. В таких случаях используются:
- Внешняя память DDR3/DDR4: подключение через контроллер памяти.
- HBM (High Bandwidth Memory): в некоторых ПЛИС (например, Xilinx Virtex UltraScale+) интегрирована стековая память HBM с пропускной способностью до 460 ГБ/с.
- UltraRAM: в ПЛИС Xilinx Versal — блоки памяти ёмкостью 288 Кбит, которые занимают промежуточное положение между BRAM и внешней памятью.
Источники
- Xilinx UG473: 7 Series FPGAs Memory Resources User Guide
- Intel AN 820: Embedded Memory Blocks in Intel FPGAs
- Lattice Semiconductor: Memory Usage Guide for ECP5 FPGAs
- Clifford E. Cummings, «Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs» (2001)
- Документация AMD (Xilinx) на семейства Virtex, Kintex, Artix, Zynq
- Стандарт IEEE 1801 (UPF) для управления энергопотреблением в цифровых схемах
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →