Контроллер памяти Spartan-6 FPGA |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Этот документ (перевод [1]) описывает блок контроллера памяти Spartan®-6 FPGA (memory controller block, MCB). Для реализации интерфейса с памятью на основе MCB должны использоваться один из двух инструментов: 1. Memory Interface Generator (MIG). Для традиционных дизайнов FPGA (без встроенных процессоров, non-embedded) см. руководство UG416 [2], где находится информация по реализации интерфейса с памятью с помощью утилиты MIG в составе ПО CORE Generator™. Этот документ также содержит информацию по отладке интерфейсов MCB. Примечание: утилита MIG для организации доступа к контроллеру SDRAM доступна в среде программирования Xilinx ISE [10] через меню Tools -> Core Generator... -> IP Catalog -> View by Function -> Memories & Storage Elements -> Memory Interface Generators -> MIG Virtex-6 and Spartan-6. Руководство содержит главы: 1. Обзор MCB, вводное описание Spartan-6 FPGA MCB. Приложение A, ссылки на дополнительную документацию, касающуюся разработки интерфейса памяти. Следующие документы также доступны для загрузки на сайте xilinx.com. • Spartan-6 Family Overview. Этот обзор показывает функции и варианты выбора продукции семейства Spartan-6. [1. Обзор MCB] MCB это специальный встроенный блок многопортового контроллера, который значительно упрощает задачу подключения устройств Spartan-6 к большинству стандартов памяти. MCB предоставляет высокое быстродействие, пониженное энергопотребление и быструю разработку - все это более высокого качества, чем большинство эквивалентных реализаций IP. Встроенная реализация MCB сохраняет значимые ресурсы FPGA, и позволяет пользователю сфокусироваться на более уникальных функциях дизайна FPGA. MCB предоставляет следующие функции и преимущества контроллера памяти Spartan-6 FPGA: • Поддержка стандартов памяти DDR, DDR2, DDR3 и LPDDR (Mobile DDR) • Производительность до 800 Mb/s (400 МГц double data rate) • До 4 ядер MCB в одном устройстве Spartan-6. Каждое ядро MCB содержит: - 4-, 8- или 16-разрядный одиночный компонент интерфейса памяти • Конфигурируемый выделенный многопортовый интерфейс пользователя для логики FPGA - От 1 до 6 портов на MCB в зависимости от конфигурации • Управление банками памяти - До 8 банков может быть открыто одновременно для повышения эффективности контроллера • Встроенный контроллер и физический интерфейс (PHY), предоставляющий: - Предсказуемые интервалы времени • Заранее определенная разводка внешних выводов (места I/O на корпусе) для каждого MCB - Упрощенный дизайн печатной платы • Поддержка общих опций и атрибутов микросхем памяти - Программируемая нагрузочная способность • Автоматическая калибровка задержки строба памяти и чтения входов данных - Подстройка взаимосвязи DQS (строб) и DQ (данные) для оптимальной производительности чтения • Опциональная автоматическая калибровка встроенного в кристалл FPGA терминирования входов для оптимального качества сигналов • Поддерживаемый Xilinx® инструментарий разработки CORE Generator™ и Embedded Development Kit (EDK): - Утилита Memory Interface Generator (MIG), входящая в состав ПО CORE Generator, упрощает разработку с применением MCB Блок-схема на рис. 1-1 показывает главные компоненты архитектуры ядра MCB. Всюду в этом описании MCB представлен так же, как и в memory IP tools ПО CORE Generator или рабочей среде EDK. Эти инструменты обычно генерируют файлы высокоуровневой обертки (IP Wrapper), которые реализуют примитив встроенного блока контроллера памяти и необходимую программную логику вместе с отображением портов, необходимые для полного решения. Например, на рис. 1-1 физический интерфейс MCB использует возможности основного блока ввода вывода (I/O block, IOB) для реализации внешнего интерфейса с памятью. Также используются ресурсы цепей общего тактирования ввода/вывода (I/O clock network). Рис. 1-1. Блок контроллера памяти (MCB) Spartan-6 FPGA (вид на IP Wrapper). Интерфейс пользователя MCB на обычной скорости передачи данных (single data rate, SDR) внутри FPGA может быть сконфигурирован для работы через порты, от 1 до 6. У каждого такого порта есть интерфейс команд и интерфейс чтения и/или записи данных. Два двунаправленных 32-битных и четыре однонаправленных 32-битных аппаратных порта в MCB могут быть сгруппированы для создания пяти различных конфигураций портов. Другие основные компоненты MCB: • Арбитр: определяет, какой порт сейчас имеет приоритет для доступа к микросхеме памяти. Выделенные ядра MCB в микросхемах Spartan-6 позволяют реализовать уровни быстродействия выше, чем эквивалентные решения IP, реализованные на логике FPGA. Из-за того, что чаще всего полоса пропускания канала памяти является узким местом для общей производительности системы, ядра MCB специально разработана для пользователей, которые ожидают получить максимум производительности для недорогого, малопотребляющего устройства FPGA. Каждое ядро MCB поддерживает интерфейс памяти со скоростями передачи данных, показанными в таблице 1-1. Пиковая производительность одного интерфейса памяти MCB вычисляется для трех доступных вариантов полосы пропускания интерфейса. Примечание: MCB поддерживает стандартный (Standard) и расширенный (Extended) режимы производительности, в зависимости от выбранных рабочих условий VCCINT. Пиковые производительности, показанные в таблице 1-1, представляют максимальную производительность, когда используется диапазон VCCINT в расширенном режиме производительности. Обратитесь к таблице 2 (Recommended Operating Conditions, рекомендуемые рабочие условия) и характеристики производительности (Performance Characteristics) в секции DS162, Spartan-6 FPGA Data Sheet: DC and Switching Characteristics для рабочих условий VCCINT и спецификаций производительности для режимов Standard и Extended. Таблица 1-1. Скорости передачи данных и пиковая полоса пропускания для каждого MCB.
Примечания: 1. Показан максимум скорости данных MCB, который не относится ко всем классам скоростей (speed grade) FPGA. См. DS162, Spartan-6 FPGA Data Sheet: DC and Switching Characteristics, для получения производительности в зависимости от speed grade. Устройства -3N speed-grade не поддерживают MCB. Количество доступных MCB в имеющемся устройстве Spartan-6 определяется по диапазону плотности логики, в который попадает устройство. Самое маленькое устройство (XC6SLX4) не содержит MCB, средние по плотности устройства содержат два MCB, и более крупные по плотности устройства содержат четыре MCB. Таблица 1-2 показывает количество поддерживаемых MCB для каждой комбинации устройство/корпус. Примечание: MCB разработан для одного компонента памяти x4, x8 или x16. Интерфейсы с несколькими компонентами в одном MCB (например, две микросхемы памяти x8, подключенные к MCB в режиме x16) не поддерживаются. Таблица 1-2. Поддержка MCB в разных комбинациях устройство/корпус.
Примечания: 1. Для устройств в корпусе CSG225 блоки MCB поддерживаются только в опциях интерфейса памяти x4 и x8, т. е. устройства LPDDR не могут поддерживаться. Кроме того, в этом корпусе доступно только 13 бит адреса MCB, что ограничивает максимальную плотности памяти до 256 Mb для DDR2 и 512 Mb для DDR и DDR3. Spartan-6 FPGA MCB поддерживает широкий диапазон типов памяти, конфигураций и плотностей, что показано в таблице 1-3. Таблица 1-3. Поддерживаемые конфигурации памяти.
Примечания: 1. MCB поддерживает single-die 4 Gb компоненты памяти (когда они доступны от производителей памяти) но не dual-die 4 Gb. Spartan-6 FPGA MCB поддерживается стандартным ПО и инструментами, как и другой софт и встраиваемые блоки IP, предоставляемые компанией Xilinx. Для обычных (т. е. без встроенных микроконтроллеров, non-embedded) дизайнов FPGA блоки MCB могут быть интегрированы в дизайн с помощью утилиты Memory Interface Generator (MIG), доступной в инструменте CORE Generator. Утилита MIG используется для генерации интерфейсов памяти для всех Xilinx FPGA. Она генерирует необходимые файлы RTL дизайна, файлы ограничений пользователя (user constraints files, UCF) и файлы скриптов для симуляции и реализации решений памяти, предоставленных Xilinx. В главе Getting Started руководства UG416 [2] содержатся подробные пошаговые инструкции о том, как использовать утилиту MIG для реализации интерфейсов памяти на основе MCB. Для embedded-дизайнов (например, с ядром процессора MicroBlaze™), GUI конфигуратор IP находится в инструментарии Xilinx Platform Studio из состава рабочей среды EDK, который можно использовать для указания характеристик интерфейса памяти. В таком процессе разработки MCB работает как нижележащая аппаратная реализация блока MPMC IP, который доступен в библиотеке EDK. В дополнение к настройке контроллера и атрибутов интерфейса памяти инструментарий генерирует необходимые программные мосты к шине PLB, Xilinx Cache Link (XCL), LocalLink (LL) или другим указанным интерфейсам для соединения периферийных устройств EDK с конечными портами контроллера памяти. [2. Функциональное описание MCB] MCB предоставляет простой, надежный интерфейс для подключения к памяти из одного компонента (одной микросхемы SDRAM). Интерфейс пользователя (MCB User Interface) устраняет сложность подключения DDR, так что больше ресурсов FPGA может быть направлено на уникальные аспекты дизайна. MCB может работать на скоростях, которые выше сравнимых по функционалу "soft"-решений, реализованных на логике FPGA. Со скоростями передачи данных до 800 Mb/s блок MCB более чем вдвое повышает быстродействие по сравнению с предыдущими недорогими решениями интерфейса памяти FPGA, повышая уровень полосы пропускания и/или расширяя разрядность шин памяти. В результате экономятся ресурсы логики FPGA и ресурсы I/O, которые иначе потребовались бы для коммуникации с микросхемой памяти. Рис. 2-1 расширяет блок-диаграмму MCB, представленную в Главе 1, чтобы показать основные сигналы, связанные с внутренним интерфейсом пользователя (User Interface) в FPGA, а также сигналы I/O, подключаемые к внешнему устройству памяти. Хотя User Interface может быть сконфигурирован для поддержки до 6 портов, для упрощения рис. 2-1 показывает сигналы только для одного двунаправленного порта. Рис. 2-1. Архитектура MCB с основными внешними (I/O) и внутренними сигналами. Имеется 3 базовых типа портов, которые могут быть реализованы в User Interface: • Порт чтения (Read port, однонаправленный) Каждый порт содержит путь для команды (command path) и путь для данных (datapath). Для однонаправленного порта command path реализован в паре с read-only или одиночным write-only datapath. Однако для двунаправленного порта одиночный command сделан общим для обоих путей datapath read и write для этого порта. На User Interface используются стеки FIFO для command path и datapath, чтобы организовать очередь запросов к памяти и управлять перемещениями данных из домена тактов пользователя в домен тактов контроллера памяти. Сигналы command path для порта используются при выдаче запросов к стекам FIFO команд. У стека command FIFO глубина программируется пользователем до 4 ячеек. В нем сохраняется тип инструкции (read, write, refresh и т. д.), адрес и длина пакета (burst length) связанные с запрошенной транзакцией памяти. Путь команды (command path) также включает флаги статуса заполненности и опустошения (full и empty), выходящие из стека command FIFO, они показывают, могут ли быть приняты новые запросы. Имеется 6 command FIFO, доступных аппаратно; конфигурация портов определяет, что доступно для User Interface (см. "Конфигурации порта"). Для дополнительной информации по сигналам command path см. "Подробное описание интерфейса". На datapath нижележащая аппаратура содержит 6 портов разрядностью 32-бита, два из которых изначально двунаправленные. Другие четыре порта изначально однонаправленные, но они могут также комбинироваться для создания двунаправленных портов. Всего возможно создать 5 конфигураций портов путем различных комбинаций этих шести аппаратных портов для реализации желаемого интерфейса пользователя (User Interface, см. "Конфигурации порта"). Ширина полей слова данных чтения и записи интерфейса пользователя естественно программируются путем выбора конфигурации. Стеки FIFO datapath имеют глубину 64 ячейки, позволяя пакетные передачи длиной до 64 слов данных от указанного начального адреса. В дополнение к полю слова данных стеки FIFO пути записи содержат поля бит маски, которые позволяют опционально маскировать записываемые данные на базе байта. Выходы заполненности (full), опустошения (empty), недогрузки (underrun), счетчика количества (count) и ошибки показывают текущее состояние стеков FIFO записываемых данных. Стеки FIFO данных чтения имеют подобный набор выходов информации о состоянии. Более подробно про сигналы read и write datapath см. "Подробное описание интерфейса". Арбитр внутри MCB использует механизм арбитража на основе слотов времени, чтобы определить от одного до шести портов User Interface, которые в настоящее время имеют доступ к памяти. Есть также методы, которые позволяют некоторым портам дать повышенный приоритет, так что они могут чаще получить доступ к памяти. Это обсуждается в разделе "Арбитраж". Логика управления банком в MCB позволяет открыть до 8 банков памяти одновременно, что позволяет контроллеру поддерживать высокий уровень эффективности доступа к данным по всем банкам. Дополнительно запросы чтения и записи памяти могут включать опциональный авто-предзаряд (auto-precharge), чтобы автоматически закрыть банк по завершении транзакции. Это повышает эффективность произвольного доступа к данным в пределах банка. MCB не выполняет любое переупорядочивание транзакций. Конфигурации порта. 5 возможных конфигураций порта для интерфейса пользователя (User Interface) показаны на рис. 2-2. В конфигурации 1, порты пользователя в действительности напрямую отображаются на 6 нижележащих физических аппаратных портов. Для других конфигураций диаграмма показывает, как физические порты соединяются для создания различных комбинаций портов пользователя. Как показано на рис. 2-2, утилита MIG всегда последовательно нумерует порты для User Interface начиная с 0, независимо от нижележащих номеров физических портов. Во всех пяти конфигураций портов command path, write datapath и read datapath в имеющемся порте всегда имеют отдельное тактирование, и поэтому могут быть подключены к независимым друг от друга доменам тактирования. Однако рекомендуется, чтобы все пути, связанные с имеющимся портом, удерживались в одном домене тактирования, чтобы упростить требования к интерфейсу. Рис. 2-2. Возможные конфигурации порта для интерфейса пользователя. Утилита MIG в инструментарии CORE Generator™ предоставляет простой графический интерфейс для настройки количества и типа портов, требуемых для определенного приложения. Для дизайнов, которые требуют меньшую ширину шин, чем максимальная, или меньшую функциональность User Interface, неиспользуемые порты могут быть просто запрещены через интерфейс MIG. В случае, когда требуются дополнительные порты вне этих 6 портов, предоставленных в MCB, в логике FPGA могут быть реализованы мосты портов с добавочными механизмами арбитража, чтобы расширить возможности порта MCB. Арбитраж. Арбитр внутри MCB использует механизм арбитража на основе слотов времени, чтобы определить, какой порт User Interface в настоящий момент может получить доступ к памяти. Имеется 12 тайм-слотов в таблице арбитража, как показано в таблице 2-1. Каждый тайм-слот соответствует одному периоду такта памяти. Порядок приоритета порта в имеющемся тайм-слоте определяется по номерам портов, введенным в столбцы от Priority 1 до 6 с перемещением слева направо по таблице. Таблица 2-1. Таблица арбитража MCB с конфигурацией Round Robin.
Таблица 2-1 показывает случай, где User Interface конфигурируется на максимум 6 портов. Если MCB сконфигурирован на меньше, чем 6 портов, таблица арбитража автоматически подстраивается, чтобы были только столбцы приоритета только для выбранного количества портов. Во время имеющегося периода тактов арбитр определяет, какой порт обрабатывается в каком тайм-слоте. Позиция перемещается слева направо по столбцам приоритета, чтобы найти первый порт в той строке, у которой есть команда, ожидающая в его command FIFO. Этот порт тогда обрабатывается с выполнением ожидающей команды, и арбитр перемещается к следующему тайм-слоту на следующем такте. Если нет порта с командой в таком столбце, то в этом тайм-слоте никаких действий не производится, и такт теряется. Порядок приоритетов порта в таблице арбитража полностью программируется. Утилита MIG по умолчанию предоставляет схему обработки приоритетов round-robin, как показано в таблице 2-1, где всем портам дается самый высокий приоритет в 2 из 12 доступных тайм-слотов. Однако утилита MIG также предоставляет настраиваемую опцию, где пользователь может определить любую таблицу арбитража. Это позволяет для некоторых портов получить улучшенный доступ к устройству памяти. Однако эту опцию следует пользоваться с осторожностью, чтобы гарантировать, что все присвоенные приоритеты не предотвращают доступ к устройству памяти любых активных портов. Можно сконфигурировать User Interface для получения 5 портов (двух 32-битных двунаправленных и трех 32-битных однонаправленных, с одним запрещенным 32-битным однонаправленным портом). В этом случае таблица арбитража уменьшается до 10 тайм-слотов. Когда количество тайм-слотов случайно делится на количество портов, то гарантируется, что каждый порт получит эквивалентный доступ к устройству памяти, если это необходимо. Программирование. MCB глубоко конфигурирутся через набор атрибутов устройства памяти и контроллера, позволяя поддерживать несколько стандартов и конфигураций памяти. Утилита MIG из инструментария CORE Generator и IP Configurator в среде разработки Xilinx Platform Studio с наличием EDK предоставляют простой способ конфигурирования атрибутов MCB для реализации желаемого интерфейса памяти (например, см. главу "Getting Started" из [2]). Таблицы 2-2 и 2-3 перечисляют соответственно атрибуты устройства памяти и контроллера, поддерживаемые MCB. Предоставлены специфические для HDL имена параметров, возможные значения и описания, связанные с каждым атрибутом. Главным образом утилита MIG или инструменты IP Configurator отвечают за установку значений всех параметров, так что их значения не должны модифицироваться напрямую.
Параметры интервалов времени памяти берутся из даташитов вендоров, и автоматически назначаются инструментами, когда выбирается поддерживаемое устройство. Параметры интервалов времени могут быть указаны при создании пользовательского устройства (см. "Setting Controller Options" в [2]). Подробное описание интерфейса. Как показано в блок-схеме архитектуры на рис. 2-1, у MCB есть 2 базовых интерфейса: внутренний User Interface для логики FPGA, и внешний интерфейс к устройству памяти с предопределенными ножками выводов I/O. В следующих подсекция обсуждаются все сигналы, связанные с этими двумя интерфейсами. В остальной части этого документа все описания ссылаются на интерфейс IP wrapper, полученный от CORE Generator или инструментария EDK, но не к интерфейсу примитива нижележащего блока контроллера памяти. Интерфейс пользователя (сторона фабрики кристалла). User Interface содержит все необходимые сигналы для логики пользователя в FPGA, чтобы взаимодействовать с command path и datapath портов MCB. Он также включает сигналы основного тактирования и сброса MCB, как и сигналы, относящиеся к операциям калибровки, отладки и самообновления. User Interface может быть сконфигурирован на любой один из 6 портов, как показано в разделе "Конфигурации порта". Сигналы тактов, сброса, калибровки. Таблица 2-4 показывает сигналы, связанные с тактированием, сбросом и калибровкой MCB User Interface. Таблица 2-4. Сигналы Clock, Reset и Calbration.
Command Path. Таблица 2-5 определяет сигналы, связанные с путем команд MCB User Interface. Все имена сигналов порта имеют префикс pX, где X представляет номер порта (например сигналы порта 0 имеют префикс p0, порт 1 префикс p1, и так далее). Таблица 2-5. Сигналы Command Path.
Write Datapath. Таблица 2-6 показывает все сигналы, связанные с путем записи MCB User Interface. Все имена сигналов порта имеют префикс pX, где X представляет номер порта (например сигналы порта 0 имеют префикс p0, порт 1 префикс p1, и так далее). Таблица 2-6. Сигналы Write Datapath.
Read Datapath. Таблица 2-7 показывает все сигналы, связанные с путем чтения MCB User Interface. Все имена сигналов порта имеют префикс pX, где X представляет номер порта (например сигналы порта 0 имеют префикс p0, порт 1 префикс p1, и так далее). Таблица 2-7. Сигналы Read Datapath.
Сигналы самообновления. Таблица 2-8 показывает сигналы self-refresh, доступные через интерфейс пользователя. Самообновление подробнее рассматривается в Главе 4. Таблица 2-8. Сигналы Self-Refresh.
Интерфейс устройства памяти. Memory Device Interface содержит все необходимые сигналы для обмена с внешним устройством памяти. Все эти сигналы (таблица 2-9) в микросхемах логики Spartan-6 выведены на предварительно определенные выводы корпуса. См. See UG385 [4] для подробной информации по разводке выводов MCB каждой комбинации устройство/корпус. Дополнительно программный модуль калибровки (soft calibration module), сгенерированный MIG, требует выделение дополнительного вывода (RZQ) для всех дизайнов MCB. RZQ требуемый вывод, однако его местонахождение может быть перемещено в пределах банка MCB. Когда калиброванный вход остановки (Calibrated Input Termination) выбирается утилитой MIG, вывод ZIO также генерируется для использования в модуле программной калибровки. Место вывода ZIO может быть также перемещено, но должно быть размещено на связанном I/O (т. е. на допустимом выводе корпуса) в пределах банка MCB. См. секцию "Setting FPGA Options" в UG416 [2] для получения дополнительной информации по выводам RZQ и ZIO. Примечание: все предопределенные выводы возвращаются в состояние обычных ножек ввода/вывода (general-purpose I/O), когда используется MCB. Дополнительно не используемые выводы из активного MCB также возвращаются к состоянию general-purpose I/O. Это включает ножки старшей части адреса или ножки адреса банка, которые не нужны для устройства памяти определенной плотности, биты данных DQ, которые не нужны для определенной разрядности интерфейса, сигналы сброса и ODT, которые не нужны для стандарта памяти, и стробы UDQS / UDQS_n для интерфейсов x4 или x8. Все другие выводы интерфейса требуются для всех дизайнов на основе MCB. Дополнительно есть 2 исключения из правил восстановления состояния ножек general-purpose I/O: a. Парные выводы маски данных (Data Mask, DM), если используется только LDM, то UDM будет потерян как вывод general I/O. Выводы маски данных требуются во всех дизайнах MCB для поддержки запросов пакетных передач переменной длины (variable burst length requests) в интерфейсе пользователя. Таким образом, оба вывода LDM и UDM недоступны как general I/O всякий раз, когда используется MCB. Таблица 2-9. Сигналы Memory Device Interface.
Примечание: обратитесь к "PCB Layout Considerations" в Главе 3 для получения требований, связанных с выводами CS#, ODT и CKE устройства памяти. [3. Разработка с использованием MCB] В этой главе предоставляется подробная информация о том, как следует проводить дизайн с использованием блока MCB микросхем Spartan-6 FPGA. Здесь содержаться следующие секции: • Процесс разработки Процесс разработки. Имеется 2 поддерживаемых способа реализовать дизайн для использования MCB: • Для не встраиваемых проектов (Non-embedded, где нет процессорного ядра): - Обычный дизайн FPGA с помощью инструментария Xilinx ISE [10]. • Для проектов, где есть процессорное ядро (Embedded): - Система с процессором на основе FPGA, применяется инструментарий EDK. Оба процесса предоставляют простой метод разработки надежного интерфейса к устройствам внешней памяти. Пошаговый мастер с графическим интерфейсом сопровождает создание дизайна MCB, чтобы он был сконфигурирован и снабжен параметрами, удовлетворяющими требованиям приложения. Утилита MIG в действительности имеет 2 уровня обертки над аппаратурой: lower-level wrapper (mcb_raw_wrapper.v) и top-level wrapper (например, memc3_wrapper.v). Lower-level wrapper реализует в себе все необходимые блоки кремния (MCB, I/O и т. д.) и программную логику (soft calibration module), требуемую для решения. Он также предоставляет доступ ко всем сигналам, связанным с нижележащей реализацией аппаратуры портов User Interface и логики калибровки. Top-level wrapper обрабатывает переназначение сигналов, связывание при необходимости сигналов lower-level, и передачу вниз значений параметров к lower wrapper, основываясь на выбранных пользователем параметрах в утилите MIG. Top-level wrapper предоставляет прозрачный интерфейс только к тем сигналам, которые нужны для реализации дизайна на основе MCB, как это сконфигурировано процедурой на основе утилиты MIG. Например, хотя lower-level всегда показывает в User Interface все 6 обычных 32-битных порта, top-level wrapper переназначает сигналы, связывает не используемые порты, и склеивает шины для предоставления интерфейса порта таким, как его ожидает пользователь, как например один 64-битный порт. Top-level wrapper это одна из вещей, которая впоследствии интегрируется в общий большой дизайн FPGA. В этом руководстве документируется lower-level wrapper (mcb_raw_wrapper.v). Параметры и сигналы перечислены в Главе 2, все они описаны в контексте этого lower-level wrapper. Эта обертка не меняется при различных выборах в графическом мастере настройки проекта утилиты MIG, в то время как top-level wrapper настраивается на основе выбора параметров пользователем. Дополнительно процесс разработки embedded-систем (на основе EDK) использует тот же lower-level wrapper как фундамент для создания периферийного устройства Multi-Port Memory Controller (MPMC). IP configurator в XPS позволяет пользователю добавить необходимые программные мосты поверх lowerlevel wrapper, чтобы создать необходимые периферийные интерфейсы, такие как: • Интерфейс PLB Рис. 3-1 показывает, как lower-level wrapper используется как для процесса дизайна non-embedded (с помощью MIG), так и для embedded (на основе EDK).
Рис. 3-1. Общая обертка над аппаратурой низкого уровня (Lower-level Wrapper) для Non-embedded и Embedded дизайна. CORE Generator Tool. Рис. 3-2 показывает разработку non-embedded (обычная логика, без процессорного ядра) дизайна FPGA на верхнем уровне для интегрирования интерфейса памяти на основе MCB. Глава "Getting Started" в UG416 [2] предоставляет подробное описание фазы 1 этой процедуры разработки. Фазы 2 и 3 выходят за рамки описания в этом документе, однако подробные инструкции по процессу использования инструментария ISE можно найти в библиотеке Xilinx Documentation Library.
Рис. 3-2. Процесс разработки с использованием MCB для Non-embedded (обычных) приложений FPGA. Поддерживаемые устройства памяти. В таблице 3-1 предоставлен список микросхем памяти, проверенных в работе с MCB на платформе тестирования аппаратуры (Xilinx hardware verification platform). Эти устройства можно выбрать в GUI утилиты MIG (или EDK) из выпадающего списка поддерживаемых устройств. Xilinx будет добавлять устройства в выпадающий список утилиты MIG в будущих релизах, но эти устройства получат верификацию "simulation only" (только для симуляции). Дополнительно в утилите MIG могут быть созданы пользовательские устройства; однако они не будут иметь симуляции или аппаратной верификации Xilinx. Для дополнительной информации см. секцию "Setting Controller Options" в UG416 [2]. Таблица 3-1. Микросхемы памяти, поддерживаемые MCB (емкость памяти указана в битах).
Симуляция. Модель симуляции нижележащего MCB в обертке MIG (или EDK) шифруется, как это описано стандартом Verilog LRM-IEEE Std 1364-2005. Это устроено подобно другим IP, предоставляемым Xilinx, как например трансивер GTP и блоки Integrated Endpoint для дизайна PCI Express®. Xilinx поддерживает следующие симуляторы для этого метода шифрования: ModelSim 6.4b и выше. Шифрованная модель MCB компилируется автоматически, когда запускается обычный скрипт COMPXLIB, предоставленный подходящей версией симулятора, доступного на компьютере. Когда запускается симуляция дизайна, основанного на Verilog, должна быть ссылка на библиотеку secureip. Для большинства симуляторов это можно осуществить использованием ключа -L в аргументе симулятора, такого как -L secureip. Примечание: если в качестве языка дизайна используется VHDL, требуется mixed-language license для ModelSim, чтобы симулировать дизайны, содержащие MCB. Для дополнительной информации по симуляции блоков IP с использованием методологии secureip, см. UG626 [5]. Утилизация ресурсов FPGA. Обертка, сгенерированная графическим интерфейсом утилиты MIG (или EDK), встраивает в себя все ресурсы, необходимые для реализации интерфейса с памятью на основе MCB. Для большинства устройств файлы обертки просто управляют переназначением имен сигналов и соединениями между ресурсами кремния (например, соединениями между блоками MCB и I/O), поэтому здесь не потребляется значительное количество логики FPGA. Однако модуль программной калибровки (soft calibration module), содержащийся в обертке, потребляет небольшое количество ресурсов логики FPGA. Дополнительно есть несколько специфических требований для MCB (см. ниже раздел "Тактирование"), что в результате задействует некоторые общие ресурсы тактирования. Таблица 3-2 показывает утилизацию ресурсов, связанных с дизайном MCB, исключая логику, требуемую для дизайна пользователя при управлении портами User Interface. Эта таблица использует интерфейс DDR3 с 8 банками, дифференциальные стробы и маскирование данных, чтобы вычислить максимальное количество используемых выводов. Другие стандарты памяти и конфигурации используют меньше выводов. Таблица 3-2. Утилизация ресурсов для каждого интерфейса с памятью на основе MCB.
Тактирование. Эта секция описывает требования к тактированию для реализации интерфейса с памятью на основе MCB. Утилита MIG (или EDK) автоматически генерирует инфраструктуру тактирования, которая полностью удовлетворяет этим требованиям. MCB требует 3 базовых типа тактов: • Системные такты (MCB system clock), определяющие рабочую частоту контроллера памяти физический интерфейс к внешней микросхеме памяти. Рис. 3-3 показывает рекомендуемую схему распространения системных тактов MCB и тактов калибровки. Блоки MCB, размещенные в регионах I/O слева и справа в устройстве, и они таким образом должны управляться от цепи тактирования I/O. Цепь тактирования I/O разработана для значительно больших частот, чем глобальная цепь тактирования, позволяя интерфейсам памяти работать на скоростях до 800 Mb/сек. Примечание: CLKOUT0 и CLKOUT1 это только выходы PLL, которые можно подключить к драйверу BUFPLL_MCB. Эти соединения должны быть выполнены точно так, как показано на рис. 3-3. Рис. 3-3. Рекомендуемое распространение системных тактов и тактов калибровки. Чтобы создать системные такты нужной частоты на цепи тактирования I/O, внешний источник тактов подает импульсы на один из блоков PLL на центральном столбце устройства. Частота внешних тактов не критична, пока блок PLL может синтезировать из неё нужные системные такты MCB. Обычно желательно, чтобы PLL размещалась ближе к центру устройства, чтобы минимизировать физическую дистанцию между PLL и блоком BUFPLL_MCB. Это расположение PLL настоятельно рекомендуется для больших устройств с шестью блоками PLL. PLL генерирует два выхода системных тактов: sysclk_2x и sysclk_2x_180, работающие на двойной частоте от желаемой тактовой частоты памяти (например, для интерфейса 667 Mb/сек DDR2 с эквивалентной частотой памяти 333 МГц, системные такты устанавливаются на 667 МГц). Фаза этих двух системных тактов сдвинута на 180 градусов друг относительно друга. Только две линии тактов доступно на каждой стороне устройства, чтобы управлять цепями тактирования I/O от блоков PLL. Эта пара системных тактов использует эти 2 линии тактирования, чтобы подключить их к блокам MCB с левой и правой стороны устройства. Таким образом для устройств, где имеется 4 блока MCB, 2 блока MCB, находящиеся на одной стороне устройства, должны совместно использовать одну и ту же пару системных тактов, поэтому они должны работать на одинаковой скорости передачи данных (data rate), хотя реализуемые стандарты памяти могут отличаться. Блоки DCM не имеют доступа к цепи тактов I/O, и поэтому DCM не может использоваться для тактирования блоков MCB. Также можно управлять блоками MCB на обоих сторонах устройства от одного блока PLL. В этом случае два блока BUFPLL_MCB (по одному на каждую сторону устройства) должны получать сигнал от одного и того же общего блока PLL. Когда пара сигналов системных тактов достигает цепи тактов I/O, они дополнительно получают буферирование драйвером BUFPLL_MCB. Этот драйвер также создает стробы разрешения тактирования, которые требуются для MCB: pll_ce_0 и pll_ce_90. Эти атрибуты примитива BUFPLL_MCB должны быть установлены следующим образом, чтобы создать необходимое поведение строба разрешения тактов для блоков MCB: • LOCK_SRC = "LOCK_TO_0" Прошедшие через буфер такты полной системной частоты (2X такты) используются на слое PHY (физические сигналы) интерфейса, чтобы создать сигналы double data rate (DDR) на выводах I/O (например, такты на частоте 667 МГц используется для генерации эффективных сигналов 667 Mb/сек DDR на выводах I/O). Схема делителя на 2 в MCB создает традиционную тактовую частоту памяти (например, 333 МГц для интерфейса 667 Mb/s DDR). Эти 1X такты управляют контроллером, арбитром и другой логикой, работающей на 1X частоте тактов (single data rate, SDR). Тактовая частота mcb_drp_clk, относящаяся к калибровке, должна генерироваться блоком PLL, и должна быть синхронизирована по фазе (т. е. совпадать по фазе) с доменом тактов sysclk_2x. Скорость калибровки (частота калибровки) ограничена нормальным статическим анализом времени, с типовой достижимой частотой 100 МГц. Обычно должна использоваться тактовая частота калибровки как минимум 50 МГц, чтобы MCB завершил операции калибровки за разумный период времени. В дизайне используется следующий набор пользовательских тактов на портах User Interface (с номерами портов X = 0 .. 5): pX_cmd_clk: такты пользователя Command FIFO для тактирования Address, Instruction и Burst Length из логики FPGA в FIFO. Такты пользователя полностью асинхронны с системными тактами и тактами калибровки, так что они могут работать на любой частоте, как того диктует логика дизайна FPGA. Стеки FIFO в составе MCB обрабатывают необходимые переходы между доменами тактов. Для наилучшей утилизации доступной полосы пропускания памяти частота тактов пользователя должна быть установлены равной частоте (или больше), определенной соотношением User Interface и интерфейса устройства памяти. Например: • Для интерфейса DDR3 800 Mb/s на частоте тактов памяти 400 МГц и устройством памяти x8 бит получается результат передачи 16 бит данных 16 за один такт (по 8 бит на каждый перепад тактовой частоты памяти). Хотя это технически не требуется, также настоятельно рекомендуется, чтобы все три тактовых частоты пользователя для порта (pX_cmd_clk, pX_wr_clk и pX_rd_clk, здесь X определяется номером порта от 0 до 5) управлялись от одного и того же источника из логики FPGA, чтобы избежать сложного тайминга и проблем синхронизации в дизайне пользователя. Модификация Clock Setup. По умолчанию утилита MIG настраивает инфраструктуру тактирования, подразумевая, что входная частота тактов пользователя (CLKIN1 для PLL) работает на частоте тактов памяти. Чтобы изменить настройку тактирования для создания необходимых тактов MCB от другой тактовой частоты или для подстройки частот тактов пользователя или тактов калибровки, могут быть подстроены следующие параметры PLL на верхнем уровне примера MIG или дизайна пользователя: • Cx_CLKFBOUT_MULT Здесь x представляет номер блока MCB. Есть 2 опции для определения корректных значений для этих параметров: 1. Использовать Clocking Wizard, находящийся в инструменте CORE Generator, чтобы определить подходящие настройки параметров на основе желаемых входных и выходных тактовых частот PLL. Выберите ручной выбор (Manual Selection) и примитив PLL_BASE в открывающей странице диалога для гарантии, что используется PLL. Только перечисленные выше значения параметров PLL, сгенерированные Clocking Wizard, должны быть перемещены обратно в дизайн MIG. Никакой другой вывод из Clocking Wizard не требуется. Clocking Wizard также определяет результирующее дрожание выходной частоты (output jitter) из специфичной конфигурации PLL, чтобы её можно было использовать для проверки допустимости основных системных тактов MCB на предмет требований устройства памяти по джиттеру входных тактов. 2. Обратитесь к главе "PLL" руководства UG382 [6], чтобы проверить правильность установок перечисленных выше параметров PLL для желаемых входных и выходных частот PLL. Этот метод требует лучшего понимания таких аспектов, как сохранение рабочей частоты PLL VCO в указанных пределах. Миграция и банки памяти. MCB, находящийся на левой стороне (для устройств с двумя MCB) или находящихся слева внизу (для устройств с четырьмя MCB) устройства, наиболее гибкие для разработки в большинстве ситуаций (см. рис. 3-4). Заранее определенные выводы MCB в этом месте имеют меньшее количество "многофункциональных" функций вывода, в то время как MCB на правой стороне устройства имеют тенденцию использовать более многофункциональные выводы.
Рис. 3-4: MCB3 более предпочтительное место для миграции и гибкости дизайна. Например, некоторые выводы банка 1 MCB совместно используются ножками Byte-wide Peripheral Interface (BPI), которые могут использоваться для конфигурирования устройства Spartan-6 от параллельной памяти FLASH. Эти выводы двойного назначения могут использоваться или для BPI, или для интерфейса MCB, но никак для обоих функций сразу. Таким образом, следует учесть другие компоненты в системе, как они будут подключаться к устройству Spartan-6, когда Вы планируете реализацию интерфейсов MCB. Интерфейсы MCB на обоих сторонах устройства имеют выводы, которые совместно используются для выводов глобальных тактов (global clock, GCLK) и выводов PCI, однако MCB слева (или слева внизу) имеют меньше ограничений по принудительному использованию выводов. Дополнительно есть возможность миграции между членами семейства микросхем Spartan-6 в том же типе корпуса (например, миграция с устройства LX16 на устройство LX25 в том же самом корпусе CSG324), сохраняя при этом тот же самый блок MCB с заранее определенными выводами на корпусе. Это справедливо для всех размещений MCB. Обычно можно мигрировать "вверх" или "вниз" с любого определенного устройства, как минимум при одной и той же плотности логики в том же самом корпусе. Обратитесь к руководству Spartan-6 Family Overview для получения подробной информации по доступным устройствам и типам их корпусов. Разводка печатной платы. В этой секции перечислены моменты, которые нужно учитывать при планировании разводки печатной платы (PCB), когда в системе нужно применить интерфейс к памяти на основе MCB. Также следует обратиться к руководству Spartan-6 FPGA PCB Designer’s Guide, чтобы получить информацию по правильной развязке питания устройства, общему распределению потребляемой мощности в системе, и другими общими рекомендациями по разводке PCB. Дополнительные ссылки на анализ печатной разводки платы и целостности сигналов интерфейсов памяти DDR можно найти в ссылках Приложения А. Все вычисления длины проводников на PCB подразумевают среднюю задержку сигнала 165 пикосекунд на дюйм проводника. Общие рекомендации по разводке: • Для разводки сигналов между памятью и FPGA должны использоваться только внутренние слои PCB. Переходные отверстия для соединения от шариковых выводов компонента до внутреннего слоя исключаются из этого требования. Рекомендации по разводке Data, Data Mask и Data Strobe. Сигналы данных (Data, DQ), маски данных (Data Mask, DM) и стробирования данных (Data Strobe, DQS) должны получать самый высокий приоритет (т. е. они должны быть разведены в первую очередь и быть максимально короткими), потому что это самые высокоскоростные сигналы DDR. • Сигналы DQ, DM и DQS должны быть разведены в группе (на байт). Каждая группа должна иметь одинаковую нагрузку и разводку, чтобы сохранить тайминг и целостность сигналов. Рекомендации по разводке Address, Control и Clock. Когда группы данных разведены, следующие по самому высокому приоритету это дифференциальные такты (CK / CK_N). Эти такты должны быть разведены первыми, потому что все длины проводников сигналов адреса и управления должны опираться на длину трасс дифференциальных тактов на PCB, что возможно понадобится корректировать по мере продолжения выполнения работы по разводке. • Длины проводников от CK до CK_N должны совпадать (±10 mil). Дополнительные требования дизайна PCB. В дополнение к уже перечисленным рекомендациям по разводке PCB, описанным в этой секции, нужно реализовать следующие требования к дизайну печатной платы: • Вывод сигнала выборки с активным лог. 0 (Chip Select, CS#) целевой памяти должен быть подключен к земле платы. Из-за того, что MCB поддерживает подключения только к одной микросхеме памяти, он не предоставляет сигнал для управления входом CS#. За дополнительной информацией при необходимости обращайтесь к поставщику Вашей памяти. Одновременное переключение выхода. Как отмечено в блок-диаграмме Главы 1, MCB использует основные блоки ввода/вывода (I/O blocks, IOB), связанные с заранее определенными местами расположения выводов на корпусе, чтобы создать внешний интерфейс к устройству памяти. Утилита MIG автоматически конфигурирует эти места IOB, чтобы реализовать требуемый стандарт I/O для выбранного типа памяти (т. е. SSTL18 для DDR2, SSTL15 для DDR3). Аппаратные характеристики интерфейсов на базе MCB показывают, что нет ограничений, связанных с одновременным переключением выхода (Simultaneous Switching Output, SSO) когда используются заранее определенные места размещения IOB вплоть до его максимального расширения (т. е. на максимальное количество выводов данных и адреса на интерфейсе). Обратитесь к руководствам DS162 [8] и UG361 [9] для получения дополнительной информации по характеристикам SSO. Когда сигналы размещаются на любых остальных выводах в банке, то рекомендуется их использовать следующим образом: одиночный (single-ended, не дифференциальный) выход с малой нагрузочной способностью (low drive strength), стандарт без терминирования LVCMOS 4 mA или LVCMOS 2 mA. [4. Функционирование MCB] В этой главе предоставляется подробная информация о том, как работает Spartan®-6 FPGA MCB. Здесь содержаться следующие секции: • Последовательность запуска (Startup Sequence) Последовательность запуска. Рис. 4-1 показывает процедуру startup для MCB. После того, как FPGA полностью сконфигурирована, произошел захват PLL и генерируются системные такты, блоком MCB автоматически выполняются некоторое количество шагов по инициализации и калибровке MCB, чтобы подготовить его нормальное функционирование. Рис. 4-1. MCB Startup Sequence. Замечания по рис. 4-1: 1. Модуль программной калибровки (soft calibration module) реализует некоторые аспекты фаз калибровки 1, 2 и 3. Первая важная операция запуска это фаза 1 калибровки. На этом шаге модуль программной калибровки измеряет значение внешнего резистора на выводе RZQ, чтобы определить желаемое значение встроенного в кристалл входного импеданса терминирования (on-chip Input Termination) для нескольких жестко определенных на корпусе микросхемы выводов MCB (например, шины данных DQ). Это происходит только тогда, когда пользователь выбрал опцию Calibrated Input Termination в графическом интерфейсе утилиты MIG (см. секцию "Setting FPGA Options" руководства UG416 [2]). Иначе подразумевается приблизительное не калиброванное встроенное в чип терминирования или внешнее терминирование, и этот шаг запуска пропускается. Второй важный шаг последовательности запуска это загрузка регистров режима микросхемы памяти (memory device mode registers) желаемыми параметрами. После того, как устройство памяти сконфигурировано, начинается фаза 2 калибровки. Эта фаза добавляет задержку ко входному пути стробов DQS, входящих в FPGA. Цель этого - сдвинуть стробы DQS в центр окна захвата читаемых данных (Read Data capture window). После того, как все операции запуска (startup sequence) завершены, MCB входит в нормальный рабочий режим. Команды (Commands) и данные (Data) могут быть загружены в стеки FIFO интерфейса пользователя (User Interface FIFO), пока выполняется процедура запуска, но ни одна команда не будет выполнена, пока калибровка не завершится и блок не войдет в режим нормального функционирования. В нормальном рабочем режиме soft calibration module постоянно мониторит значения задержек (tap delay values) элемента IDELAY, используемого для задержки входного пути DQS (подробнее про IDELAY см. руководство "Spartan-6 FPGA SelectIO™ Resources"). Это предназначено для измерения любого изменения значения tap delay из-за изменения напряжения или температуры. Если было определено смещение значения tap delay, то счетчик tap delay на стробе DQS входного пути может быть подстроен так, чтобы удержать его по центру Read Data capture window. Обновление значений IDELAY происходит во время операций обновления памяти (REFRESH), чтобы избежать влияния внешних факторов на нормальную работу с данными и эффективность контроллера. Фаза 3 калибровки называется "continuous DQS tuning", т. е. повторяющиеся подстройки DQS. Подробнее про все фазы калибровки рассказано в следующей секции "Калибровка". Калибровка. Чтобы достичь оптимальной целостности сигналов и максимально допустимых пределах тайминга (и следовательно наивысшей производительности) для интерфейса памяти, MCB автоматически выполняет несколько форм калибровок, что кратко описано выше в секции "Последовательность запуска". Жесткая логика калибровки в MCB и программный модуль калибровки, генерируемый утилитой MIG (или EDK) работают совместно для реализации надежной и гибкой схемы калибровки. Ниже подробно обсуждается каждая фаза калибровки. Примечание: описания фаз калибровки 2 и 3 в этой секции подразумевают, что атрибут C_MC_CALIBRATION_MODE установлен в значение "CALIBRATION", как это описано выше во врезке с таблицей 2-2. Фаза 1: Input Termination. Встроенное в кристалл терминирование снижает количество компонентов на плате и улучшает целостность сигналов, потому что терминирование перемещается максимально близко, насколько это возможно, к конечной точке передачи сигнала. Графический интерфейс утилит MIG и EDK позволяет выбрать опцию "Calibrated Input Termination" для жестко заданных выводов корпуса блока MCB. Эта функция создает встроенное в кристалл терминирование входов для выводов MCB, которое калибруется на основе внешнего резистора, делая терминирование более точным по сравнению с опцией "Uncalibrated Input Termination". Модуль программной калибровки (soft calibration module) использует два вывода I/O, RZQ и ZIO, генерируемых утилитой MIG (или EDK), чтобы выполнить калибровку терминирования входа. RZQ является необходимым выводом для всех дизайнов MCB. Когда используется Calibrated Input Termination, должен быть подключен резистор между выводом RZQ и землей, номинал которого в 2 раза (2R) больше желаемому входному импедансу (т. е. резистор 100? для достижения эффективного терминирования 50?). RZQ должен оставаться не подключенным выводом (no-connect, NC) для дизайнов, которые не используют Calibrated Input Termination. Дополнительно вывод RZQ должен находиться в том же банке I/O, что и выводы интерфейса памяти. Вывод ZIO требуется только для дизайнов, использующих Calibrated Input Termination, и он должен оставаться не подключенным (т. е. не должен подключаться к любому проводнику печатной платы), и назначенным на допустимый вывод корпуса (т. е. соединенным с I/O) в пределах банка MCB. Размещения по умолчанию для выводов RZQ и ZIO можно найти в файлах UCF. Модуль программной калибровки (soft calibration module) полагается на напряжение питания VREF, требуемое для стандартов SSTL I/O, чтобы выполнить необходимую калибровку терминирования входа. Память LPDDR не использует калиброванное терминирование входов или стандарт I/O типа SSTL, и поэтому не требует VREF. Фаза 1 калибровки эффективно измеряет значение внешнего резистора 2R, и программирует блоки I/O выводов MCB для создания распределенного терминирования между VCCO и GND. Эта схема создает эквивалент терминирования (по теореме Thevenin) для VCCO / 2 с сопротивлением R, как показано на рис. 4-2. Результирующее терминирование входа запрещается, когда вывод MCB управляется как выход (например вывод данных DQ во время транзакции Write) и разрешается во все другое время, чтобы правильно терминировать приходящие сигналы.
Рис. 4-2. Calibrated Input Termination. Фаза 2: центрирование DQS. Для оптимальной производительности и максимальных допусков по интервалам времени перепады строба DQS должны быть центрированы в окне чтения данных (Read Data capture window) чтобы правильно срабатывал триггер захвата входных данных. Фаза 2 калибровки отвечает за это центрирование DQS. Выходные ножки устройства памяти DDR передают данные чтения Read Data (DQ) и стробы DQS, выровненные по срезу для выводов входов FPGA, как показано на рис. 4-3. Для надежного функционирования строб DQS должен быть задержан по отношению к битам DQ, чтобы они были захвачены на достоверных Read Data шины данных и не попадали на регион переключения. Во время этой фазы счетчик задержки tap блока IDELAY во входном пути строба DQS инкрементируется со сдвигом внутреннего сигнала DQS на триггере захвата, так чтобы перепад попадал на середину окна чтения данных, как показано на рис. 4-3.
Рис. 4-3. Фаза 2 калибровки - центрирование DQS. Фаза 3: постоянная подстройка DQS. Изменения напряжения и температуры в процессе работы могут изменить значения IDELAY tap. Из-за того, что строб DQS задерживается на половину периода бита больше, чем биты DQ, используется значительно большее количество интервалов IDELAY. Таким образом, если значение задержки tap элементов IDELAY поменяется в ответ на дрейф напряжения или температуры, задержка входного пути строба DQS будет иметь не соответствующий сдвиг относительно бит DQ. Чтобы компенсировать сдвиг стробов DQS в соответствии с изменениями температуры, фаза 3 калибровки постоянно активируется во время нормального функционирования. Это использует soft calibration module для постоянного мониторинга значений задержки tap элементов IDELAY, используемых для задержки входных путей сигнала DQS. Если обнаружен сдвиг значения задержки tap, то счетчик задержки tap на входном пути строба DQS может быть подстроен, чтобы удерживать его центрированным в окне захвата чтения данных (Read Data capture window). Обновление значений IDELAY осуществляется во время операций обновления памяти (REFRESH), чтобы избежать влияния внешних факторов на нормальную работу и эффективность контроллера. Инструкции. Таблица 4-1 предоставляет подробное описание всех инструкций памяти, реализованных MCB. Чтобы загрузить инструкцию в Command FIFO порта User Interface, 3-разрядный код инструкции защелкивается на входах pX_cmd_instr[2:0] по фронту нарастания сигнала pX_cmd_clk. Таблица 4-1. Инструкции, реализованные MCB.
Адресация. С точки зрения User Interface блок MCB предоставляет простую и последовательную схему адресации по байтам в физическую память DRAM. То, что фактически DRAM сохраняет данные в фиксированных сегментах, абстрагировано этой схемой, что дает возможность реализовать для пользователя интерфейс адресации, подобный памяти SRAM. Для получения подробностей, как биты адреса банка, строки и столбца (bank, row и column) отображаются в байтовый адрес, см. секцию "Преобразование адреса байта в адресацию памяти". Таблица 4-2 показывает, как адрес байта, представленный для User Interface, должен быть выровнен по ширине (разрядности) порта. В зависимости от количество байт в ширине порта, определенное количество младших бит адреса должно быть установлено в 0, чтобы гарантировать, чтобы следующие друг за другом адреса попали в границы слова данных. Входы маски данных записи (write data mask, pX_wr_mask) для User Interface могут использоваться для смещения начального адреса байта. Например, чтобы начать запись по байтовому адресу 0x01, когда используется 32-битный (4-байтный) User Interface, адрес байта, представленный в порт команды User Interface, должен быть 0x00, чтобы удовлетворить требованиям таблицы 4-2, но самый младший бит маски должен быть установлен в 1, чтобы были в действительности записаны только байты начиная с адреса 0x01 и более старших адресов. Таблица 4-2. Требования к адресу в контексте выравнивания байтового адреса.
Также важно понимать взаимосвязь адресации, когда 32-битный и 64-битный порты используются совместно на User Interface (см. секцию "Конфигурации порта" выше). Для 32-битных портов память предоставляется выровненной на границу 4 байт, в то время как для 64-битных портов память предоставляется выровненной на границы 8 байт. Таблица 4-3 показывает, как два слова данных для 32-битного порта отображаются на адресное пространство одного слова данных 64-битного порта. Таблица 4-3. Взаимосвязь адреса 32-битного и 64-битного порта.
Тайминг Command Path. Путь команды User Interface использует простую структуру FIFO глубиной 4 ячейки, чтобы хранить команды. Тип инструкции, адрес и длина пакета (burst length) запрошенной транзакции - все загружается в этот Command FIFO. Флаг заполненности (pX_cmd_full) это сигнал от FIFO, что этот флаг должен быть в лог. 0, чтобы новая команда могла быть принята в FIFO, когда выставлен pX_cmd_en во время фронта нарастания уровня pX_cmd_clk. Иначе команда игнорируется. Рис. 4-4 и рис. 4-5 демонстрируют протокол для загрузки команды в FIFO. Рис. 4-4. Command Path Timing (Write, запись). Рис. 4-5. Command Path Timing (Read, чтение). Тайминг Write Path. Путь записи User Interface использует структуру FIFO глубиной 64 ячейки для хранения данных в подготовке транзакции записи в память. Подобно Command FIFO, флаг заполненности (pX_wr_full) из Write Data FIFO должен быть в лог. 0, чтобы новые данные были приняты в этот FIFO, когда выставлен сигнал pX_wr_en во время фронта нарастания pX_wr_clk. Иначе данные будут игнорированы (не запишутся в FIFO). Если флаг заполненности в лог. 0, то шина данных pX_wr_data захватывается в FIFO по фронту нарастания pX_wr_clk. Для каждого периода тактов, когда выставлен сигнал pX_wr_en, на шине pX_wr_data должны быть достоверные данные. Рис. 4-6 демонстрирует протокол загрузки данных в Write Data FIFO. Рис. 4-6. Write Path Timing. Сигнал недогрузки pX_wr_underrun показывает пользователю, что контроллер памяти попытался отправить больше данных, чем было в наличии в ячейках write data FIFO, и что данные, предназначенные для памяти, не достигли её. Этой ситуации нужно избегать для гарантированно надежного функционирования. Чтобы избежать события недогрузки (underrun condition), пользователь должен гарантировать, что все необходимые данные доступны в write data FIFO, чтобы соответствовать транзакции перед тем, как эта транзакция будет запущена через command FIFO. Шина сигнала счетчика (pX_wr_count) предоставляет количество записей в FIFO. Из-за асинхронности стеков FIFO в MCB, шина сигнала счетчика имеет больше задержку, чем флаги опустошения и заполненности. Таким образом, эта шина счетчика должна использоваться только для промежуточных ссылок и "ватерлиний". Значение счетчика немедленно изменится по отношению к операциям FIFO, подтвержденных пользователем, однако это время больше для операций, подтвержденных контроллером по сравнению с сигналами заполненности и опустошения. Таким образом, Write Data FIFO в контексте заполнения FIFO счетчик по крайней мере всегда показывает, сколько записей реально находится в FIFO. Например, если пользователь записал 8 слов в FIFO, счетчик может сообщить 8 о количестве записей, даже когда контроллер начал кое-что извлекать из FIFO. Кроме того, если контроллер продолжает передавать данные в память, счетчик может показывать наличие записей в FIFO даже когда FIFO уже пуст. Для Write Data FIFO лучше всего использовать сигнал счетчика как флаг "почти заполнено", потому что FIFO никогда не будет заполнен, если счетчик сообщает о том, что FIFO меньше чем заполнен. Однако очень важно использовать другие методы для гарантии отсутствия ситуаций недогрузки. Тайминг Read Path. Путь чтения User Interface использует простую структуру FIFO глубиной 64 ячейки, чтобы хранить данные, возвращенные из транзакции чтения. Флаг опустошенности (pX_rd_empty) из Read Data FIFO можно использовать как индикатор достоверных данных. Всякий раз, когда pX_rd_empty снят (находится в лог. 0), то на шине pX_rd_data присутствуют достоверные данные. Чтобы передать данные в логику FPGA из Read Data FIFO, должен быть выставлен сигнал pX_rd_en в момент положительного перепада pX_rd_clk. Переходы состояний на шине pX_rd_data происходят по нарастанию уровня pX_rd_clk. Сигнал pX_rd_en может оставаться установленным все время, и сигнал pX_rd_empty может использоваться как индикатор достоверных данных, если это необходимо. Рис. 4-7 демонстрирует протокол выгрузки данных из Read Data FIFO. Рис. 4-7. Read Path Timing. Сигнал pX_rd_overflow показывает пользователю, что память вернула больше данных, чем может уместить read data FIFO, так что некоторые данные были потеряны. Этой ситуации следует избегать, чтобы гарантировать надежное функционирование. Чтобы избежать ситуации переполнения (overflow condition), пользователь должен гарантировать, чтобы было достаточно места в read data FIFO, чтобы соответствовать транзакции до того, как эта транзакция поступит в command FIFO. Шина сигнала счетчика (pX_rd_count) предоставляет количество записей в этом FIFO. Из-за асинхронностей стеков FIFO в MCB сигнал счетчика имеет большее время задержки, чем флаги опустошения и заполненности. Таким образом, эта шина должна использоваться только для промежуточных ссылок и "ватерлиний". Значение счетчика изменится немедленно по отношению к операциям с FIFO, подтвержденным пользователем; однако это будет дольше для операций, подтвержденных контроллером, по отношению к сигналам заполненности и опустошения. Таким образом, когда Read Data FIFO опустошается, счетчик всегда сообщит о количестве больше или равном по отношению к реальному количеству записей, находящемуся в FIFO. Например, если в FIFO содержится 8, то счетчик может сообщить о 8 записях даже если происходит некое чтение из FIFO. Дополнительно, если контроллер продолжает проталкивать данные в FIFO, счетчик может показать меньше записей в FIFO, хотя FIFO уже заполнен или даже переполнен. Для Read Data FIFO счетчик должен использоваться с осторожностью, потому что в FIFO может быть больше данных, чем сообщает счетчик, особенно если происходят транзакции. Счетчик может использоваться как флаг "почти опустошено", но только для регулирования каналов данных чтения, но не для регулирования поступления команд в command FIFO. Транзакции памяти. Выполнение транзакций Write или Read требует правильной последовательности между путями команд и данных. В следующих подсекция демонстрируются протоколы для выдачи простых транзакций записи (Simple Write) и простых транзакций чтения (Simple Read). Simple Write. Для реализации транзакции записи Write Data FIFO сначала должен быть загружен значащими данными, чтобы выполнить запрос, как диктуется значением длины пакета (burst length), которое было введено в Command FIFO. Иначе произойдет событие недогрузки (underrun condition), когда транзакция попытается выполниться. Рис. 4-8 показывает наиболее базовый протокол для загрузки Write Data FIFO. Данные представлены на шине pX_wr_data, и pX_wr_en активируется так, чтобы данные записывались в FIFO по фронту нарастания уровня pX_wr_clk. Значения pX_wr_empty и pX_wr_count отражает факт того, что данные были загружены в FIFO. В этой примере в FIFO загружается всего 3 слова данных (каждое по 32 бита). Рис. 4-8. Загрузка Write Data FIFO. Рис. 4-9 показывает протокол для ввода запроса записи в Command FIFO после того, как данные были загружены в Write Data FIFO. Значение pX_cmd_bl (b'10 соответствует длине пакета burst length 3) соответствует количеству загруженных слов данных. Когда запрос записи загружен в Command FIFO, MCB автоматически запускает транзакцию в устройстве памяти, когда арбитр обслуживает этот порт. Рис. 4-9. Ввод Write Request в Command FIFO. Simple Read. Чтобы реализовать транзакцию чтения, в стеке Read Data FIFO должно быть достаточно места, чтобы завершить этот запрос, как диктуется значением длины пакета (burst length), которое введено в Command FIFO. Иначе произойдет переполнение (overflow condition), когда транзакция попытается выполниться. Рис. 4-10 показывает протокол для ввода запроса чтения в Command FIFO. Значение pX_cmd_bl указывает количество слов данных, запрашиваемых из памяти. Когда запрос чтения загружен в Command FIFO, MCB автоматически выполнить транзакцию, когда арбитр обслуживает этот порт. Рис. 4-10. Ввод Read Request в Command FIFO. Рис. 4-11 показывает запрошенные данные, возвращаемые из памяти и загруженные в Read Data FIFO. Данные представлены на шине pX_rd_data для доступа со стороны логики FPGA. Значения pX_rd_empty и pX_rd_count показывают, что данные были загружены в FIFO. Рис. 4-11. Read Data, возвращенные устройством памяти. Для перемещения данных в логику FPGA из Read Data FIFO сигнал pX_rd_en должен быть активирован по время появления фронта нарастания pX_rd_clk, как это показано на рис. 4-12. Значение pX_rd_count обновляется соответствующим образом. Рис. 4-12. Передача Read Data в логику FPGA. Read Latency. Задержка чтения (Read Latency) определяется количество тактов памяти от момента, когда команда READ записана в Command Path FIFO интерфейса пользователя (User Interface) до момента, когда первое слово данных доступно в стеке FIFO Read Data Path. При оценке задержек чтения важно задать полные условия, при которых происходит изменение. Задержка чтения меняется в зависимости от следующих условий: • Количество команд, уже находящихся в конвейере FIFO, перед тем, как выдана команда READ Таблица 4-4 показывает относящиеся к MCB задержки для двух разных ситуаций на двух частотах памяти. В первом сценарии чтение происходит на уже открытом устройстве памяти, когда не требуются команды предзаряда (precharge) или активации строки (row activate) для доступа к запрашиваемым данным. Во втором сценарии чтение происходит для нового адреса строки (конфликт bank/row). Это требует precharge, чтобы закрыть ранее открытую строку, за которой идет активация новой строки, что увеличивает задержку чтения (read latency). Оба сценария в таблице 4-4 подразумевают интерфейс пользователя MCB (User Interface) с одним портом, когда нет других команд, ожидающих выполнения (т. е. MCB находится в состоянии ожидания перед получением запроса чтения) и применено устройство памяти, у которого CAS latency (задержка сигнала выборки столбца) равна 5. Таблица 4-4. MCB Read Latency.
Self Refresh. Интерфейс самообновления (self-refresh) это механизм, которым пользователь может запросить вход в режим самообновления устройства памяти, или выход из этого режима. Самообновление поддерживается только микросхемами памяти LPDDR, DDR2 и DDR3. Self refresh позволяет памяти экономить потребляемую мощность, сохраняя данные, когда памяти не нужно активно передавать данные. Интерфейс self-refresh использует простой протокол для входа в режим self-refresh и выхода из него. Один вывод состояния режима (selfrefresh_mode) показывает, находится или нет память в режиме самообновления. Асинхронный сигнал selfresh_enter анализируется на частоте ядра MCB, который часто работает на частоте, намного выше, чем такты User Interface. Для входа в режим самообновления сигнал selfrefresh_enter устанавливается, пока selfrefresh_mode не перейдет в лог. 1 (см. рис. 4-13). Сигнал selfrefresh_enter должен оставаться в лог. 1, чтобы оставался режим self-refresh. Для выхода из этого режима сигнал selfrefresh_enter деактивируется (см. рис. 4-14). После этого сигнал selfrefresh_mode переходит в лог. 0, показывая выход из режима самообновления. Сигнал selfresh_enter должен удерживаться в устойчивом состоянии, потому что любой импульс помехи на этой линии может интерпретироваться как запрос. Обычно эти сигналы должны быть зарегистрированы пользователем перед поступлением в MCB, чтобы гарантировать, что эти сигналы переключаться только когда это необходимо. Устройство Spartan-6 может быть помещено в состояние приостановки (suspend mode), когда внешняя память находится в режиме самообновления (self-refresh), чтобы еще больше снизить потребление энергии. Однако устройство Spartan-6 не может быть переконфигурировано, когда устройство памяти находится в режиме self-refresh. Переконфигурирование приведет к потере состояния MCB, из-за чего не получится правильно выйти из режима self-refresh. Рис. 4-13. Вход в режим Self-Refresh. Рис. 4-14. Выход из режима Self-Refresh. Suspend. Эта секция описывает два рекомендуемых метода для использования возможности режима приостановки (Suspend Mode) устройств Spartan-6 в дизайнах, содержащих интерфейс памяти на основе MCB. Режим приостановки без поддержки хранения данных в DRAM. В случаях, когда не нужно сохранять содержимое данных, которые уже записаны в устройство памяти DRAM, вывод Suspend может быть просто переведен в состояние активной лог. 1, чтобы активизировался режим приостановки (suspend mode). Перед переводом вывода Suspend в лог. 1 MCB должен быть помещен в состояние сброса переводом async_rst в активный уровень лог. 1. Во время режима приостановки MCB удерживается в состоянии сброса. Когда вывод Suspend переводится в лог. 0 для выхода из режима приостановки, MCB удерживается в сбросе до тех пор, пока не станет активным сигнал PLL_LOCK, показывая наличие стабильных тактов для MCB. Затем MCB выходит из сброса и инициализирует DRAM, используя ту же последовательность запуска (startup sequence), которая происходит при включении питания или системном сбросе MCB. Все данные DRAM должны считаться недостоверными, когда произошел выход из режима приостановки по этому сценарию. Режим приостановки с сохранением данных DRAM. В случаях, когда данные в DRAM должны быть сохранены, должен использоваться примитив SUSPEND_SYNC совместно с интерфейсом Self Refresh блока MCB, чтобы правильно реализовать режим приостановки (suspend mode). Примитив SUSPEND_SYNC используется для гарантии, что MCB перевел устройство DRAM в режим самообновления (self-refresh mode, см. секцию "Self Refresh"), чтобы сохранить свое состояние перед переводом FPGA в режим приостановки (suspend mode). Рис. 4-15 показывает, как примитив SUSPEND_SYNC подключается к логике вывода Suspend и интерфейсу MCB для реализации suspend mode с сохранением данных в DRAM. Диаграмма времени на рис. 4-16 показывает взаимосвязь сигналов, требуемую для успешного перевода FPGA в suspend mode и выхода из него в соответствии с этим сценарием. Рис. 4-15. Соединения SUSPEND_SYNC. Рис. 4-16. Диаграмма времени Suspend Mode. В ответ на активную лог. 1 на выводе Suspend примитив SUSPEND_SYNC отправляет в MCB сигнал запроса приостановки (suspend request, SREQ), чтобы показать необходимость входа режим приостановки (suspend mode). Сигнал SREQ подключается напрямую ко входу selfrefresh_enter высокоуровневой обертки MIG (или EDK), откуда он направляется в модуль программной калибровки (soft calibration module). Этот модуль программной калибровки завершает любые текущие операции перед передачей запроса self-refresh в MCB и оттуда в устройство памяти. Как только MCB успешно поместил устройство DRAM в режим самообновления (self-refresh mode), выход selfrefresh_mode переходит в лог. 1. Этот сигнал напрямую подключается ко входу подтверждения приостановки (suspend acknowledge, SACK) примитива SUSPEND_SYNC, показывая, что FPGA может быть теперь помещена в режим приостановки. Сигнал PLL_lock будет снят, когда произойдет приостановка (Suspend = лог. 1). Когда вывод Suspend переходит в лог. 0 для выхода из режима приостановки, сигнал SREQ и таким образом selfrefresh_enter переходят в состояние не активности, и FPGA выводится из состояния Suspend. Сигнал PLL_lock сначала находится в лог. 0, так как PLL пытается осуществить захват для того, чтобы снова начать выдавать стабильную тактовую частоту. Однако из-за того, что сигнал selfrefresh_mode активен, это условие PLL_lock == лог. 0 не приводит к сбросу системы MCB, как это обычно происходило бы. Когда PLL достигает захвата, модуль программной калибровки перенаправляет запрос в MCB на выход из режима самообновления, и оттуда в устройство памяти. Когда устройство DRAM успешно вышло из режима самообновления, сигнал selfrefresh_mode возвращается в состояние лог. 0, и нормальное функционирование MCB может продолжиться без потери данных в DRAM. Дополнительные требования Suspend Mode. Хотя устройство Spartan-6 находится в режиме приостановки, некоторые критические сигналы, управляемые устройством DRAM, должны удерживаться в известном состоянии. Когда используется режим приостановки с устройствами памяти, которые поддерживают режим самообновления, вход CKE устройства Spartan-6 должен иметь добавленное ограничение (constraint), чтобы сохранить последнее состояние вывода во время состояния приостановки (Suspend). Должен быть добавлен в файл ограничений пользователя (user constraints file, UCF) оператор наподобие следующего: NET "mcbx_dram_cke" SUSPEND="drive_last_value"; Это гарантирует, что устройство DRAM правильно выйдет из режима самообновления. Дополнительно для DDR3 сигнал сброса DRAM должен иметь подобное добавленное ограничение в файле UCF, наподобие следующего: NET "mcbx_dram_reset_n" SUSPEND="drive_last_value"; Это предотвратит нежелательный сброс устройства DRAM во время режима приостановки. Преобразование адреса байта в адресацию памяти. С точки зрения User Interface блок MCB предоставляет простую и последовательную схему адресации в физическую память DRAM. Факт того, что DRAM сохраняет данные в фиксированных сегментах этой схемой абстрагируется, позволяя работать с памятью через простой интерфейс наподобие SRAM. MCB автоматически преобразует адрес байта на User Interface в необходимые адреса строки, банка и столбца (row, bank и column), требуемые для конкретной конфигурации устройства памяти. Для создания абстракции от подробностей адресации физической памяти DRAM, MCB автоматически обслуживает управление сигналами строки и банка, работающее прозрачно для User Interface. Стандарт памяти, ширина шины и плотность влияют на то, как адрес байта на User Interface отображается на соответствующие биты адреса строки (row), банка (bank) и столбца (column). Выбор устройства памяти в утилите MIG приводит к передачи необходимых параметров в MCB, так чтобы он создал правильное назначение бит адреса. Таблица 4-5 показывает, как делается это назначение на имеющейся конфигурации устройства памяти. Эти отображения основываются на стандартных схемах адресации JEDEC. Как показано в таблице 4-5, ширина памяти (x4, x8 или x16) влияет на отображение адреса байта на физический адрес DRAM. Для устройств x4 младший значащий бит (LSB) адреса столбца устанавливается в 0 на внешней шине адреса, чтобы создать выровненную на байт адресацию памяти (бит 0 на User Interface отображается на 1 адреса столбца). Из-за того, что устройства x8 используют традиционную адресацию байта, MCB использует прямое отображение адреса байта на биты физического адреса (бит 0 User Interface напрямую отображается на бит 0 адреса столбца). Для устройств x16 отображение смещается для создания выравнивания адреса на границу 2 байт (бит 1 User Interface отображается на бит 0 адреса столбца). MCB поддерживает две общие схемы отображения байтового адреса User Interface на физический адрес интерфейса памяти: ROW_BANK_COLUMN и BANK_ROW_COLUMN. Страница конфигурации порта (Port Configuration) утилиты MIG позволяет выбирать схему, которая подходит к определенному приложению (см. секцию "Creating an MCB Design" в UG416 [2]). Таблица 4-5 показывает отображение только адресации для ROW_BANK_COLUMN. Для адресации BANK_ROW_COLUMN позиция групп адреса Row и Bank переключается так, что биты адреса Bank находятся в позиции MSB по отношению к байтовому адресу User Interface. Отображение бит адреса столбца остается неизменным. Схема ROW_BANK_COLUMN означает, что для транзакции, которая происходит по последовательному адресному пространству, например (например, длинный пакет данных), MCB автоматически откроет ту же строку в следующем банке устройства DRAM, чтобы продолжить транзакцию, когда достигнут конец существующей строки. Это снижает затраты времени, связанные с закрытием текущей строки (команда Precharge) и открытием другой строки в том же банке (команда Activate command) для продолжения транзакции. Схема адресации ROW_BANK_COLUMN хорошо подходит для приложений, которые требуют проталкивания больших пакетов данных в последовательно размещенные по адресам ячейки, где может достигаться повышенная эффективность доступа путем размещения данных в нескольких банках. В отличие от адресации ROW_BANK_COLUMN адресация BANK_ROW_COLUMN означает, что пересечение границы строки приведет к закрытию этой строки и открытие новой строки в том же банке. Биты адреса Bank находятся в MSB позиции байтового адреса, и они могут использоваться для переключения основных адресных пространств, находящихся в разных банках. Например приложение, основанное на микропроцессоре или микроконтроллере, которое должно быть короче, делает больше произвольных транзакций к одному блоку памяти за один период времени, и затем переходит к другому блоку (т. е. банку), тогда возможно лучше выбрать эту схему отображения адресов. Таким образом, от специфики работы приложения зависит выбор схемы адресации ROW_BANK_COLUMN или BANK_ROW_COLUMN. Примечание: при обращении к таблице 4-5 пользователь должен убедиться, что выполнены требования, перечисленные в таблице 4-2, чтобы сохранить правильные границы слова данных. Таблица 4-5. Отображение памяти устройства (Memory Device Mapping).
Легенда:
Порядок следования транзакций и когерентность. В архитектуре MCB транзакции, выполняемые с памятью, подтверждаются по отношению к одному порту. Следовательно для одного порта транзакции завершаются в том же порядке, в каком запрашиваются. По нескольким портам MCB нет гарантии, что транзакции, выданные разными портами, будут завершены в порядке поступления запросов. Алгоритм арбитража может быть модифицирован так, чтобы указанный порт имел преимущество перед другим портом. Это можно использовать как механизм влияния на порядок выполнения транзакций, но это не может гарантировать определенный порядок их выполнения. MCB позволяет буферизировать внутри себя транзакции записи. Из-за буферизации будет неопределенным время, когда транзакция записи будет принята в Command FIFO, и когда завершится запись в память. Из-за того, что порядок выполнения транзакций между портами не гарантируется, то порт, который выполняет чтения по адресу, в который пишет другой порт, может прочитать из памяти новое или старое значение (но какое конкретно заранее не известно). В некоторых приложениях важно знать, что запись в память была завершена перед чтением того же места памяти (так называемая когерентность доступа). Есть 3 метода, которые могут гарантировать когерентность: 1. Мониторинг флага опустошения Command FIFO: • Если предположить, что только одна команда находится в очереди на определенном порту, пользователь может мониторить флаг Command FIFO empty. Этот флаг перейдет в лог. 1, когда MCB начнет выдавать команду записи. Когда эта команда запустится, это будет гарантировать, что завершится обработка данных, доступных в Write Data FIFO. 2. Дизайн может воспользоваться преимуществом того факта, что транзакция завершается в определенном порядке для определенного порта: • После записи в чувствительную часть памяти устройство может выдать пустое чтение, и ждать завершения пустого чтения и возврата данных. 3. Подстройка алгоритма арбитража: • Если порт, выполняющий записи, может всегда быть установленным на приоритет выше, чем порты, выполняющие чтение, то это гарантирует, что запись завершится перед чтением, когда эти операции происходят на двух портах. Следует внимательно применять этот метод, потому что порты могут иметь пустые циклы между запросами записи и чтения. Примечание: использование любого из этих методов для гарантирования когерентности приведет к снижению производительности системы; поэтому такие методы следует применять только в случае необходимости. [Приложение A] По этим ссылкам можно найти пробную информацию по каждому из стандартов памяти, реализуемому в MCB: • JEDEC DDR3 Specification • JEDEC DDR2 Specification • JEDEC DDR Specification • JEDEC LPDDR Specification Эти ссылки предоставляют дополнительные подробности по разводке печатной платы и анализу целостности сигналов для микросхем памяти DDR. Xilinx не гарантирует точность и полноту любого из этих материалов. • Hardware Tips for Point-to-Point System Design: Termination, Layout, and Routing • Interfacing the RC32434/5 with DDR SDRAM Memory • DDR-SDRAM Layout Considerations for MCF547x/8x Processors • Hardware and Layout Design Considerations for DDR2 SDRAM Memory Interfaces • DDR System Design Considerations • DDR2 Package Sizes and Layout Requirements • DDR2 (Point-to-Point) Package Sizes and Layout Basics • Understanding TI’s PCB Routing Rule-Based DDR Timing Specification • Implementing DDR2 PCB Layout on the TMS320C6454/5 [Ссылки] 1. UG388 Spartan-6 FPGA Memory Controller site:xilinx.com. |