Контроллер памяти 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.
2. Embedded Development Kit (EDK). Для embedded-дизайнов см. DS643 [3], где описано, как используется MCB для реализации MPMC в среде EDK.

Примечание: утилита 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.
2. Функциональное описание MCB. Описывается архитектура, сигнальный интерфейс, возможные конфигурации MCB.
3. Разработка с использованием MCB, предоставляются подробности применения MCB в дизайне на Spartan-6, со спецификой настройки блока для имеющегося приложения.
4. Работа MCB, объяснение функций MCB в различных рабочих режимах: запуск (startup), калибровка (calibration), обновление ячеек SDRAM (refresh), предзаряд (precharge), стандартные транзакции чтения/записи и т. д.

Приложение A, ссылки на дополнительную документацию, касающуюся разработки интерфейса памяти.

Следующие документы также доступны для загрузки на сайте xilinx.com.

• Spartan-6 Family Overview. Этот обзор показывает функции и варианты выбора продукции семейства Spartan-6.
• Spartan-6 FPGA Data Sheet: DC and Switching Characteristics. Этот даташит содержит спецификации постоянного тока (DC) и характеристики переключения для семейства Spartan-6.
• Spartan-6 FPGA Packaging and Pinouts Product Specification. Эта спецификация включает таблицы для комбинаций микросхема/корпус и максимального количества I/O, определения выводов, таблиц разводки выводов, диаграмм выводов, механические чертежи корпусов, спецификаций температурных требований.
• Spartan-6 FPGA Configuration User Guide. Это всеобъемлющее руководство по конфигурированию включает главы по конфигурации интерфейсов (последовательных и параллельных), управлению несколькими потоками бит, шифрованию потока бит, технологии boundary-scan и конфигурации JTAG и техникам переконфигурирования.
• Spartan-6 FPGA SelectIO Resources User Guide. Это руководство описывает ресурсы SelectIO™, доступные во всех устройств Spartan-6.
• Spartan-6 FPGA Clocking Resources User Guide. Это руководство описывает ресурсы тактирования, доступные во всех устройствах Spartan-6, включая блоки DCM и PLL.
• Spartan-6 FPGA Block RAM Resources User Guide. Это руководство описывает возможности блока RAM устройства Spartan-6.
• Spartan-6 FPGA Configurable Logic Block User Guide. Это руководство описывает возможности блоков конфигурируемой логики (configurable logic blocks, CLB), доступных во всех устройствах Spartan-6.
• Spartan-6 FPGA GTP Transceivers User Guide. Это руководство описывает трансиверы GTP, доступные в микросхемах Spartan-6 LXT FPGA.
• Spartan-6 FPGA DSP48A1 Slice User Guide. Это руководство описывает архитектуру слайса DSP48A1 в микросхемах Spartan-6 FPGA, и предоставляет примеры конфигурации.
• Spartan-6 FPGA PCB and Pin Planning Design Guide. Это руководство предоставляет информацию по дизайну печатной платы с устройствами Spartan-6, с фокусом на стратегии для принятия решений по дизайну на уровне печатной платы и интерфейса.
• Spartan-6 FPGA Power Management User Guide. Это руководство предоставляет информацию по различным аппаратным методам управления питанием устройств Spartan-6 devices, фокусируясь главным образом на режиме приостановки (suspend mode).

[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-разрядный одиночный компонент интерфейса памяти
   - Плотность памяти до 4 Gb
   - Агрегатную полосу пропускания до 12.8 Gb/s

• Конфигурируемый выделенный многопортовый интерфейс пользователя для логики FPGA

   - От 1 до 6 портов на MCB в зависимости от конфигурации
   - 32-, 64- или 128-битная шина данных
   - Двунаправленный (R/W) или однонаправленный (только W или только R) порт.

• Управление банками памяти

   - До 8 банков может быть открыто одновременно для повышения эффективности контроллера

• Встроенный контроллер и физический интерфейс (PHY), предоставляющий:

   - Предсказуемые интервалы времени
   - Низкое энергопотребление
   - Гарантируемая производительность

• Заранее определенная разводка внешних выводов (места I/O на корпусе) для каждого MCB

   - Упрощенный дизайн печатной платы
   - Ножки I/O, не использумые в интерфейса MCB, становятся обычными выводами I/O ( подробнее см. описание интерфейса памяти и таблицу 2-0).

• Поддержка общих опций и атрибутов микросхем памяти

   - Программируемая нагрузочная способность
   - On-Die Termination (ODT)
   - CAS latency (задержка сигнала выборки столбца)
   - Self refresh (самообновление, включая часть массива)
   - Интервал обновления
   - Write recovery time (время восстановления записи)

• Автоматическая калибровка задержки строба памяти и чтения входов данных

   - Подстройка взаимосвязи DQS (строб) и DQ (данные) для оптимальной производительности чтения

• Опциональная автоматическая калибровка встроенного в кристалл FPGA терминирования входов для оптимального качества сигналов

• Поддерживаемый Xilinx® инструментарий разработки CORE Generator™ и Embedded Development Kit (EDK):

   - Утилита Memory Interface Generator (MIG), входящая в состав ПО CORE Generator, упрощает разработку с применением MCB
   - Дизайны со встроенным процессором также получают доступ к MCB через многопортовый контроллер памяти (multi-port memory controller, MPMC), который доступен в EDK как IP.

Блок-схема на рис. 1-1 показывает главные компоненты архитектуры ядра MCB. Всюду в этом описании MCB представлен так же, как и в memory IP tools ПО CORE Generator или рабочей среде EDK. Эти инструменты обычно генерируют файлы высокоуровневой обертки (IP Wrapper), которые реализуют примитив встроенного блока контроллера памяти и необходимую программную логику вместе с отображением портов, необходимые для полного решения. Например, на рис. 1-1 физический интерфейс MCB использует возможности основного блока ввода вывода (I/O block, IOB) для реализации внешнего интерфейса с памятью. Также используются ресурсы цепей общего тактирования ввода/вывода (I/O clock network).

Spartan 6 FPGA MCB IP Wrapper view fig1 1

Рис. 1-1. Блок контроллера памяти (MCB) Spartan-6 FPGA (вид на IP Wrapper).

Интерфейс пользователя MCB на обычной скорости передачи данных (single data rate, SDR) внутри FPGA может быть сконфигурирован для работы через порты, от 1 до 6. У каждого такого порта есть интерфейс команд и интерфейс чтения и/или записи данных. Два двунаправленных 32-битных и четыре однонаправленных 32-битных аппаратных порта в MCB могут быть сгруппированы для создания пяти различных конфигураций портов.

Другие основные компоненты MCB:

• Арбитр: определяет, какой порт сейчас имеет приоритет для доступа к микросхеме памяти.
• Контроллер: главный блок управления, который преобразует простые запросы, посланные через интерфейс пользователя, в необходимые инструкции и последовательности, необходимые для коммуникации с микросхемой памяти.
• Путь прохождения данных (Datapath): обрабатывает поток записываемых и читаемых данных между микросхемой памяти и логикой пользователя.
• Физический интерфейс (Physical Interface, PHY): преобразует инструкции контроллера в реальные диаграммы времени и сигналы DDR, необходимые для коммуникации с микросхемой памяти.
• Логика калибровки: калибрует PHY для оптимальной производительности и надежности.

Выделенные ядра 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.

Тип памяти
Скорость (Data Rate) Mb/сек DDR (такты в МГц)
Пиковая полоса на интерфейс MCB (Gb/сек)
Min Max(1) 4 бита 8 бит 16 бит
DDR 167 Mb/сек(2)
(83.3 МГц)
400 Mb/сек
(200 МГц)
1.6 Gb/сек 3.2Gb/сек 6.4 Gb/сек
DDR2 250 Mb/сек(2)
(125 МГц)
800 Mb/сек
(400 МГц)
3.2 Gb/сек 6.4Gb/сек 12.8 Gb/сек
DDR3 606 Mb/сек(2)
(303 МГц)
800 Mb/сек
(400 МГц)
3.2 Gb/сек 6.4Gb/сек 12.8 Gb/сек
LPDDR 60 Mb/сек(2)
(30 МГц)
400 Mb/сек
(200 МГц)
1.6 Gb/сек 3.2Gb/сек 6.4 Gb/сек

Примечания:

1. Показан максимум скорости данных MCB, который не относится ко всем классам скоростей (speed grade) FPGA. См. DS162, Spartan-6 FPGA Data Sheet: DC and Switching Characteristics, для получения производительности в зависимости от speed grade. Устройства -3N speed-grade не поддерживают MCB.
2. Минимальные требования к частоте MCB диктуются минимальной спецификацией частоты для стандарта памяти. См. стандарты памяти в Приложении A, где даны ссылки на соответствующие спецификации JEDEC.

Количество доступных MCB в имеющемся устройстве Spartan-6 определяется по диапазону плотности логики, в который попадает устройство. Самое маленькое устройство (XC6SLX4) не содержит MCB, средние по плотности устройства содержат два MCB, и более крупные по плотности устройства содержат четыре MCB. Таблица 1-2 показывает количество поддерживаемых MCB для каждой комбинации устройство/корпус.

Примечание: MCB разработан для одного компонента памяти x4, x8 или x16. Интерфейсы с несколькими компонентами в одном MCB (например, две микросхемы памяти x8, подключенные к MCB в режиме x16) не поддерживаются.

Таблица 1-2. Поддержка MCB в разных комбинациях устройство/корпус.

Устройство
Корпус
TQG144 CPG196 CSG225 FT(G)256 CSG324 FG(G)484 CSG484 FG(G)676 FG(G)900
XC6SLX4 0 0 0            
XC6SLX9 0 0 2(1) 2 2        
XC6SLX16   0 2(1) 2 2        
XC6SLX25       2 2 2      
XC6SLX45         2 2 2 2  
XC6SLX75           2(2) 2(2) 4  
XC6SLX100           2(2) 2(2) 4  
XC6SLX150           2(2) 2(2) 4 4
XC6SLX25T         2 2      
XC6SLX45T         2 2 2    
XC6SLX75T           2(2) 2(2) 4  
XC6SLX100T           2(2) 2(2) 4  
XC6SLX150T           2(2) 2(2) 4 4

Примечания:

1. Для устройств в корпусе CSG225 блоки MCB поддерживаются только в опциях интерфейса памяти x4 и x8, т. е. устройства LPDDR не могут поддерживаться. Кроме того, в этом корпусе доступно только 13 бит адреса MCB, что ограничивает максимальную плотности памяти до 256 Mb для DDR2 и 512 Mb для DDR и DDR3.
2. Для устройств с четырьмя MCB только два MCB привязаны к ножкам корпусов FGG484 и CSG484.

Spartan-6 FPGA MCB поддерживает широкий диапазон типов памяти, конфигураций и плотностей, что показано в таблице 1-3.

Таблица 1-3. Поддерживаемые конфигурации памяти.

Плотность памяти
(в битах)
Разрядность
(бит DQ)

Тип памяти
LPDDR DDR DDR2 DDR3
128 Mb x16 X X    
x8   X    
x4   X    
256 Mb x16 X X X  
x8   X X  
x4   X X  
512 Mb x16 X X X X
x8   X X X
x4   X X X
1 Gb x16 X X X X
x8   X X X
x4   X X X
2 Gb x16     X X
x8     X X
x4     X X
4 Gb(1) x16       X

Примечания:

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 показывает сигналы только для одного двунаправленного порта.

Spartan 6 FPGA MCB Architecture fig2 1

Рис. 2-1. Архитектура MCB с основными внешними (I/O) и внутренними сигналами.

Имеется 3 базовых типа портов, которые могут быть реализованы в User Interface:

• Порт чтения (Read port, однонаправленный)
• Порт записи (Write port однонаправленный)
• Порт чтения и записи (Read and Write 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 в имеющемся порте всегда имеют отдельное тактирование, и поэтому могут быть подключены к независимым друг от друга доменам тактирования. Однако рекомендуется, чтобы все пути, связанные с имеющимся портом, удерживались в одном домене тактирования, чтобы упростить требования к интерфейсу.

Spartan 6 FPGA MCB Port Configurations fig2 2

Рис. 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.

Тайм-слот Приоритет 1 Приоритет 2 Приоритет 3 Приоритет 4 Приоритет 5 Приоритет 6
0 0 1 2 3 4 5
1 1 2 3 4 5 0
2 2 3 4 5 0 1
3 3 4 5 0 1 2
4 4 5 0 1 2 3
5 5 0 1 2 3 4
6 0 1 2 3 4 5
7 1 2 3 4 5 0
8 2 3 4 5 0 1
9 3 4 5 0 1 2
10 4 5 0 1 2 3
11 5 0 1 2 3 4

Таблица 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 отвечают за установку значений всех параметров, так что их значения не должны модифицироваться напрямую.

Атрибут Имя параметра Описание / возможные значения
Тип памяти C_MEM_TYPE Этот атрибут устанавливает стандарт памяти, реализуемый MCB. Возможные значения: DDR, DDR2, DDR3, LPDDR.
Ширина шины данных памяти C_NUM_DQ_PINS Атрибут устанавливает разрядность шины DQ. Возможные значения "4", "8", "16".
Ширина шины адреса памяти C_MEM_ADDR_WIDTH Атрибут устанавливает разрядность шины адреса (общее количество бит адреса). Возможные значения зависят от выбора устройства в утилите MIG.
Ширина шины адреса банка C_MEM_BANKADDR_WIDTH Атрибут устанавливает количество бит адреса выбора банка. Возможные значения зависят от выбора устройства в утилите MIG.
Ширина шины адреса столбца C_MEM_NUM_COL_BITS Атрибут устанавливает количество бит адреса столбца. Возможные значения зависят от выбора устройства в утилите MIG.
Ширина пакета (Memory Burst Length) C_MEM_BURST_LEN Атрибут устанавливает длина используемого пакета. Утилита MIG определяет это значение, основываясь на стандарте памяти, конфигурации порта и ширине интерфейса. Для DDR3 всегда устанавливается 8. Возможные значения: "4", "8".
Задержка CAS (Memory CAS Latency) Для DDR, DDR2, LPDDR: C_MEM_CAS_LATENCY

Для DDR3: C_MEM_DDR3_CAS_LATENCY,
C_MEM_DDR3_CAS_WR_LATENCY
Атрибут устанавливает задержку сигнала выборки столбца CAS (задержка в периодов тактов между командой READ и первыми выходящими данными) для памяти. У DDR3 отдельные значения задржки CAS для Read и Write. Возможные значения, в зависимости от типа памяти: 2, 3, 4, 5, 6, 7, 8, 9, 10.
Partial Array Self-Refresh Size C_MEM_MOBILE_PA_SR Для LPDDR: этот атрибут устанавливает размер массива для операции самообновления. Возможные значения: Full, Half.
Memory Drive Strength DDR, DDR2: C_MEM_DDR1_2_ODS
DDR3: C_MEM_DDR3_ODS
LPDDR: C_MEM_MDDR_ODS
Атрибут устанавливает нагрузочную способность выхода устройства памяти. Возможные значения:
DDR/DDR2: FULL, REDUCED
DDR3: DIV6 (RZQ/6), DIV7 (RZQ/7)
LPDDR: FULL, THREEQUARTERS, HALF, QUARTER
Memory Termination Value (ODT) DDR2: C_MEM_DDR2_RTT
DDR3: C_MEM_DDR3_RTT
Устанавливает сопротивление on-die termination устройство памяти. Возможное значение:
DDR2: OFF, 50OHMS, 75OHMS, 150OHMS
DDR3: OFF, DIV2 (RZQ/2), DIV4, (RZQ/4), DIV6 (RZQ/6), DIV8 (RZQ/8), DIV12 (RZQ/12)
Примечание: RZQ=240Ω
Memory Differential DQS Enable C_MEM_DDR2_DIFF_DQS_EN Разрешает использование дифференциального строба DQS. Этот атрибут всегда разрешен для DDR3; он установлен на YES для DDR2 на частоте выше 200 МГц. Возможные значение для DDR2: YES, NO
Memory Auto Self Refresh C_MEM_DDR3_AUTO_SR Только для DDR3: auto self-refresh позволяет памяти определять лучший интервал обновления, основываясь на температуре устройства. Если автообновление не используется, рабочий диапазон температур должен быть показан с использованием регистра высокой температуры самообновления. Возможные значения: ENABLED, MANUAL.
Memory High Temperature Self Refresh C_MEM_DDR2_3_HIGH_TEMP_SR Для DDR2 и DDR3: память может быть переведена в режим самообновления высокой температуры, чтобы уменьшить интервал времени обновления. Возможные значения DDR2/DDR3: NORMAL (0–85°C), EXTENDED (> 85°C).
Memory Dynamic Output Driver Termination C_MEM_DDR3_DYN_WRT_ODT Для DDR3: определяет значение динамического терминирования выхода драйвера. Возможные значения: DDR3: OFF, DIV2 (RZQ/2), DIV4 (RZQ/4).
Значение tRAS микросхемы памяти C_MEM_TRAS Минимальное значение периода от состояния Active до состояния Precharge. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tRCD для микросхемы памяти C_MEM_TRCD Минимальная задержка от состояния Active до команды Read или Write. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tREFI для микросхемы памяти C_MEM_TREFI Средний периодический интервал обновления для памяти. Этот атрибут определяет частоту, с которой MCB обновляет память, а не интервал self-refresh. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tRFC для микросхемы памяти C_MEM_TRFC Минимальный интервал от Auto-Refresh до состояния Active, или период команды Auto-Refresh. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tRP для микросхемы памяти C_MEM_TRP Минимальный период команды Precharge. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tWR для микросхемы памяти C_MEM_TWR Минимальное время восстановления записи (Write Recovery) для памяти. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tRTP для микросхемы памяти C_MEM_TRTP Минимальная задержка между командой Read до команды Precharge. Обычно этот параметр можно найти только на устройствах DDR2 и DDR3. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Значение tWTR для микросхемы памяти C_MEM_TWTR Минимальная задержка от команды Write до команды Read. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.

Атрибут Имя параметра Описание / возможные значения
Период тактов контроллера C_MEMCLK_PERIOD Этот атрибут конвертирует параметры времени памяти между циклами тактов и пикосекундами. Возможные значения (в пикосекундах) устанавливаются на базе выбранной в утилите MIG микросхемы памяти.
Конфигурация порта контроллера C_PORT_CONFIG Этот атрибут устанавливает конфигурацию порта User Interface. Он определяет направление порта (B = Bidirectional, W = Unidirectional Write, R = Unidirectional Read) и ширину шины данных (32, 64 или 128 бит). Возможные значения:
B32_B32_W32_W32_W32_W32
B32_B32_W32_W32_W32_R32
B32_B32_W32_W32_R32_W32
B32_B32_W32_W32_R32_R32
B32_B32_W32_R32_W32_W32
B32_B32_W32_R32_W32_R32
B32_B32_W32_R32_R32_W32
B32_B32_W32_R32_R32_R32
B32_B32_R32_W32_W32_W32
B32_B32_R32_W32_W32_R32
B32_B32_R32_W32_R32_W32
B32_B32_R32_W32_R32_R32
B32_B32_R32_R32_W32_W32
B32_B32_R32_R32_W32_R32
B32_B32_R32_R32_R32_W32
B32_B32_R32_R32_R32_R32
B32_B32_B32_B32
B64_B32_B32
B64_B64
B128
Ширина шины данных порта (порты 0 и 1) C_P0_DATA_PORT_SIZE C_P1_DATA_PORT_SIZE Порты 0 и 1 User Interface могут менять ширину шины данных в зависимости от выбранной конфигурации порта (порты от 3 до 5, если доступны, имеют всегда разрядность 32 бита). Эти параметры устанавливают ширину данных порта 0 и 1. Возможные значения: 32, 64, 128.
Ширина маски данных (порты 0 и 1) C_P0_MASK_SIZE
C_P1_MASK_SIZE
Этот атрибут устанавливает количество бит маски для портов 0 и 1, в зависимости от ширины шины данных, как это определено конфигурацией порта. Возможные значения: 4, 8, 16.
Разрешение порта контроллера C_PORT_ENABLE Это 6-битное значение определяет, какой из нижележащих шести аппаратных 32-битных порта используются в имеющейся конфигурации порта. Возможные значения: например, b001111 означает, что разрешены порты от 0 до 3.
Порядок отображения адресов C_MEM_ADDR_ORDER Этот атрибут определяет, как адрес байта, представленный для User Interface, отображается на биты адреса физического банка памяти, строки, и столбца. Этот атрибут основывается на схеме системной адресации. Это значение должно быть установлено для получения наибольшего преимущества MCB при использовании возможностей управления открытым банком. Возможные значения: BANK_ROW_COLUMN, ROW_BANK_COLUMN.
Arbitration Time Slot Count C_ARB_NUM_TIME_SLOTS Атрибут устанавливает количество тайм-слотов в таблице арбитража. Большинство конфигураций порта имеют 12 тайм-слотов, но конфигурации порта с 5 активными портами имеют 10 тайм-слотов в таблице арбитража, чтобы гарантировать одинаковый арбитраж. Возможные значения: 12, 10.
Arbitration Time Slot Values C_ARB_TIME_SLOT[0:11] Эти восьмеричные значения из 6 цифр (18 бит) устанавливают значения приоритета порта для каждого тайм-слота. Возможные значения: например, C_ARB_TIME_SLOT0 = 18'o012345 (устанавливает порт 0 с наивысшим приоритетом до порта 5 с самым низким приоритетом).
Пропуск калибровки контроллера (симуляция) C_MC_CALIB_BYPASS Указывает утилите MIG установить файлы симуляции для пропуска последовательности калибровки контроллера, чтобы ускорить симуляцию. Примечание: этот параметр используется только для симуляции. Возможные значения: YES, NO.
Reserved Calibration Address Space C_MC_CALIBRATION_RA C_MC_CALIBRATION_BA C_MC_CALIBRATION_CA Определяет начальные адреса строки, банка и столбца, зарезервированные для калибровки. Этот атрибут используется для тренировки шаблонами данных во время перекалибровки, чтобы избежать перезаписи данных приложения. Возможные значения (возможен любой допустимый адрес), примеры:
C_MC_CALIBRATION_RA = 15'h0000
C_MC_CALIBRATION_BA = 3'h0
C_MC_CALIBRATION_CA = 12'h000
Режим калибровки C_MC_CALIBRATION_MODE Этот атрибут определяет, выполнит ли MCB точное выравнивание и компенсацию в реальном времени напряжения/температуры для строба DQS (что рекомендуется) или будет просто использовать фиксированное соотношения периода бита к смещению DQS в окне данных. Возможные значения: CALIBRATION (точное выравнивание DQS с компенсацией напряжения/температуры), NOCALIBRATION (фиксированная задержка смещения DQS).
Значение задержки смещения DQS C_MC_CALIBRATION_DELAY Этот атрибут устанавливает фиксированную задержку смещения DQS как соотношение периода бита, когда C_MC_CALIBRATION_MODE = NOCALIBRATION. Возможные значения: QUARTER, HALF, THREEQUARTER, FULL.

Параметры интервалов времени памяти берутся из даташитов вендоров, и автоматически назначаются инструментами, когда выбирается поддерживаемое устройство. Параметры интервалов времени могут быть указаны при создании пользовательского устройства (см. "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.

Имя сигнала Напр. Описание
async_rst Вход Главный системный сброс для MCB.
calib_done Выход Этот сигнал с активным уровнем лог. 1 показывает завершение всех фаз калибровки во время последовательности запуска (start-up) MCB. Транзакции не должны подтверждаться для MCB, пока этот сигнал не перейдет в лог. 1, чтобы показать завершение калибровки. См. раздел "Калибровка" в Главе 4 для получения дополнительной информации.
mcb_drp_clk Вход Этот тактовый сигнал синхронизирует модуль программной калибровки (soft calibration module) с доменом тактов sysclk_2x. Этот тактовый сигнал должен быть сгенерирован той же PLL, что и sysclk_2x, чтобы гарантировать синхронность фазы тактов с этим доменом. Подробнее см. "Тактирование" в Главе 3.
pll_ce_0 Вход Строб разрешения тактирования ввода/вывода (I/O clock enable) от BUFPLL_MCB. Этот сигнал выдает импульс лог. 1 на каждом другом периоде тактов sysclk_2x. Он используется для удвоения скорости передачи данных в блоках I/O.
pll_ce_90 Вход Строб разрешения тактирования ввода/вывода (I/O clock enable) от BUFPLL_MCB. Этот сигнал выдает импульс лог. 1 на каждом другом периоде тактов sysclk_2x_180. Он используется для удвоения скорости передачи данных в блоках I/O.
pll_lock Вход Сигнал захвата PLL от блока BUFPLL_MCB.
sysclk_2x Вход Главная системная тактовая частота для MCB. Этот сигнал генерируется блоком PLL Spartan-6 FPGA, и повторно буферизируется драйвером BUFPLL_MCB для цепи тактирования ввода/вывода (I/O clock network). Он работает на двойной частоте тактов памяти (например 667 МГц для 333 МГц на интерфейсе памяти).
sysclk_2x_180 Вход Это вход сигнала для сдвинутых по фазе тактов с той же частотой, что и sysclk_2x. Этот сигнал тактов генерируется теми же ресурсами PLL/BUFPLL_MCB.

Command Path. Таблица 2-5 определяет сигналы, связанные с путем команд MCB User Interface. Все имена сигналов порта имеют префикс pX, где X представляет номер порта (например сигналы порта 0 имеют префикс p0, порт 1 префикс p1, и так далее).

Таблица 2-5. Сигналы Command Path.

Имя сигнала Напр. Описание
pX_cmd_addr[29:0] Вход Байтовый начальный адрес для текущей транзакции. Адрес должен быть выровнен по размеру порта: для 32-битных портов младшие 2 бита должны быть нулями, для 64-битных портов младшие 3 бита должны быть нулями, и для 128-битных портов младшая тетрада адреса должна быть обнулена.
pX_cmd_bl[5:0] Вход Длина пакета (Burst Length) в количестве используемых слов для текущей транзакции. Burst Length кодируется числами от 0 до 63, представляя этим от 1 до 64 слов пользователя (например, b00011 означает длину пакета транзакции 4). Ширина слова пользователя равна разрядности порта (например, burst length 3 на 64-битном порту передает 3 x 64-битных слов пользователя, что всего равно 192 битам).
pX_cmd_clk Вход Такты пользователя для Command FIFO. Сигналы FIFO захватываются на положительном перепаде этих тактов.
pX_cmd_empty Выход Это флаг с активным уровнем лог. 1 для Command FIFO, показывающий, что нет команд, поставленных в очередь FIFO, хотя в этот момент могут быть команды в обработке.
pX_cmd_en Вход Это сигнал, активный по лог. 1, для разрешения записи (write-enable) для Command FIFO. Этот сигнал более подробно описан в Главе 4.
pX_cmd_error Выход Этот выход показывает, что произошла ошибка порта команды (Command Port), потому что указатели FIFO не синхронизировались. Требуется сброс MCB для восстановления из этой ситуации.
pX_cmd_full Выход Это выход с активным лог. 1, который работает как флаг заполнения Command FIFO. Он показывает, что FIFO не может принять больше команд и записей блоков в Command FIFO.
pX_cmd_instr[2:0] Вход Код команды для текущей инструкции. Бит 0 представляет выбор READ/WRITE, бит 1 это разрешение Auto Precharge, и бит 2 представляет Refresh, который всегда получает приоритет:
Write: 3'b000
Read: 3'b001
Write with Auto Precharge: 3'b010
Read with Auto Precharge: 3'b011
Refresh: 3'b1xx
Более подробно этот сигнал описан в Главе 4.

Write Datapath. Таблица 2-6 показывает все сигналы, связанные с путем записи MCB User Interface. Все имена сигналов порта имеют префикс pX, где X представляет номер порта (например сигналы порта 0 имеют префикс p0, порт 1 префикс p1, и так далее).

Таблица 2-6. Сигналы Write Datapath.

Имя сигнала Напр. Описание
pX_wr_clk Вход Это сигнал тактов пользователя для Write Data FIFO.
pX_wr_count[6:0] Выход Значение счетчика для Write Data FIFO. Этот выход показывает, сколько слов пользователя находится в FIFO (от 1 до 64). Значение счетчика 0 показывает, что FIFO пуст. Этот сигнал имеет латентность больше, чем флаг pX_wr_empty. Таким образом, FIFO может быть пустым или испытывать недогрузку, даже когда счетчик не равен 0.
pX_wr_data[PX_SIZE-1:0] Вход Значение Write Data для загрузки в Write Data FIFO и отправки в память. PX_SIZE может быть 32, 64 или 128 бит, в зависимости от конфигурации.
pX_wr_empty Выход Это сигнал, активный по лог. 1, является флагом опустошения Write Data FIFO. Он показывает, что в FIFO нет данных для записи в память.
pX_wr_en Вход Это сигнал, активный по лог. 1, является сигналом разрешения записи для Write Data FIFO. Он показывает, что значение pX_wr_data допустимо для загрузки в FIFO. Данные загружаются по фронту нарастания pX_wr_clk, когда pX_wr_en = 1 и pX_wr_full = 0.
pX_wr_error Выход Этот сигнал показывает, что произошла ошибка Write Data FIFO, из-за того, что указатели FIFO рассинхронизировались. Для восстановления из этого состояния должен быть произведен сброс MCB.
pX_wr_full Выход Этот сигнал с активным лог. 1 работает как флаг заполненности Write Data FIFO. Когда этот сигнал в лог. 1, то предотвращается загрузка данных в FIFO.
pX_wr_mask[PX_MASKSIZE-1:0] Вход Биты маски данных для Write Data. Эта маска загружается в FIFO с совпадением со связанными Write Data (pX_wr_data). Один бит маски связан с каждым байтом данных. Когда бит pX_wr_mask bit в лог. 1, соответствующий байт данных маскируется (т. е. не записывается в память).
pX_wr_underrun Выход Этот сигнал с активным лог. 1 работает как флаг недогрузки. Он показывает, что недостаточно данных в Write Data FIFO для завершения транзакции. Последнее достоверное слово данных будет записано для продолжения и завершения пакета. Чтобы предотвратить недогрузку, гарантируйте, что в FIFO достаточно данных, когда выдаете инструкцию Write для Command FIFO. Должен быть выставлен сигнал sys_rst для сброса этого флага и восстановления из этой ситуации.

Read Datapath. Таблица 2-7 показывает все сигналы, связанные с путем чтения MCB User Interface. Все имена сигналов порта имеют префикс pX, где X представляет номер порта (например сигналы порта 0 имеют префикс p0, порт 1 префикс p1, и так далее).

Таблица 2-7. Сигналы Read Datapath.

Имя сигнала Напр. Описание
pX_rr_clk Вход На этот вход подаются такты пользователя для Read Data FIFO.
pX_rd_en Вход Это сигнал, активный по лог. 1, работает как разрешение чтения для Read Data FIFO. Читаемые данные тактируются для вывода из FIFO по фронту нарастания pX_rd_clk, когда pX_rd_en = 1 и pX_rd_empty = 0.
pX_rd_data[PX_SIZE-1:0] Выход Значение Read Data, возвращаемое из памяти. Этот сигнал управляется выходом Read Data FIFO для передачи в логику FPGA. PX_SIZE может быть 32, 64 или 128 бита, в зависимости от конфигурации порта.
pX_rd_full Выход Это сигнал с активным уровнем лог. 1 представляет флаг заполненности Read Data FIFO. Когда сигнал в лог. 1, он предотвращает возврат дополнительных данных из памяти (данные не будут попадать в FIFO).
pX_rd_empty Выход Этот сигнал, активный по лог. 1, работает как флаг опустошения Read Data FIFO. Он показывает, что нет достоверных данных в FIFO.
pX_rd_count[6:0] Выход Значение счетчика для Read Data FIFO. Этот сигнал показывает, сколько слов пользователя находится в FIFO (от 1 до 64). Значение счетчика 0 показывает, что FIFO пуст. Этот сигнал имеет задержку больше, чем флаг pX_rd_full. Таким образом, FIFO может быть полным или может быть переполнение, даже если значение счетчика меньше 64.
pX_rd_overflow Выход Сигнал переполнения с активным лог. 1. Он показывает, что данные были потеряны из-за того, что Read Data продолжала возвращать данные из памяти после того, как Read Data FIFO заполнился. Чтобы предотвратить переполнение:
• Убедитесь, что достаточно памяти для сохранения запрошенных Read Data в FIFO перед выдачей инструкции Read в Command FIFO.
• Убедитесь, что учтены все выполняющиеся транзакции. Должен быть выставлен сигнал sys_rst для сброса этого флага и восстановления из этой ситуации.
pX_rd_error Выход Этот сигнал показывает, что произошла ошибка Read Data FIFO, потому что рассинхронизировались указатели FIFO. Для восстановления из этой ситуации должен быть выставлен сброс MCB.

Сигналы самообновления. Таблица 2-8 показывает сигналы self-refresh, доступные через интерфейс пользователя. Самообновление подробнее рассматривается в Главе 4.

Таблица 2-8. Сигналы Self-Refresh.

Имя сигнала Напр. Описание
selfrefresh_enter Вход Этот вход срабатывает по перепаду нарастания уровня. Когда он выставлен, MCB запрашивает устройство памяти вход в режим самообновления (self-refresh mode). Этот сигнал должен оставаться выставленным, пока не станет активным сигнал selfrefresh_mode.
selfrefresh_mode Выход Активный уровень лог. 1 этого сигнала показывает, что устройство памяти находится в режиме самообновления.

Интерфейс устройства памяти. 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.
b. Парные выводы стробирования данных, если используется только DQS (строб single-ended), DQS_n теряется как I/O. То же самое верно для UDQS и UDQS_n.

Таблица 2-9. Сигналы Memory Device Interface.

Имя сигнала Напр. Описание
mcbx_dram_addr [C_MEM_ADDR_WIDTH–1:0] Выход Шина адреса для устройства памяти. C_MEM_ADDR_WIDTH устанавливается утилитой MIG в зависимости от конфигурации устройства памяти (максимальное значение 15).
mcbx_dram_ba[2:0] Выход Шина адреса банка устройства памяти. MCB поддерживает устройства памяти, у которых до 8 банков.
mcbx_dram_cas_n Выход Этот сигнал с активной лог. 1 работает как строб адреса столбца для устройства памяти.
mcbx_dram_cke Выход Сигнал с активной лог. 1 работает как разрешение тактов для устройства памяти.
mcbx_dram_clk Выход Вывод дифференциальных тактов (p output) для устройства памяти.
mcbx_dram_clk_n Выход Вывод дифференциальных тактов (n output) для устройства памяти.
mcbx_dram_ddr3_rst Выход Это сигнал сброса устройства памяти DDR3.
mcbx_dram_dq [C_NUM_DQ_PINS–1:0] Вход и выход  Двунаправленная шина данных для устройства памяти. C_NUM_DQ_PINS устанавливается утилитой MIG в зависимости от конфигурации устройства памяти (допустимые значения 4, 8 и 16).
mcbx_dram_dqs Вход и выход  Двунаправленный строб данных для DQ[7:0]. Этот сигнал работает как вход во время транзакций Read и как выход для транзакций Write.
mcbx_dram_dqs_n Вход и выход  Двунаправленный комплементарный строб данных для DQ[7:0]. Этот сигнал работает как вход во время транзакций Read и как выход для транзакций Write.
mcbx_dram_ldm Выход Это выход маски данных для младшего байта данных (DQ[7:0]) для конфигураций x16, x8 или x4.
mcbx_dram_odt Выход Это выход сигнала on-die termination. ODT поддерживается микросхемами памяти DDR2 и DDR3.
mcbx_dram_ras_n Выход Сигнал с активным лог. 0, работающий как строб адреса строки для устройства памяти.
mcbx_dram_udm Выход Это выход маски данных для старшего байта данных (DQ[15:8]), когда подключено устройство памяти x16.
mcbx_dram_udqs Вход и выход Двунаправленный строб данных для DQ[15:8]. Этот сигнал работает как вход во время транзакций Read и как выход во время транзакций Write.
mcbx_dram_udqs_n Вход и выход Двунаправленный комплементарный строб данных для DQ[15:8]. Этот сигнал работает как вход во время транзакций Read и как выход во время транзакций Write.
mcbx_dram_we_n Выход Это сигнал с активным лог. 0, работающий как разрешение записи в устройство памяти.
rzq Вход и выход Требуемый вывод для всех разработок с использованием MCB. Когда в утилите MIG выбрано калиброванное терминирование входа (Calibrated Input Termination), вывод RZQ должен иметь резистор значения 2R между этим выводом и землей, где R равен желаемому значению для терминирования входа. Во всех других случаях вывод RZQ должен быть оставлен не подключенным. Вывод RZQ может быть перемещен на любой допустимый вывод корпуса в пределах банка MCB.
zio Вход и выход Сигнал No Connect, используемый с модулем программной калибровки (soft calibration module), когда выбрано Calibrated Input Termination. ZIO должен быть помещен на допустимый вывод корпуса в пределах банка MCB, и на этот вывод не должно быть разведено ни одного проводника (т. е. он никуда не подключается, no connect). ZIO не генерируется для дизайнов, которые не используют Calibrated Input Termination.

Примечание: обратитесь к "PCB Layout Considerations" в Главе 3 для получения требований, связанных с выводами CS#, ODT и CKE устройства памяти.

[3. Разработка с использованием MCB]

В этой главе предоставляется подробная информация о том, как следует проводить дизайн с использованием блока MCB микросхем Spartan-6 FPGA. Здесь содержаться следующие секции:

• Процесс разработки
• Поддерживаемые устройства памяти
• Симуляция
• Утилизация ресурсов FPGA
• Тактирование
• Миграция и банки памяти
• Разводка печатной платы

Процесс разработки. Имеется 2 поддерживаемых способа реализовать дизайн для использования MCB:

• Для не встраиваемых проектов (Non-embedded, где нет процессорного ядра):

   - Обычный дизайн FPGA с помощью инструментария Xilinx ISE [10].
   - Для дизайна MCB в составе инструментария CORE Generator™ используется утилита MIG.

• Для проектов, где есть процессорное ядро (Embedded):

   - Система с процессором на основе FPGA, применяется инструментарий EDK.
   - В рабочем окружении разработки MCB используется IP Configurator в Xilinx Platform Studio (XPS), входящий в состав 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
• Интерфейс Xilinx Cache Link (XCL)
• Интерфейс Local Link (LL)
• Другие персонализированные модули интерфейса (Personality Interface Module, PIM), поддерживаемые EDK

Рис. 3-1 показывает, как lower-level wrapper используется как для процесса дизайна non-embedded (с помощью MIG), так и для embedded (на основе EDK).

Spartan 6 FPGA MCB Lower Level Wrapper Non embedded fig3 1a Spartan 6 FPGA MCB Lower Level Wrapper Embedded fig3 1b
Дизайн Non-embedded
(утилита MIG/CORE Generator)
Дизайн Embedded
(EDK / XPS)

Рис. 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.

Фаза 1 Фаза 2 Фаза 3
Spartan 6 FPGA MCB Design Flow for Non embedded FPGA app fig3 2

Рис. 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 (емкость памяти указана в битах).

Стандарт Вендор Наименование Разрядность Емкость
DDR3 Micron MT41J64M16xx-187E 16 1 Gb
MT41J256M8xx-187E 8 2 Gb
MT41J128M8xx-187E 8 1 Gb
MT41J256M4xx-187E 4 1 Gb
MT41J512M4xx-187E 4 2 Gb
DDR2 MT47H256M4xx-25E 4 1 Gb
MT47H64M8xx-25E-IT 8 512 Mb
MT47H128M8xx-25 8 1 Gb
MT47H128M16xx-3 16 2 Gb
MT47H256M4xx-3 4 1 Gb
MT47H16M16xx-3 16 256 Mb
MT47H32M16xx-37E 16 512 Mb
MT47H32M8xx-37E 8 256 Mb
MT47J64M16xx-3 16 1 Gb
MT47J256M4xx-37E 4 1 Gb
MT47J128M8xx-3 8 1 Gb
Elpida EDE1116ACBG-8E 16 1 Gb
EDE5116AJBG-8E 16 512 Mb
Hynix HYB18TC512160B2F-2.5 16 512 Mb
DDR Micron MT46V32M16xx-5B-IT 16 512 Mb
MT46V32M8xx-5B 8 256 Mb
MT46V64M4xx-5B 4 256 Mb
LPDDR MT46H32M16xxxx-5 16 512 Mb
MT46H16M16xxxx-6-IT 16 256 Mb
MT46H16M16xxxx-75-IT 16 256 Mb
MT46H64M16xxxx-5L-IT 16 1 Gb
MT46H64M16xxxx-6L-IT 16 1 Gb

Симуляция. Модель симуляции нижележащего 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.

Ресурс
Ширина шины интерфейса памяти
x4 x8 x16
Memory Controller Block (MCB) 1 1 1
Зарезервированные на корпусе ножки I/O: Address, Data, Control, и т. д. 35 39 50
Модуль программной логики калибровки (Soft Calibration Module Logic) < 100 слайсов
Блок PLL 1 1 1
Буфер BUFPLL_MCB 1 1 1

Тактирование. Эта секция описывает требования к тактированию для реализации интерфейса с памятью на основе MCB. Утилита MIG (или EDK) автоматически генерирует инфраструктуру тактирования, которая полностью удовлетворяет этим требованиям. MCB требует 3 базовых типа тактов:

• Системные такты (MCB system clock), определяющие рабочую частоту контроллера памяти физический интерфейс к внешней микросхеме памяти.
• Такты калибровки, определяющие рабочую частоту логики калибровки.
• Такты пользователя, определяющие рабочую частоту портов User Interface. Эти такты могут быть полностью асинхронны с системными тактами и тактами калибровки. Стеки Command Path FIFO и Data Path FIFO обрабатывают необходимые передачи между доменами тактов из User Interface во внутреннюю логику контроллера.

Рис. 3-3 показывает рекомендуемую схему распространения системных тактов MCB и тактов калибровки. Блоки MCB, размещенные в регионах I/O слева и справа в устройстве, и они таким образом должны управляться от цепи тактирования I/O. Цепь тактирования I/O разработана для значительно больших частот, чем глобальная цепь тактирования, позволяя интерфейсам памяти работать на скоростях до 800 Mb/сек.

Примечание: CLKOUT0 и CLKOUT1 это только выходы PLL, которые можно подключить к драйверу BUFPLL_MCB. Эти соединения должны быть выполнены точно так, как показано на рис. 3-3.

Spartan 6 FPGA MCB Recommended System and Calibration Clock Distribution fig3 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"
• DIVIDE = 2

Прошедшие через буфер такты полной системной частоты (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.
pX_wr_clk: такты пользователя Write Data FIFO для загрузки записываемых данных из логики FPGA в FIFO при подготовке пакета данных, переносимых в память.
pX_rd_clk: такты пользователя Read Data FIFO для, чтобы передать в логику FPGA данные, возвращенные из памяти.

Такты пользователя полностью асинхронны с системными тактами и тактами калибровки, так что они могут работать на любой частоте, как того диктует логика дизайна FPGA. Стеки FIFO в составе MCB обрабатывают необходимые переходы между доменами тактов. Для наилучшей утилизации доступной полосы пропускания памяти частота тактов пользователя должна быть установлены равной частоте (или больше), определенной соотношением User Interface и интерфейса устройства памяти. Например:

• Для интерфейса DDR3 800 Mb/s на частоте тактов памяти 400 МГц и устройством памяти x8 бит получается результат передачи 16 бит данных 16 за один такт (по 8 бит на каждый перепад тактовой частоты памяти).
• Для x64 бит User Interface частота тактов пользователя должна быть установлена равной или выше (16/64) * 400 МГц = 100 МГц.

Хотя это технически не требуется, также настоятельно рекомендуется, чтобы все три тактовых частоты пользователя для порта (pX_cmd_clk, pX_wr_clk и pX_rd_clk, здесь X определяется номером порта от 0 до 5) управлялись от одного и того же источника из логики FPGA, чтобы избежать сложного тайминга и проблем синхронизации в дизайне пользователя.

Модификация Clock Setup. По умолчанию утилита MIG настраивает инфраструктуру тактирования, подразумевая, что входная частота тактов пользователя (CLKIN1 для PLL) работает на частоте тактов памяти. Чтобы изменить настройку тактирования для создания необходимых тактов MCB от другой тактовой частоты или для подстройки частот тактов пользователя или тактов калибровки, могут быть подстроены следующие параметры PLL на верхнем уровне примера MIG или дизайна пользователя:

• Cx_CLKFBOUT_MULT
• Cx_DIVCLK_DIVIDE
• Cx_CLKOUT0_DIVIDE (для sysclk_2x)
• Cx_CLKOUT1_DIVIDE (для sysclk_2x_180)
• Cx_CLKOUT2_DIVIDE (для тактов пользователя)
• Cx_CLKOUT3_DIVIDE (для тактов калибровки)

Здесь 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 на правой стороне устройства имеют тенденцию использовать более многофункциональные выводы.

Spartan 6 FPGA MCB 2 fig3 4a Spartan 6 FPGA MCB 4 fig3 4b
Устройства FPGA
с двумя блоками MCB
Устройства FPGA
с четырьмя блоками 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. Переходные отверстия для соединения от шариковых выводов компонента до внутреннего слоя исключаются из этого требования.
• Разводка не верхнем или нижнем слое может применяться для внешних резисторов терминирования (если это используется) когда помещаются в режиме fly-by после компонента памяти.
• Интерфейсы памяти без внешних терминирований должны иметь максимум 2 переходных отверстия.
• Интерфейсы памяти с внешними терминированиями должны иметь максимум 3 переходных отверстия.
• Как только сигнал проброшен во внутренний сигнальный слой, он должен завершить свою разводку в этом слое. Завершение сигнала на переходном отверстии разрешается конечной разводкой до переходного отверстия вывода компонента на вернем или нижнем слое печатной платы. Не разрешается менять слои PCB при разводке сигнала.
• Общая длина проводников должна быть минимальной. Проводники должны быть длиной 3 дюйма или меньше.
• Ширина проводников должна быть от 3 до 5 mil.
• Зазоры между проводниками должны быть втрое больше ширины проводника.
• Сигналы не должны прокладываться по разделу заливок меди (splits) или по пустым местам, без экранирования заливками (voids).
• Следует избегать разводку дифференциальных пар рядом с шумящими сигналами или высокоскоростными устройствами, такими как чипы генераторов тактов.
• Зазор между дифференциальными тактами/стробами и другими сигналами на том же слое PCB должен быть 20 mil. Пространство 20 mil должно быть сохранено при использовании серпантинов (змеек) с целью выравнивания длины проводников.
• Дифференциальные такты/стробы должны быть разведены как дифференциальные сигналы с волновым сопротивлением 100?. Пара для сигнала тактов должна быть разведена на том же слое PCB, без смены слоя после начального перехода от ножки корпуса микросхемы.
• Последовательное терминирование (если оно используется) должно быть как можно ближе к корпусу FPGA.
• Параллельные терминаторы (если они используются) должны быть как можно ближе к корпусу DRAM.
• Резисторы параллельного терминирования должны быть размещены на верхнем или нижнем слое островка VTT.
• Разработчики платы должны убедиться, что проводники тактов разведены дифференциально, и выбраны корректные ширины и зазоры проводников, чтобы получить целевой дифференциальный импеданс. Дифференциальная разводка сигнала уменьшает время распространения тактов в сравнении с однополярными сигналами. По этой причине большинство руководств по дизайну DDR2 рекомендуют, чтобы сигналы тактов были разведены проводниками одинаковой длины или более длинными, чем сигналы адреса, управления или команды, чтобы компенсировать эту вариацию времени распространения сигнала.

Рекомендации по разводке Data, Data Mask и Data Strobe. Сигналы данных (Data, DQ), маски данных (Data Mask, DM) и стробирования данных (Data Strobe, DQS) должны получать самый высокий приоритет (т. е. они должны быть разведены в первую очередь и быть максимально короткими), потому что это самые высокоскоростные сигналы DDR.

• Сигналы DQ, DM и DQS должны быть разведены в группе (на байт). Каждая группа должна иметь одинаковую нагрузку и разводку, чтобы сохранить тайминг и целостность сигналов.
• Зазор между группой данных и любыми другими сигналами должен быть 20 mil.
• Сигналы DQS должны быть изолированы от других сигналов зазором 20 mil, чтобы избежать перекрестных помех (crosstalk).
• Должна быть разница в задержке максимум ±25 пикосекунд (±150 mil разница в длине) между любым DQ/DM и связанным с ним стробом DQS.
• Группа данных должна быть разведена рядом с заливкой GROUND.
• Для упрощения разводки разрешается переставлять биты DQ на интерфейсе памяти. Перестановка должна быть сделана только внутри группы данных.
• Длины проводников от DQS до DQS_N должны совпадать (±10 mil).
• Терминирования памяти (если используются внешние терминаторы) должны быть размещены после соответствующего компонента памяти (в стиле fly-by).
• Для 16-битных устройств DDR длины проводников LDQS/LDQS_N и UDQS/UDQS_N должны совпадать по задержке ±25 пикосекунд (±150 mil).

Рекомендации по разводке Address, Control и Clock. Когда группы данных разведены, следующие по самому высокому приоритету это дифференциальные такты (CK / CK_N). Эти такты должны быть разведены первыми, потому что все длины проводников сигналов адреса и управления должны опираться на длину трасс дифференциальных тактов на PCB, что возможно понадобится корректировать по мере продолжения выполнения работы по разводке.

• Длины проводников от CK до CK_N должны совпадать (±10 mil).
• Длины проводников CK и DQS должны соответствовать друг другу (±250 mil), чтобы максимально увеличить пределы установки и удержания сигналов.
• Должна быть максимум задержка ±50 ps (±300 mil) между сигналами адреса/управления и связанным выходом FPGA дифференциальных тактов CK и CK_N.
• Сигналы адреса и управления могут быть разведены относительно заливки POWER, если заливка GROUND не следующая в стеке слоев PCB для этой группы сигналов.
• Чтобы избежать перекрестных помех, сигналы адреса и команд следует разводить в другом слое разводки, отличающемся от слоя разводки сигналов DQ, DQS и DM.
• Терминирование дифференциальных тактов (если используется внешнее терминирование) должно быть расположено максимально близко к нагрузке, после тактовых площадок PCB. Длины проводников PCB, используемые в учете совпадения длины, должны исключать длину CLINE проводника PCB от памяти до терминирующего резистора.
• Терминирование памяти должно быть размещено (если используется внешнее терминирование) после соответствующего компонента памяти (в стиле fly-by).

Дополнительные требования дизайна PCB. В дополнение к уже перечисленным рекомендациям по разводке PCB, описанным в этой секции, нужно реализовать следующие требования к дизайну печатной платы:

• Вывод сигнала выборки с активным лог. 0 (Chip Select, CS#) целевой памяти должен быть подключен к земле платы. Из-за того, что MCB поддерживает подключения только к одной микросхеме памяти, он не предоставляет сигнал для управления входом CS#. За дополнительной информацией при необходимости обращайтесь к поставщику Вашей памяти.
• Для устройств памяти DDR3 сигналы RESET и CKE должны иметь каждый по резистору 4.7 k?, подключенному между сигналом и землей, чтобы гарантировать, что эти сигналы находятся в лог. 0 во время инициализации памяти.
• Для устройств памяти DDR2 сигналы ODT и CKE должны иметь каждый по резистору 4.7 k?, подключенному между сигналом и землей, чтобы гарантировать, что эти сигналы находятся в лог. 0 во время инициализации памяти.
• Если вывод HSWAPEN устройства Spartan-6 находится в лог. 0 или заземлен во время конфигурирования, внутренние резисторы pull-up на шину питания VCCO разрешены на всех выводах I/O до завершения конфигурации, включая любой из выводов VREF, связанных с использованием MCB. Если уровень VREF генерируется делителем напряжения на резисторах, то внутренние резисторы pull-up могут повысить уровень выводов VREF во время инициализации устройства. Разработчик должен гарантировать, что MCB удерживается в состоянии сброса, пока уровень VREF не перейдет в стабильное состояние, чтобы избежать калибровки MCB и работы на неправильном уровне VREF. Для дополнительной информации см. секцию "Configuration" в главе "I/O Pin and Clock Planning" chapter of UG393 [7].

Одновременное переключение выхода. Как отмечено в блок-диаграмме Главы 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)
• Калибровка (Calibration)
• Инструкции
• Адресация
• Тайминг пути команды (Command Path Timing)
• Тайминг пути записи (Write Path Timing)
• Тайминг пути чтения (Read Path Timing)
• Транзакции памяти
• Самообновление (Self Refresh)
• Приостановка работы (Suspend)
• Преобразование адреса байта в адрес памяти
• Упорядочивание транзакции и когерентность

Последовательность запуска. Рис. 4-1 показывает процедуру startup для MCB. После того, как FPGA полностью сконфигурирована, произошел захват PLL и генерируются системные такты, блоком MCB автоматически выполняются некоторое количество шагов по инициализации и калибровке MCB, чтобы подготовить его нормальное функционирование.

Spartan 6 FPGA MCB Startup Sequence fig4 01

Рис. 4-1. MCB Startup Sequence.

Замечания по рис. 4-1:

1. Модуль программной калибровки (soft calibration module) реализует некоторые аспекты фаз калибровки 1, 2 и 3.
2. Аппаратная логика калибровки MCB НЕ ВЫПОЛНЯЕТ индивидуальную подстройку по битам момент появления данных на шине DQ. Следуйте рекомендациям по разводке печатной платы (см. выше секцию "Разводка печатной платы"), чтобы гарантировать соответствие на PCB длинs проводников сигналов DQ/DQS.

Первая важная операция запуска это фаза 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) и разрешается во все другое время, чтобы правильно терминировать приходящие сигналы.

Spartan 6 FPGA MCB Calibrated Input Split Termination fig4 02a Spartan 6 FPGA MCB Calibrated Input Thevenin Equivalent fig4 02b
Реализовано разделенное терминирование (Split Termination) Thevenin-эквивалент

Рис. 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.

Spartan 6 FPGA MCB Phase2 Calibration DQS Centering Before fig4 03a Spartan 6 FPGA MCB Phase2 Calibration DQS Centering After fig4 03b
Перед фазой 2 После фазы 2

Рис. 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.

Инструкция Code[2:0] Описание
Write 000 Запись в память. Записывает некоторое количество слов данных, указанное битами pX_cmd_bl[5:0] в устройство памяти по начальному адресу байта, указанному битами pX_cmd_addr[29:0]. Перед выдачей этой инструкции должно быь загружено достаточное количество данных в стек Write Data FIFO, чтобы успешно завершить транзакцию записи. При не выполнении этого условия произойдет событие недогрузки (underrun condition). Эта инструкция допустима только для записи и только для двунаправленных портов.
Read 001 Чтение памяти. Читает некоторое количество байт, заданное битами pX_cmd_bl[5:0] из устройства памяти по начальному адресу байта, указанному битами pX_cmd_addr[29:0]. Перед выдачей этой инструкции в стеке Read Data FIFO должно быть достаточно места для успешного завершения транзакции. Иначе произойдет событие переполнения (overflow condition). Эта инструкция допустима только для чтения и двунаправленных портов.
Write with Auto Precharge 010 Запись в память с автоматическим предзарядом. Эта инструкция такая же, как Write, с добавлением auto precharge после завершения пакетной передачи. Auto precharge закрывает банк DRAM, где закончилась транзакция. Это может увеличить латентность для приложений, которые осуществляют множество произвольных записей по памяти с тенденцией перехода между строками в том же самом банке.

Примечание: MCB просматривает вперед последующие транзакции. Благодаря этому auto precharge пропускается, если следующая транзакция осуществляется в ту же строку, что и текущая транзакция.
Read with Auto Precharge 011 Чтение памяти с автоматическим предзарядом. Эта инструкция делает то же самое, что и Read, но в конец пакета транзакции добавляется auto precharge. Auto precharge закрывает банк DRAM, где закончилась транзакция. Это может увеличить латентность для приложений, которые осуществляют множество произвольных записей по памяти с тенденцией перехода между строками в том же самом банке.

Примечание: MCB просматривает вперед последующие транзакции. Благодаря этому auto precharge пропускается, если следующая транзакция осуществляется в ту же строку, что и текущая транзакция.
Refresh 1xx Обновление памяти. Предлагает MCB выдать команду обновления для устройства памяти. Сбрасывает счетчик tREFI, позволяя потоку данных быть непрерывным для полного цикла обновления. Эта инструкция должна использоваться только для очень специфических структур потока данных. Обычно 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 бита 4 pX_cmd_addr[1:0] = 2'b00
64 бита 8 pX_cmd_addr[2:0] = 3'b000
128 бит 16 pX_cmd_addr[3:0] = 4'b0000

Также важно понимать взаимосвязь адресации, когда 32-битный и 64-битный порты используются совместно на User Interface (см. секцию "Конфигурации порта" выше). Для 32-битных портов память предоставляется выровненной на границу 4 байт, в то время как для 64-битных портов память предоставляется выровненной на границы 8 байт. Таблица 4-3 показывает, как два слова данных для 32-битного порта отображаются на адресное пространство одного слова данных 64-битного порта.

Таблица 4-3. Взаимосвязь адреса 32-битного и 64-битного порта.

32-битный порт 64-битный порт
Адрес Данные Адрес Данные
0x00 [31:0] 0x00 [31:0]
0x04 [31:0] [63:32]
0x08 [31:0] 0x08 [31:0]
0x0C [31:0] [63:32]

Тайминг 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.

Spartan 6 FPGA MCB Command Path Timing Write fig4 04

Рис. 4-4. Command Path Timing (Write, запись).

Spartan 6 FPGA MCB Command Path Timing Read fig4 05

Рис. 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.

Spartan 6 FPGA MCB Write Path Timing fig4 06

Рис. 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.

Spartan 6 FPGA MCB Read Path Timing fig4 07

Рис. 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 бита).

Spartan 6 FPGA MCB Loading Write Data FIFO fig4 08

Рис. 4-8. Загрузка Write Data FIFO.

Рис. 4-9 показывает протокол для ввода запроса записи в Command FIFO после того, как данные были загружены в Write Data FIFO. Значение pX_cmd_bl (b'10 соответствует длине пакета burst length 3) соответствует количеству загруженных слов данных. Когда запрос записи загружен в Command FIFO, MCB автоматически запускает транзакцию в устройстве памяти, когда арбитр обслуживает этот порт.

Spartan 6 FPGA MCB Entering Write Request into Command FIFO fig4 09

Рис. 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 автоматически выполнить транзакцию, когда арбитр обслуживает этот порт.

Spartan 6 FPGA MCB Entering Read Request into Command FIFO fig4 10

Рис. 4-10. Ввод Read Request в Command FIFO.

Рис. 4-11 показывает запрошенные данные, возвращаемые из памяти и загруженные в Read Data FIFO. Данные представлены на шине pX_rd_data для доступа со стороны логики FPGA. Значения pX_rd_empty и pX_rd_count показывают, что данные были загружены в FIFO.

Spartan 6 FPGA MCB Read Data Returning from Memory Device fig4 11

Рис. 4-11. Read Data, возвращенные устройством памяти.

Для перемещения данных в логику FPGA из Read Data FIFO сигнал pX_rd_en должен быть активирован по время появления фронта нарастания pX_rd_clk, как это показано на рис. 4-12. Значение pX_rd_count обновляется соответствующим образом.

Spartan 6 FPGA MCB Transferring Read Data into FPGA Logic fig4 12

Рис. 4-12. Передача Read Data в логику FPGA.

Read Latency. Задержка чтения (Read Latency) определяется количество тактов памяти от момента, когда команда READ записана в Command Path FIFO интерфейса пользователя (User Interface) до момента, когда первое слово данных доступно в стеке FIFO Read Data Path.

При оценке задержек чтения важно задать полные условия, при которых происходит изменение. Задержка чтения меняется в зависимости от следующих условий:

• Количество команд, уже находящихся в конвейере FIFO, перед тем, как выдана команда READ
• Нужно или нет выдать команду ACTIVATE, чтобы открыть новый банк/строку
• Нужно или нет выдать команду PRECHARGE, чтобы закрыть ранее открытый банк
• Специфичные параметры времени для памяти, такие как tRAS и tRCD совместно с частотой тактов шины
• Состояние арбитра в дизайнах с несколькими портами
• Задержка сигнала выборки столбца микросхемы памяти (CAS latency)
• Задержки распространения сигнала уровня печатной платы и уровня кристалла (как для памяти, так и для FPGA)

Таблица 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.

Сценарий латентности чтения
Латентность чтения (в тактах памяти)
MEMCLK = 333 МГц (667 Mb/сек) MEMCLK = 400 МГц (800 Mb/сек)
Чтение из открытой строки (Open Row)
Outbound Command Path 12.5 12.5
Memory CAS Latency (CL) 5 5
Inbound Read Datapath 4.5 4.5
Общая латентность в тактах (время в наносекундах) 22 (66 нс) 22 (55 нс)
Чтение из новой строки (New Row)
Outbound Command Path 12.5 12.5
Precharge/Activate 10 12
Memory CAS Latency (CL) 5 5
Inbound Read Datapath 4.5 4.5
Общая латентность в тактах (время в наносекундах) 32 (96 нс) 34 (85 нс)

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.

Spartan 6 FPGA MCB Entering Self Refresh Mode fig4 13

Рис. 4-13. Вход в режим Self-Refresh.

Spartan 6 FPGA MCB Exiting Self Refresh Mode fig4 14

Рис. 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 и выхода из него в соответствии с этим сценарием.

Spartan 6 FPGA MCB SUSPEND SYNC connections fig4 15

Рис. 4-15. Соединения SUSPEND_SYNC.

Spartan 6 FPGA MCB Suspend Mode Timing Diagram fig4 16

Рис. 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).

Адрес байта 29 28 27 26 25 24 23 22 21 20 18 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0  V
Тип Бит Емк.                                                              
DDR x16 128 Mb                                                              
256 Mb                                                              
512 Mb                                                              
1 Gb                                                              
x8 128 Mb                                                              
256 Mb                                                              
512 Mb                                                              
1 Gb                                                              
x4 128 Mb                                                              
256 Mb                                                              
512 Mb                                                              
1 Gb                                                              
                                                                   
DDR2 x16 256 Mb                                                              
512 Mb                                                              
1 Gb                                                              
2 Gb                                                              
4 Gb                                                              
x8 256 Mb                                                              
512 Mb                                                              
1 Gb                                                              
2 Gb                                                              
x4 256 Mb                                                              
512 Mb                                                              
1 Gb                                                              
2 Gb                                                              
                                                                   
DDR3 x16 512 Mb                                                              
1 Gb                                                              
2 Gb                                                              
4 Gb                                                              
x8 512 Mb                                                              
1 Gb                                                              
2 Gb                                                              
x4 512 Mb                                                              
1 Gb                                                              
2 Gb                                                              
                                                                   
LPDDR x16 128 Mb                                                              
256 Mb                                                              
512 Mb                                                              
1 Gb                                                              

Легенда:

    Биты адреса столбца (Column) CA[0] притянуты к лог. 0 для 4-битных микросхем памяти
   Биты адреса банка (Bank)
   Биты адреса строки (Row)

Порядок следования транзакций и когерентность. В архитектуре MCB транзакции, выполняемые с памятью, подтверждаются по отношению к одному порту. Следовательно для одного порта транзакции завершаются в том же порядке, в каком запрашиваются.

По нескольким портам MCB нет гарантии, что транзакции, выданные разными портами, будут завершены в порядке поступления запросов. Алгоритм арбитража может быть модифицирован так, чтобы указанный порт имел преимущество перед другим портом. Это можно использовать как механизм влияния на порядок выполнения транзакций, но это не может гарантировать определенный порядок их выполнения.

MCB позволяет буферизировать внутри себя транзакции записи. Из-за буферизации будет неопределенным время, когда транзакция записи будет принята в Command FIFO, и когда завершится запись в память. Из-за того, что порядок выполнения транзакций между портами не гарантируется, то порт, который выполняет чтения по адресу, в который пишет другой порт, может прочитать из памяти новое или старое значение (но какое конкретно заранее не известно).

В некоторых приложениях важно знать, что запись в память была завершена перед чтением того же места памяти (так называемая когерентность доступа). Есть 3 метода, которые могут гарантировать когерентность:

1. Мониторинг флага опустошения Command FIFO:

• Если предположить, что только одна команда находится в очереди на определенном порту, пользователь может мониторить флаг Command FIFO empty. Этот флаг перейдет в лог. 1, когда MCB начнет выдавать команду записи. Когда эта команда запустится, это будет гарантировать, что завершится обработка данных, доступных в Write Data FIFO.
• Дизайн может ждать флага Command FIFO empty, когда он перейдет в лог. 1, перед тем, как можно будет выполнить чтение.

2. Дизайн может воспользоваться преимуществом того факта, что транзакция завершается в определенном порядке для определенного порта:

• После записи в чувствительную часть памяти устройство может выдать пустое чтение, и ждать завершения пустого чтения и возврата данных.
• Завершение пустого чтения гарантирует, что предыдущая запись в память была завершена.

3. Подстройка алгоритма арбитража:

• Если порт, выполняющий записи, может всегда быть установленным на приоритет выше, чем порты, выполняющие чтение, то это гарантирует, что запись завершится перед чтением, когда эти операции происходят на двух портах. Следует внимательно применять этот метод, потому что порты могут иметь пустые циклы между запросами записи и чтения.

Примечание: использование любого из этих методов для гарантирования когерентности приведет к снижению производительности системы; поэтому такие методы следует применять только в случае необходимости.

[Приложение A]

По этим ссылкам можно найти пробную информацию по каждому из стандартов памяти, реализуемому в MCB:

• JEDEC DDR3 Specification
http://www.jedec.org/sites/default/files/docs/JESD79-3D.pdf

• JEDEC DDR2 Specification
http://www.jedec.org/sites/default/files/docs/JESD79-2F.pdf

• JEDEC DDR Specification
http://www.jedec.org/sites/default/files/docs/JESD79F.pdf

• JEDEC LPDDR Specification
http://www.jedec.org/sites/default/files/docs/JESD209A.pdf

Эти ссылки предоставляют дополнительные подробности по разводке печатной платы и анализу целостности сигналов для микросхем памяти DDR. Xilinx не гарантирует точность и полноту любого из этих материалов.

• Hardware Tips for Point-to-Point System Design: Termination, Layout, and Routing
http://download.micron.com/pdf/technotes/DDR/tn4614.pdf

• Interfacing the RC32434/5 with DDR SDRAM Memory
http://www.idt.com/products/getDoc.cfm?docID=571565

• DDR-SDRAM Layout Considerations for MCF547x/8x Processors
http://www.freescale.com/files/32bit/doc/app_note/AN2826.pdf

• Hardware and Layout Design Considerations for DDR2 SDRAM Memory Interfaces
http://www.freescale.com/files/32bit/doc/app_note/AN2910.pdf

• DDR System Design Considerations
http://download.micron.com/pdf/presentations/dram/plat7justin.pdf

• DDR2 Package Sizes and Layout Requirements
http://download.micron.com/pdf/technotes/ddr2/TN4708.pdf

• DDR2 (Point-to-Point) Package Sizes and Layout Basics
http://download.micron.com/pdf/technotes/ddr2/TN4720.pdf

• Understanding TI’s PCB Routing Rule-Based DDR Timing Specification
http://focus.ti.com.cn/cn/lit/an/spraav0a/spraav0a.pdf

• Implementing DDR2 PCB Layout on the TMS320C6454/5
http://focus.ti.com/lit/an/spraaa7e/spraaa7e.pdf

[Ссылки]

1. UG388 Spartan-6 FPGA Memory Controller site:xilinx.com.
2. UG416 Spartan-6 FPGA Memory Interface Solutions site:xilinx.com.
3. DS643 LogiCORE IP Multi-Port Memory Controller (MPMC) site:xilinx.com.
4. UG385 Spartan-6 FPGA Packaging and Pinouts Product Specification site:xilinx.com.
5. UG626 Synthesis and Simulation Design Guide site:xilinx.com.
6. UG382 Spartan-6 FPGA Clocking Resources site:xilinx.com.
7. UG393 Spartan-6 FPGA PCB Design and Pin Planning site:xilinx.com.
8. DS162 Spartan-6 FPGA Data Sheet: DC and Switching Characteristics site:xilinx.com.
9. UG361 Spartan-6 FPGA SelectIO Resources site:xilinx.com.
10. Как установить Xilinx ISE Design Tools.