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

Блок памяти BRAM

BRAM (Block RAM, блочная оперативная память) — это специализированный тип статической оперативной памяти (SRAM), встроенный непосредственно в кристалл программируемых логических интегральных схем (ПЛИС) архитектуры FPGA (Field-Programmable Gate Array). BRAM представляет собой аппаратно реализованные блоки памяти фиксированного размера, которые могут быть сконфигурированы пользователем для хранения данных и выполнения функций оперативного запоминающего устройства (ОЗУ), постоянного запоминающего устройства (ПЗУ), FIFO-буфера (First In, First Out) или сдвигового регистра. В отличие от распределённой памяти (Distributed RAM), реализуемой на логических элементах (LUT), BRAM является выделенным ресурсом, обеспечивающим высокую скорость работы, предсказуемую задержку и энергоэффективность.

Архитектура и устройство

Физическая реализация

BRAM реализуется на уровне кристалла ПЛИС в виде массивов ячеек SRAM, организованных в колонки (столбцы) по всей площади чипа. Каждый блок представляет собой независимый модуль, содержащий:

  • Матрицу запоминающих ячеек (обычно 18 или 36 Кбит в зависимости от поколения ПЛИС).
  • Два полностью независимых порта доступа (Dual-Port RAM), каждый со своим адресом, шиной данных и сигналами управления.
  • Логику управления чтением/записью, включая схемы синхронизации, маскирования байтов и разрешения записи.

Размеры и конфигурации

Стандартный размер одного блока BRAM в современных ПЛИС (например, семейства Xilinx 7 Series, Intel/Altera Cyclone V) составляет 36 Кбит. Однако для обеспечения обратной совместимости и гибкости каждый блок может быть разделён на два независимых блока по 18 Кбит. Возможные конфигурации одного блока:

  • 32K x 1 бит (32 768 ячеек по 1 биту).
  • 16K x 2 бита.
  • 8K x 4 бита.
  • 4K x 9 бит (8 бит данных + 1 бит чётности).
  • 2K x 18 бит (16 бит данных + 2 бита чётности).
  • 1K x 36 бит (32 бита данных + 4 бита чётности).

Двухпортовость

Ключевая особенность BRAM — наличие двух независимых портов (Port A и Port B). Каждый порт может одновременно выполнять операции чтения и записи по разным адресам, что позволяет реализовать:

  • True Dual-Port: оба порта могут читать и писать в любые ячейки.
  • Simple Dual-Port: один порт только для записи, другой — только для чтения (используется для FIFO).
  • Single-Port: используется только один порт, второй отключается.

При одновременной записи в одну и ту же ячейку с обоих портов возникает конфликт (write-write collision), который должен быть разрешён на уровне проекта (например, приоритет одного из портов или блокировка записи).

Типы и режимы работы

Синхронный режим

Все операции с BRAM выполняются синхронно, то есть по фронту тактового сигнала. Это отличает её от асинхронной памяти и обеспечивает детерминированную задержку (обычно 1 такт на чтение или запись). В большинстве ПЛИС поддерживается режим Read-First (сначала читается старое значение, затем записывается новое), Write-First (сначала записывается новое значение, затем оно же читается) и No-Change (выходные данные не изменяются во время записи).

Режим ROM (Read-Only Memory)

BRAM может быть инициализирована начальными данными при загрузке конфигурации ПЛИС (битстрима). Это позволяет использовать её как постоянное запоминающее устройство (ПЗУ) для хранения таблиц перекодировки, коэффициентов фильтров, микрокода процессоров и т.д. Инициализация выполняется через файл формата COE (Coefficient File) или MEM (Memory Initialization File).

Режим FIFO (First In, First Out)

На основе двухпортовой BRAM с простым доступом (Simple Dual-Port) реализуются аппаратные FIFO-буферы. Встроенная в ПЛИС логика (например, блоки FIFO Generator в Xilinx) автоматически управляет указателями чтения и записи, флагами «пусто» (empty) и «полно» (full), а также асинхронным сбросом. Такой FIFO обеспечивает передачу данных между тактовыми доменами (Clock Domain Crossing, CDC) без потери данных.

Режим сдвигового регистра (Shift Register)

BRAM может быть сконфигурирована как сдвиговый регистр с программируемой длиной (SRL — Shift Register Look-Up Table). Это позволяет реализовать задержки сигналов, конвейерную обработку данных или буферы строк для видеообработки без использования отдельных триггеров.

Применение

Цифровая обработка сигналов (DSP)

В системах цифровой обработки сигналов (ЦОС) BRAM используется для хранения:

  • Коэффициентов КИХ- и БИХ-фильтров.
  • Таблиц преобразования (LUT) для быстрых математических операций (например, вычисление синуса/косинуса).
  • Буферов данных для БПФ (быстрое преобразование Фурье), где требуется хранение отсчётов сигнала.

Сетевые и коммуникационные системы

В сетевых устройствах (маршрутизаторах, коммутаторах) BRAM применяется для:

  • Хранения таблиц маршрутизации (MAC-адресов, IP-адресов).
  • Буферизации пакетов данных (пакетные FIFO).
  • Реализации очередей с приоритетами (QoS).

Видео- и графическая обработка

В системах машинного зрения и видеокарт BRAM используется для:

  • Буферов строк (line buffers) для свёрточных фильтров.
  • Кадровых буферов (frame buffers) малого размера.
  • Таблиц перекодировки цветовых пространств (RGB → YUV).

Встраиваемые процессоры и микроконтроллеры

В ПЛИС, содержащих аппаратные процессорные ядра (например, ARM Cortex-A9 в Xilinx Zynq), BRAM может быть использована как:

  • Кэш-память второго уровня (L2 Cache).
  • Внутренняя память для микроконтроллеров (MicroBlaze, Nios II).
  • Буфер DMA (Direct Memory Access).

Криптография и безопасность

BRAM позволяет хранить ключи шифрования, S-блоки (Substitution boxes) для AES, DES и других алгоритмов, а также буферы для хэш-функций.

Сравнение с другими типами памяти в ПЛИС

BRAM vs Distributed RAM

  • Размер: BRAM — от 18 Кбит до 36 Кбит на блок; Distributed RAM — до нескольких сотен бит на логический элемент.
  • Скорость: BRAM работает на частотах до 500–600 МГц; Distributed RAM — до 300–400 МГц.
  • Задержка: BRAM — 1–2 такта; Distributed RAM — 0–1 такт.
  • Энергопотребление: BRAM потребляет меньше энергии на бит при больших объёмах.
  • Гибкость: Distributed RAM может быть произвольной ширины и глубины, но не подходит для больших массивов.

BRAM vs External RAM (DDR, SRAM)

  • Задержка: BRAM — 1–2 такта; внешняя память — 10–100 тактов (из-за шины и контроллера).
  • Пропускная способность: BRAM — до 1 Тбит/с (при параллельном использовании сотен блоков); внешняя память — до 50 Гбит/с (DDR4).
  • Объём: BRAM — до 10–50 Мбит на кристалл; внешняя память — до 64 Гбит и более.
  • Энергопотребление: BRAM — единицы ватт; внешняя память — десятки ватт.

Ограничения и недостатки

  • Фиксированный объём: Количество BRAM на кристалле ограничено (например, в Xilinx Kintex-7 — до 445 блоков по 36 Кбит, что составляет ~16 Мбит). Для задач, требующих десятков гигабит памяти, необходима внешняя память.
  • Конфликты портов: При двухпортовом доступе возможны коллизии, требующие дополнительной логики.
  • Синхронность: BRAM не поддерживает асинхронный доступ, что может быть неудобно для некоторых интерфейсов (например, SRAM с произвольным доступом).
  • Энергопотребление в статике: BRAM потребляет энергию даже при отсутствии операций чтения/записи (ток утечки), что критично для батарейных устройств.

Производители и реализации

Основные производители ПЛИС, использующих BRAM:

  • AMD (Xilinx): семейства Spartan, Artix, Kintex, Virtex, Zynq (блоки 18/36 Кбит).
  • Intel (Altera): семейства Cyclone, Arria, Stratix, Agilex (блоки M9K, M20K, MLAB — 9, 20 Кбит).
  • Lattice Semiconductor: семейства iCE, ECP, Mach (блоки EBR — 9 Кбит).
  • Microchip (Microsemi): семейства PolarFire, SmartFusion (блоки uSRAM — 20 Кбит).

Каждый производитель предлагает собственные IP-ядра (Intellectual Property cores) для конфигурирования BRAM, такие как Xilinx Block Memory Generator, Intel ALTSYNCRAM, Lattice Memory Module.

Источники

  1. Xilinx UG473: 7 Series FPGAs Memory Resources User Guide.
  2. Intel AN 306: Using Altera Memory Blocks in FPGAs.
  3. Lattice Semiconductor TN1260: Memory Usage Guide for LatticeECP3 Devices.
  4. Microchip UG0674: PolarFire FPGA Memory Architecture.
  5. Clive Maxfield, «FPGA: World Class Designs», 2009, Chapter 4: Memory.
  6. Документация стандарта IEEE 1800-2017 (SystemVerilog) — разделы по синтезу памяти.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →