Открыть сервис

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 →