Блок памяти 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.
Источники
- Xilinx UG473: 7 Series FPGAs Memory Resources User Guide.
- Intel AN 306: Using Altera Memory Blocks in FPGAs.
- Lattice Semiconductor TN1260: Memory Usage Guide for LatticeECP3 Devices.
- Microchip UG0674: PolarFire FPGA Memory Architecture.
- Clive Maxfield, «FPGA: World Class Designs», 2009, Chapter 4: Memory.
- Документация стандарта IEEE 1800-2017 (SystemVerilog) — разделы по синтезу памяти.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →