ADSP-BF538: блок интерфейса внешней шины Печать
Добавил(а) microsin   

В этой статье приведен перевод раздела "18. EXTERNAL BUS INTERFACE UNIT" даташита [1]. Описан блок интерфейса с внешней шиной (external bus interface unit, EBIU) процессора ADSP-BF538. Блок EBIU предоставляет прозрачный интерфейс для подключения внешних микросхем памяти. С его помощью процессор поддерживает внешнее синхронное динамическое ОЗУ (SDRAM), и совместим со стандартами PC100 и PC133 SDRAM. EBIU также поддерживает асинхронные интерфейсы для подключения памяти SRAM, ROM, FIFO, FLASH, и чипов ASIC/FPGA.

Система EBIU обрабатывает запросы к внешней памяти со стороны ядра процессора или канала DMA. Приоритет запросов определяет контроллер внешней шины. Адрес запроса определяет, чем будет обработан запрос - либо контроллером EBIU SDRAM, либо контроллером асинхронной памяти EBIU.

EBIU тактируется от системной тактовой частоты (SCLK). Все микросхемы синхронной памяти, подключенные к процессору, работают на частоте SCLK. Соотношение между частотой ядра (CCLK) и частотой SCLK программируется через MMR-регистр системы фазовой автоподстройки частоты (phase-locked loop, PLL). Подробнее про это см. разделы "Core Clock/System Clock Ratio Control" даташита [1] (или "Тактирование" и "Управление соотношением частот CCLK/SCLK" [5]).

ADSP BF538 External Memory Map

Рис. 18-1. Карта распределения адресного пространства внешней памяти (External Memory Map).

Адресное пространство внешней памяти показано на рис. 18-1. Одна область памяти выделена для поддержки SDRAM. Параметры интервалов времени интерфейса SDRAM и размер области SDRAM программируются. Размер области памяти SDRAM может находиться в пределах от 16 до 512 мегабайт.

Как подключить микросхемы SDRAM, которые меньше 16 мегабайт по объему памяти, см. раздел "Using SDRAMs Smaller Than 16M Byte" даташита [1].

Начальный адрес области памяти SDRAM 0x00000000. Область от конца области памяти SDRAM до адреса 0x20000000 зарезервирована.

Следующие 4 области памяти выделены для поддержки микросхем асинхронной памяти. Каждая область асинхронной памяти может быть независимо запрограммирована для поддержки отличающихся характеристик микросхемы памяти. Каждая область имеет свой отдельный выход выборки, сигнал на котором генерирует EBIU.

Далее идет область зарезервированной памяти. Обращения к этой области не будет генерировать транзакции по внешней шине. Записи в эту область не дадут никакого эффекта, и чтения вернут неопределенные значения. EBIU генерирует ошибку обращения по внутренней шине, что вызовет генерацию аппаратного исключения (hardware exception) для доступа со стороны ядра и опционально может генерировать прерывание от канала DMA.

На рис. 18-2 показана концептуальная блок-диаграмма EBIU и его интерфейсов. Надчеркивание над именем сигнала на рисунке (или префикс ~ в тексте) означает активный низкий уровень этого сигнала.

ADSP BF538 External Bus Interface Unit

Рис. 18-2. External Bus Interface Unit (EBIU).

Поскольку в любой момент времени может быть осуществлено обращение только к одному устройству памяти, то сигналы управления, адреса и данных для каждого типа памяти мультиплексированы друг с другом на выводах процессора. Контроллер асинхронной памяти (asynchronous memory controller, AMC) и контроллер динамической синхронной памяти (SDRAM controller, SDC) эффективно управляют общими выводами корпуса кристалла процессора.

[Внутренние интерфейсы памяти]

EBIU работает как подчиненное устройство, подключенное к процессору по трем внутренним шинам:

• External access bus (EAB). Эта шина обслуживает блок управления памятью ядра от имени запросов ядра к внешней шине.
• DMA external bus (DEB). Эта шина обслуживает контроллер DMA от имени запросов канала DMA к внешней шине.
• Peripheral access bus (PAB). Эта шина обслуживает запросы ядра к системным MMR.

Эти синхронные интерфейсы, тактируемые с частотой SCLK, доступны как регистры EBIU. EAB предоставляет доступ и к асинхронной внешней памяти, и к синхронной внешней памяти DRAM. Внешний доступ управляется либо контроллером асинхронной памяти (AMC), либо контроллером SDRAM (SDC), в зависимости от внутреннего адреса, использовавшегося в запросе к EBIU. Поскольку AMC и SDC используют один и тот же интерфейс к внешним выводам процессора, доступ к внешним микросхемам памяти осуществляется последовательно, и должен управляться на базе запросов от EAB.

Шина PAB используется только для доступа к регистрам состояния и управления EBIU, привязанным к ячейкам памяти (MMR). PAB раздельно подключается к AMC и SDC, так что не нужен арбитраж для распределения циклов доступа от шины EAB.

Логика контроллера внешней шины (external bus controller, EBC) должна выполнять арбитраж запросов доступа к внешней памяти, приходящих от шин EAB и DEB. Логика EBC перенаправляет запросы чтения и записи на соответствующий контроллер памяти, базируясь на выборе шины. Выполнение доступа для AMC и SDC осуществляется через общие логические схемы внешних выводов. Это работает по принципу конвейера, в том порядке, который задает арбитр EBC. В большинстве случаев транзакции от ядра процессора имеют приоритет перед доступом от DMA. Однако, если контроллер DMA детектировал чрезмерное резервное копирование транзакций, то он может запросить временное повышение приоритета своих запросов перед запросами со стороны ядра.

[Внешние интерфейсы памяти]

Как уже упоминалось, и AMC, и SDC используют один и тот же внешний физический интерфейс выводов кристалла для сигналов адреса и данных, и даже общие выводы для некоторых сигналов управления. Вот выводы, которые являются общими:

ADDR[19:1], шина адреса
DATA[15:0], шина данных
ABE[1:0]/SDQM[1:0], сигналы разрешения байта AMC (AMC byte enable)/маски данных SDC (SDC data masks)
BR, BG, BGH, сигналы управления доступа внешней шины

Другие сигналы не мультиплексируются между двумя контролерами. В таблицах 18-1 и 18-2 описаны сигналы, связанные с каждым из интерфейсов. В столбце Тип буквами помечен тип сигнала: I означает вход, O выход.

Таблица 18-1. Сигналы интерфейса асинхронной памяти.

Сигнал Тип Описание
DATA[15:0] I/O Внешняя шина данных.
ADDR[19:1] O Внешняя шина адреса.
~AMS[3:0] O Выборки микросхем банков асинхронной памяти.
~AWE O Сигнал разрешения для записи (write enable).
~ARE O Сигнал разрешения для чтения (read enable).
~AOE O Сигнал для разрешения выходных буферов асинхронной памяти. В большинстве случаев сигнал ~AOE должен подключаться к выводу выборки ~OE внешней микросхемы памяти, включенной в адресное пространство внешней асинхронной памяти(1).
ARDY I Ответ микросхемы памяти, сообщающий о своей готовности. Внимание: это синхронный вход.
~ABE[1:0]/SDQM[1:0] O Сигналы разрешения байт.

Примечание 1: обратитесь к даташиту на процессоры ADSP-BF538/ADSP-BF538F [1] для получения дополнительной информации по интервалам времени между сигналами ~AOE и ~ARE, чтобы определить, какой сигнал интерфейса нужно использовать в системе.

Таблица 18-2. Сигналы интерфейса SDRAM.

Сигнал Тип Описание
DATA[15:0] I/O Внешняя шина данных.
ADDR[19:18], ADDR[16:1] O Внешняя шина адреса. Подключается к входам адреса микросхем SDRAM. Выходы для адреса банка ADDR[19:18] должны быть подключены к выводам BA[1:0] микросхем SDRAM.
~SRAS O Строб строк, подключается к выводу ~RAS микросхем SDRAM.
~SCAS O Строб столбцов, подключается к выводу ~CAS микросхем SDRAM.
~SWE O Сигнал разрешения записи, подключается к выводу ~WE микросхем SDRAM.
~ABE[1:0]/SDQM[1:0] O Сигналы маскирования данных, подключаются к выводам DQM микросхем SDRAM.
~SMS O Сигнал выборки памяти для банка внешней памяти, сконфигурированного под SDRAM. Подключается к выводам выборки ~CS микросхем SDRAM.
SA10 O Вывод A10 для микросхем SDRAM. Интерфейс SDRAM использует этот вывод, чтобы можно было выполнить обновление SDRAM, пока AMC использует шину. Подключается к выводу A[10] микросхем SDRAM.
SCKE O Вывод разрешения тактов, подключается к выводу CKE микросхем SDRAM.
CLKOUT O Выход для тактирования SDRAM. Переключается с частотой системной шины процессора SCLK. Подключается к выводу CLK микросхем SDRAM.

[Модель программирования EBIU]

Для программирования EBIU используется система регистров, привязанных к адресам памяти (memory-mapped registers, MMR). Это 6 регистров управления и 1 регистр состояния EBIU:

• Asynchronous memory global control register (EBIU_AMGCTL), глобальный регистр управления асинхронной памятью.
• Asynchronous memory bank control 0 register (EBIU_AMBCTL0), регистр управления банком 0 асинхронной памяти.
• Asynchronous memory bank control 1 register (EBIU_AMBCTL1), регистр управления банком 1 асинхронной памяти.
• SDRAM memory global control register (EBIU_SDGCTL), глобальный регистр управления памятью SDRAM.
• SDRAM memory bank control register (EBIU_SDBCTL), регистр управления банками памяти SDRAM.
• SDRAM refresh rate control register (EBIU_SDRRC), регистр управления скоростью обновления SDRAM.
• SDRAM control status register (EBIU_SDSTAT), регистр состояния SDRAM.

Каждый из этих регистров будет подробно описан в секциях, посвященных контроллерам AMC и SDC.

[Детектирование ошибок]

EBIU отвечает на любую операцию с шиной в диапазоне адресов 0x00000000 – 0xEEFFFFFF, даже если эта операция по шине попадает на зарезервированный или запрещенный адрес памяти или функции. EBIU отвечает по завершению операции на шине, выставляя соответствующий номер подтверждения, как это было указано мастером шины, и выставляя сигналы ошибки шины для следующих событий ошибки:

• Любой доступ к зарезервированной области памяти, не находящейся на кристалле чипа.
• Любой доступ к запрещенному внешнему банку памяти.
• Любой доступ к отсутствующей области памяти банка SDRAM.

Если запрос ядра привел к ошибке доступа по шине, то генерируемый ответ ошибки от EBIU передается в прерывание HWE ядра (это прерывание может быть замаскировано). Если запрос мастера DMA привел к ошибке доступа по шине, то ошибка шины захватывается в контроллере и опционально может генерировать прерывание для ядра.

[Интерфейс асинхронной памяти (Asynchronous Memory Interface)]

Интерфейс асинхронной памяти позволяет прозрачно подключить к процессора различные микросхемы памяти и периферийные устройства. Это включает память SRAM, ROM, EPROM, flash, и чипы логики FPGA/ASIC. Поддерживается 4 области асинхронной памяти. Каждая из них имеет индивидуальный сигнал выборки памяти, как показано в таблице 18-3.

Таблица 18-3. Диапазоны адресов банка асинхронной памяти.

Сигнал выборки банка Начальный адрес Конечный адрес
~AMS[3] 0x20300000 0x203FFFFF
~AMS[2] 0x20200000 0x202FFFFF
~AMS[1] 0x20100000 0x201FFFFF
~AMS[0] 0x20000000 0x200FFFFF

Декодирование адреса асинхронной памяти. Диапазон адреса, связанный с каждым банком памяти фиксирован, и имеет размер в 1 мегабайт; однако не обязательно должны иметься в наличии все разрешенные банки памяти. В отличие от памяти SDRAM, которая может нуждаться в поддержке очень больших структур, перекрывающих несколько банков памяти, должно быть относительно просто обеспечить ограничение для кода и структур данных, чтобы они находились в пределах одного из поддерживаемых банков асинхронной памяти (из-за природы типов кода или данных, которые хранятся в этой памяти).

Обратите внимание, что не представленные банки памяти, или частично заполненные банки AMC не приведут к ошибке шины, и будут обращаться к допустимым адресам AMC.

Сигналы асинхронной памяти были перечислены в таблице 18-1. Интервалы времени на этих выводах программируются, чтобы можно было гибко настраивать подключения к устройствам с разными скоростями доступа. Примеры интерфейсов см. в разделе "21. System Design" даташита [1].

Глобальный регистр управления асинхронной памятью (asynchronous memory global control register, EBIU_AMGCTL), показанный на рис. 18-3, конфигурирует общие параметры контроллера. Регистр EBIU_AMGCTL содержит биты разрешения банков и другую информацию. Регистр EBIU_AMGCTL не должен программироваться, когда используется AMC. Регистр EBIU_AMGCTL должен быть последним записываемым управляющим регистром, когда процессор конфигурируется для доступа к внешним асинхронным устройствам.

Для тех внешних устройств, для которых нужен тактовый сигнал, может быть разрешен выход CLKOUT, если в регистре EBIU_AMGCTL установить бит AMCKEN. В системах, которые не используют CLKOUT, установите в 0 бит AMCKEN.

ADSP BF538 EBIU AMGCTL

Рис. 18-3. Asynchronous Memory Global Control Register (EBIU_AMGCTL).

CDPRIO. 0: у ядра приоритет перед DMA для доступа к внешним устройствам, 1: приоритет у DMA перед ядром.

AMBEN[2:0]. Биты разрешения асинхронных банков памяти:

000 - все банки запрещены
001 - разрешен Bank0
010 - разрешены Bank0 и Bank1
011 - разрешены Bank0, Bank1 и Bank2
1xx - разрешены все банки (Bank0, Bank1, Bank2, Bank3)

AMCKEN. 0: запрет выдачи CLKOUT для доступа к регионам внешней асинхронной памяти, 1: разрешить выдачу CLKOUT.

[Онлайн-калькулятор для регистра EBIU_AMGCTL]

CDPRIO = (для доступа к внешним устройствам, по умолчанию 0)
AMBEN[2:0] = (по умолчанию 1)
AMCKEN = (CLKOUT для внешней асинхронной памяти, по умолчанию 0)
EBIU_AMGCTL =

Примечание: в поля регистра EBIU_AMGCTL проставлены значения по умолчанию, которые они получают при включении питания (сбросе процессора).

Контроллер асинхронной памяти EBIU имеет 2 регистра управления банками асинхронной памяти (asynchronous memory bank control registers, EBIU_AMBCTL0 и EBIU_AMBCTL1, см. рис. 18-4 .. 18-7). Они содержат биты счетчиков для настройки, стробирования, времени удержания, биты для определения типа памяти и размера, и биты для конфигурирования использования ARDY. Эти регистры не должны программироваться, когда AMC используется.

Могут быть запрограммированы следующие параметры времени AMC:

• Setup (время на установку): время между началом цикла памяти (~AMS[x]==0) и выставлением разрешения чтения (~ARE==0) или разрешения записи (~AWE==0).
• Read access (доступ на чтение): время между выставлением разрешением чтения (~ARE==0) и снятием разрешения чтения (~ARE==1).
• Write access (доступ на запись): время между выставлением разрешения записи (~AWE==0) и снятием разрешения записи (~AWE==1).
• Hold (удержание): время между снятием сигнала разрешения чтения (~ARE==1) или сигнала записи (~AWE==1) и концом цикла памяти (~AMS[x]==1).

Каждый из этих параметров может быть запрограммирован в единицах тактов EBIU. Вот минимальные значения для этих параметров:

• Setup ≥ 1 цикла
• Read access ≥ 1 цикла
• Write access ≥ 1 цикла
• Hold ≥ 0 циклов

ADSP BF538 EBIU AMBCTL0 bits31 16

Рис. 18-4. Asynchronous Memory Bank Control 0 Register (биты 31..16).

ADSP BF538 EBIU AMBCTL0 bits15 0

Рис. 18-5. Asynchronous Memory Bank Control 0 Register (биты 15..0).

ADSP BF538 EBIU AMBCTL1 bits31 16

Рис. 18-6. Asynchronous Memory Bank Control 1 Register (биты 31..16).

ADSP BF538 EBIU AMBCTL1 bits15 0

Рис. 18-7. Asynchronous Memory Bank Control 1 Register (биты 15..0).

BnWAT[3:0]. Время доступа на запись для банка n (количество циклов, в течение которых ~AWE остается в активном состоянии):

0000 это значение не поддерживается
0001..1111 от 1 до 15 циклов

BnRAT[3:0]. Время доступа на чтение для банка n (количество циклов, в течение которых ~ARE остается в активном состоянии):

0000 это значение не поддерживается
0001..1111 от 1 до 15 циклов

BnHT[1:0]. Время удержания (hold) для банка n (количество циклов между переходом ~AWE или ~ARE в неактивное состояние и переходом ~AOE в неактивное состояние):

00 задержка 0 циклов
01 задержка 1 цикл
10 задержка 2 цикла
11 задержка 3 цикла

BnST[1:0]. Время установки (setup) для банка n (количество циклов после перехода ~AOE в активное состояние и перед переходом ~AWE или ~ARE в активное состояние):

00 задержка 4 цикла
01 задержка 1 цикл
10 задержка 2 цикла
11 задержка 3 цикла

BnTT[1:0]. Время перехода (transition time) для банка n (количество циклов, вставленных после доступа на чтение для этого банка и перед доступом на запись в этот же банк, или доступом на чтение в другой банк):

00 задержка 4 цикла
01 задержка 1 цикл
10 задержка 2 цикла
11 задержка 3 цикла

BnRDYPOL. Полярность сигнала ADRY для банка n. 0: транзакция завершается, если ARDY прочитан как лог. 0, 1: транзакция завершается, если ARDY прочитан как лог. 1.

BnRDYEN. Разрешение работы сигнала ADRY для банка n. 0: игнорировать ARDY для доступа к этому банку, 1: после того, как истечет задержка доступа, использовать состояние входа ARDY для определения возможности завершения транзакции (готова или не готова микросхема памяти).

[Онлайн-калькулятор для регистров EBIU_AMBCTL0 и EBIU_AMBCTL1]

Примечание: в поля регистров EBIU_AMBCTL0 и EBIU_AMBCTL1 проставлены значения по умолчанию, которые они получают при включении питания (сбросе процессора).

Банк 1:  
B1WAT[3:0] = (время доступа на запись для банка, по умолчанию 15)
B1RAT[3:0] = (время доступа на чтение для банка, по умолчанию 15)
B1HT[1:0] = (время удержания [hold] для банка, по умолчанию 3)
B1ST[1:0] = (время установки [setup] для банка, по умолчанию 0)
B1TT[1:0] = (время перехода [transition time] для банка, по умолчанию 0)
B1RDYPOL = (полярность сигнала ADRY для банка, по умолчанию 1)
B1RDYEN = (работа сигнала ADRY для банка, по умолчанию 0)
Банк 0:  
B0WAT[3:0] = (время доступа на запись для банка, по умолчанию 15)
B0RAT[3:0] = (время доступа на чтение для банка, по умолчанию 15)
B0HT[1:0] = (время удержания [hold] для банка, по умолчанию 3)
B0ST[1:0] = (время установки [setup] для банка, по умолчанию 0)
B0TT[1:0] = (время перехода [transition time] для банка, по умолчанию 0)
B0RDYPOL = (полярность сигнала ADRY для банка, по умолчанию 1)
B0RDYEN = (работа сигнала ADRY для банка, по умолчанию 0)
EBIU_AMBCTL0 =
Банк 3:  
B3WAT[3:0] = (время доступа на запись для банка, по умолчанию 15)
B3RAT[3:0] = (время доступа на чтение для банка, по умолчанию 15)
B3HT[1:0] = (время удержания [hold] для банка, по умолчанию 3)
B3ST[1:0] = (время установки [setup] для банка, по умолчанию 0)
B3TT[1:0] = (время перехода [transition time] для банка, по умолчанию 0)
B3RDYPOL = (полярность сигнала ADRY для банка, по умолчанию 1)
B3RDYEN = (работа сигнала ADRY для банка, по умолчанию 0)
Банк 2:  
B2WAT[3:0] = (время доступа на запись для банка, по умолчанию 15)
B2RAT[3:0] = (время доступа на чтение для банка, по умолчанию 15)
B2HT[1:0] = (время удержания [hold] для банка, по умолчанию 3)
B2ST[1:0] = (время установки [setup] для банка, по умолчанию 0)
B2TT[1:0] = (время перехода [transition time] для банка, по умолчанию 0)
B2RDYPOL = (полярность сигнала ADRY для банка, по умолчанию 1)
B2RDYEN = (работа сигнала ADRY для банка, по умолчанию 0)
EBIU_AMBCTL1 =

[Предотвращение конфликтной ситуации при обращении к шине]

Из-за того, что шина с 3 состояниями совместно используется несколькими устройствами в системе, важно избегать конфликтов на шине. Конфликты приведут к дополнительной потери потребляемой мощности, и может привести к отказу устройства. Конфликт может произойти, когда одно устройство освобождает шину, а другое устройство занимает. Если первое устройство слишком медленно переводит свои выходы в третье состояние, и второе слишком быстро включается, то на выходах устройств возникнут сквозные токи.

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

Чтобы избежать конфликта, правильно запрограммируйте время перехода между банками (bank transition time) в регистрах управления банками асинхронной памяти. Это позволит программе настроить количество циклов между этими типами доступа на базе по базе банк-банк. Минимально EBIU предоставляет 1 цикл на переход.

[Управление входом ARDY]

Каждый банк может быть запрограммирован для опроса входа ARDY после того, как таймер доступа чтения или записи досчитает до конца вниз, или для игнорирования этого входного сигнала. В зависимости от того, разрешен или нет ARDY в окне выборки, ARDY может использоваться для расширения времени доступа, как это требуется. Имейте в виду, что ARDY опрашивается синхронно, поэтому:

• Выставление и снятие ARDY для процессора должно удовлетворять даташиту в контексте времен setup и hold. Если не удовлетворяются эти синхронные ограничения, то это может привести к случайно-нестабильному внутреннему поведению. Сигнал CLKOUT процессора должен использоваться для гарантирования синхронных переходов ARDY.
• Вывод ARDY должен быть стабильным (на время выставления или снятия уровня) на внешнем интерфейса на время цикла перед тем, как внутренний счетчик банка достигнет 0; т. е. больше одного цикла CLKOUT перед запланированным нарастанием уровня ~AWE или ~ARE. Это определит, будет ли время доступа расширено, или нет.
• Как только время транзакции было расширено из-за того, что ARDY был опрошен в "занятом" состоянии, транзакция будет завершена на один цикл после того, как ARDY будет затем опрошен в состоянии "готов".

Полярность сигнала ARDY программируется для каждого банка отдельно. Поскольку ARDY не опрашивается, пока выполняется доступ к банку, для которого разрешено выставление ARDY, то по умолчанию ARDY не нуждается в управлении. Дополнительную информацию см. в разделе "Добавление дополнительных циклов ожидания".

[Программируемые параметры времени EBIU]

Соотношения интервалов времени зависит от программирования AMC, является ли инициирование транзакции от ядра или от DMA по памяти (memory DMA, MDMA), и последовательности транзакций (за чтением следует чтение, за чтением следует запись, и так далее).

Асинхронные доступы со стороны ядра. Некоторые доступы к внешней памяти вызываются инструкциями ядра наподобие:

   R0.L = W[P0++]    ; чтение из внешней памяти (P0 указывает на ячейку внешней памяти)

или:

   W[P0++] = R0.L    ; запись во внешнюю память.

Асинхронные чтения. На рис. 18-8 показан цикл шины при асинхронном чтении с запрограммированными параметрами setup = 2 цикла, доступ на чтение = 2 цикла, hold = 1 цикл, transition time = 1 цикл. Циклы асинхронного чтения по шине происходят следующим образом:

1. В начале периода setup сигналы ~AMS[x], шины адреса и ~ABE[1:0] становятся достоверными, и выставляется ~AOE.
2. В момент начала периода доступа на чтение и после 2 тактов setup выставляется ~ARE.
3. В момент начала периода hold, читаемые данные опрашиваются по фронту такта EBIU. Сигнал на выводе ~ARE снимается после этого фронта такта.
4. По окончании периода hold сигнал ~AOE снимается до момента, пока за этим циклом шины не последует другое асинхронное чтение в ту же самую область памяти. Таким образом, ~AMS[x] снимается до следующего цикла обращения в тот же банк памяти.
5. Если внутренне не поставлено в очередь другое чтение в тот же банк, AMC добавляет запрограммированное количество циклов для перехода между областями памяти.

ADSP BF538 Asynchronous Read Bus Cycles

Рис. 18-8. Циклы работы шины при асинхронном чтении.

Доступ на чтение завершается снятием сигналов ~AMSx и ~AOE. Здесь присутствуют несколько циклов ожидания до начала следующей операции чтения. Количество циклов ожидания является функцией от соотношения CCLK/SCLK. Количество циклов ожидания для CCLK/SCLK=3 будет 6, 4 для CCLK/SCLK=5, и 3 для CCLK/SCLK=10.

Асинхронные записи. На рис. 18-9 показан цикл шины при асинхронной записи, за которой следует цикл чтения в том же банке, с запрограммированными параметрами setup = 2 цикла, доступ на запись = 2 цикла, доступ на чтение = 3 цикла, hold = 1 цикл, transition time = 1 цикл. Циклы асинхронной записи по шине происходят следующим образом:

1. В начале периода setup сигналы ~AMS[x], шины адреса, данных, и ~ABE[1:0] становятся достоверными.
2. В момент начала периода доступа на запись выставляется ~AWE.
3. В момент начала периода hold сигнал ~AWE снимается.

Циклы асинхронного чтения по шине происходят следующим образом:

1. В начале периода setup сигналы ~AMS[x], шины адреса и ~ABE[1:0] становятся достоверными, и выставляется ~AOE.
2. В момент начала периода доступа на чтение выставляется ~ARE.
3. В момент начала периода hold читаемые данные опрашиваются по нарастанию фронта сигнала тактов EBIU. Сигнал ~ARE снимается после этого фронта тактов.
4. По окончании периода hold сигнала ~AOE снимается до момента, пока за этим циклом шины не последует другое асинхронное чтение в ту же самую область памяти. Таким образом, ~AMS[x] снимается до следующего цикла обращения в тот же банк памяти.
5. Если внутренне не поставлено в очередь другое чтение в тот же банк, AMC добавляет запрограммированное количество циклов для перехода между областями памяти.

ADSP BF538 Asynchronous Write and Read Bus Cycles

Рис. 18-9. Циклы работы шины при асинхронной записи и асинхронном чтении.

Добавление дополнительных циклов ожидания. Вывод ARDY используется для вставки дополнительных тактов ожидания (wait states). Этот вход опрашивается синхронно с внутренней тактовой частотой EBIU. EBIU начинает опрашивать ARDY на 1 тактовый цикл перед окончанием запрограммированного периода стробирования. Если ARDY опрошен как не выставленный, то период доступа расширяется. Затем вывод ARDY продолжает опрашиваться на каждом последующем тактовом перепаде. Читаемые данные защелкиваются на тактовом перепаде после того, как ARDY был опрошен как выставленный. Разрешение чтения или записи остается выставленным на один такт после того, как ARDY был прочитан как выставленный. Пример этого поведения показан на рис. 18-10, где setup = 2 цикла, время доступа на чтение = 4 цикла, и hold = 1 цикл. Обратите внимание, что период доступа на чтение должен быть запрограммирован как минимум на 2 цикла, чтобы вход ARDY действительно мог работать.

ADSP BF538 Inserting Wait States ARDY

Рис. 18-10. Добавление тактов ожидания с использованием ARDY.

Сигналы разрешения байта. Выводы ~ABE[1:0] оба находятся в лог. 0 при всех асинхронных чтениях и 16-битных асинхронных записях. Когда делается асинхронная запись в старший байт 16-битной памяти, то ~ABE1 = 0 и ~ABE0 = 1. Когда асинхронная запись выполняется в младший байт 16-битной памяти, ~ABE1 = 1 и ~ABE0 = 0.

[Встроенная в кристалл процессора память FLASH]

В кристалл процессоров марок ADSP-BF538F4 и ADSP-BF538F8 встроена память FLASH. Эта память FLASH имеет отдельный сигнал выборки внутри корпуса, и он может быть привязан к любому из 4 асинхронных банков памяти путем подключения вывода ~FCE к соответствующему выводу ~AMSx. Если вывод ~FCE подключен к выводу ~AMS0, то процессор загрузится из этой внутренней памяти FLASH.

[Контроллер SDRAM (SDC)]

Контроллер SDRAM позволяет процессору обмениваться данными с синхронной динамической памятью DRAM (SDRAM) на максимальной частоте, определенной в даташите на процессор ADSP-BF538/ADSP-BF538F. Благодаря SDC процессор поддерживает прозрачный для программы интерфейс с одним внешним банком стандартных микросхем SDRAM объемом от 64 до 512 мегабита, в конфигурациях x4, x8 и x16. При этом максимальная общая емкость памяти SDRAM может быть до 512 мегабайт. Банк SDRAM управляется выходом выборки памяти ~SMS. Интерфейс позволяет настраивать опции интервалов времени, чтобы можно было поддерживать дополнительные буферы между процессором и SDRAM, и этим компенсировать емкостную нагрузку больших объемов памяти.

Состояние всех входов интерфейса считывается по фронту сигнала тактов SDRAM на выводе CLKOUT. Все выходы интерфейса будут достоверными при положительном перепаде сигнала тактов SDRAM на выводе CLKOUT.

Таким образом, EBIU SDC предоставляет прозрачный аппаратный интерфейс к стандартным микросхемам памяти SDRAM. Вот возможности интерфейса SDC:

• Поддерживаются микросхемы SDRAM на 64 мегабита, 128 мегабит, 256 мегабит, 512 мегабит с конфигурациями шины данных x4, x8 и x16.
• Поддерживается общий объем до 512 мегабайт для внешней памяти SDRAM.
• Поддерживаются страницы SDRAM размерами 512 байт, 1 килобайт, 2 килобайта и 4 килобайта.
• В пределах SDRAM поддерживается 4 внутренних банка.
• Используется программируемый счетчик обновления для согласования различных тактовых частот и требуемой частоты обновления SDRAM.
• Предоставляет несколько опций управления интервалами времени для поддержки дополнительных буферов между процессором и микросхемами SDRAM.
• Использует отдельный вывод (SA10), который разрешает SDC делать предзаряд SDRAM перед выдачей команды автообновления (auto-refresh) или самообновления (self-refresh), пока AMC управляет портом EBIU.
• Поддерживает самообновление для стандартных микросхем самообновление отдельного массива для мобильных SDRAM.
• Предоставляет 2 опции для запуска (power-up) SDRAM.
• Предоставляет доступ к банкам SDRAM с использованием чередования.

Для большей ясности следует определить некоторые термины, используемые в описании системы SDRAM.

Команда Bank Activate. Команда активации банка приводит SDRAM к открытию внутреннего банка (указанного по адресу банка) в строке (указанном адресом строки). Когда bank activate command выдается для SDRAM, SDRAM открывает новый адрес строки в специальном банке. Память в открытом внутреннем банке и строка называется открытой страницей. Команда активации банка должна быть выдана перед командой чтения или записи.

Burst Length. Параметр burst length (длина блока) определяет количество слов, которое микросхема SDRAM сохраняет или передает после детектирования одной команды записи или чтения соответственно. Параметр burst length выбирается путем записи определенных бит в регистр режима SDRAM (SDRAM mode register) во время операции запуска SDRAM (power-up sequence).

Хотя SDC поддерживает только режим burst length = 1, во время обмена блоком с SDRAM, контроллер SDC выдает команду чтения или записи каждый цикл, и сохраняет доступ к данным. Таким образом, эффективная burst length намного больше 1. Другими словами, установка burst length = 1 не уменьшает полосу пропускания при обмене с SDRAM.

Команда Burst Stop. Команда остановки блока это один из нескольких способов завершить или прервать операцию блочного чтения или записи.

Поскольку SDRAM burst length всегда жестко задана в 1, то SDC не поддерживает команду burst stop.

Burst Type. Параметр типа передачи блока определяет порядок адресов, в котором SDRAM передает блочные данные после детектирования команды чтения или сохраняет блочные данные после детектирования команды записи. Параметр burst type программируется во время последовательности запуска SDRAM (power-up sequence).

Поскольку SDRAM burst length всегда программируется как 1, то burst type не оказывает влияния. Однако SDC всегда устанавливает burst type на тип только последовательного доступа (sequential-accesses-only) в момент последовательности запуска SDRAM.

CAS Latency (CL). Латентность строба адреса столбца (CAS) это задержка в тактовых циклах между моментом, когда SDRAM детектировала команду чтения, и моментом, когда она предоставила данные на своих выходных выводах. CAS latency программируется в регистре режима SDRAM (SDRAM mode register) во время последовательности запуска (power-up sequence) SDRAM.

Класс скорости микросхем SDRAM и тактовая частота, используемая в системе, определяет значение для параметра CAS latency. SDC может поддерживать CAS latency размером 2 или 3 тактовых цикла. Выбранное значение CAS latency должно быть запрограммировано в общий регистр управления SDRAM (SDRAM memory global control register, EBIU_SDGCTL) перед последовательностью запуска SDRAM. Подробнее см. во врезке описание регистра EBIU_SDGCTL.

CBR (CAS Before RAS) Refresh или Auto-Refresh. Когда SDC истечет счетчик обновления, SDC делает предзаряд всех 4 банков SDRAM и затем выдает для них команду автообновления (auto-refresh command). Это приводит к SDRAM к генерации внутри себя внутреннего цикла обновления данных CBR. Когда внутреннее обновление завершится, все 4 внутренние банка SDRAM получат предзаряд.

Функция маскирования выводами DQM. Выводы SDQM[1:0] предоставляют возможность маскирования байт при 8-битных записях в SDRAM. Выводы DQM используются для блокировки входного буфера SDRAM при операциях частичной записи. Выводы SDQM[1:0] не используются для маскирования данных на циклах частичного чтения. Для циклов записи у масок данных задержка составляет 0 циклов, что позволяет записывать данные, где соответствующий вывод SDQM[x] опрашивается как уровень лог. 0, и блокирует запись, когда SDQM[x] опрашивается как лог. 1 - на байтовой базе (байт-за-байтом).

Internal Bank. Это несколько внутренних банков, расположенных в имеющейся SDRAM. SDC поддерживает обращения к внутренним банкам с чередованием. Адрес банка может считаться частью адреса строки. SDC подразумевает, что все микросхемы SDRAM, которые к нему подключены, имеют 4 внутренних банка, и позволяют иметь для каждого активированного банка иметь уникальный адрес строки.

Mode Register. Регистр режима - микросхемы SDRAM содержат внутренний регистр конфигурации, который позволяет задать стандарт, по которому будет работать устройство SDRAM. После включения питания и перед выполнением чтения или записи области памяти SDRAM, приложение должно переключить SDC на запись в регистр режима SDRAM. Запись в SDRAM mode register переключается записью 1 в бит PSSE общего регистра управления SDRAM (SDRAM memory global control register, EBIU_SDGCTL), и затем выдает передачу чтения или записи для обмена с адресным пространством SDRAM. Первоначальная операция чтения или записи вызывает старт последовательности запуска SDRAM (SDRAM power-up sequence), которая программирует регистр режима SDRAM параметром CAS latency из регистра EBIU_SDGCTL. Первоначальное чтение или запись SDRAM занимают много циклов до своего завершения.

Обратите внимание, что для большинства приложений SDRAM power-up sequence и запись в регистр режима должны быть выполнены только 1 раз. Как только power-up sequence завершилась, бит PSSE не должен устанавливаться снова, за исключением случаев, когда надо поменять регистр режима. В этом случае обратитесь к разделу "Managing SDRAM Refresh During PLL Transitions" в даташите [1].

Микросхемы SDRAM с низким энергопотреблением могут также содержать регистр расширенного режима (extended mode register). EBIU разрешает программирование extended mode register во время включения питания через бит EMREN регистра EBIU_SDGCTL.

Page Size. Размер страницы это объем памяти, у которой одинаковый адрес строки, и к которому может быть получен доступ последовательными командами чтения или записи без необходимости активировать другую строку памяти. Размер страницы может быть вычислен для 16-разрядных банков SDRAM по следующей формуле:

page size = 2(CAW + 1)

Здесь CAW это ширина адреса столбца SDRAM. Единичка добавляется потому, что банк SDRAM имеет ширину 16 (т. е. 1 адрес соответствует 2 байтам).

Команда Pre-Charge. Команда предзаряда закрывает отдельный внутренний банк в активной странице или все внутренние банки на странице.

SDRAM Bank. Банк SDRAM это область памяти, которая может быть сконфигурирована на размер 16 мегабайт, 32 мегабайта, 64 мегабайта, 128 мегабайт, 256 мегабайт или 512 мегабайт, и она может быть выбрана через лог. 0 на выводе ~SMS.

Не путайте термин "SDRAM internal bank" (внутренний банк SDRAM), который относится к внутреннему содержимому SDRAM, и который выбирается по адресу банка, с термином "банк SDRAM" или "external bank" (внешний банк), который относится ко всему массиву памяти SDRAM, который выбирается выводом ~SMS.

Self-Refresh, самообновление. Когда SDRAM работает в режиме самообновления, внутренний таймер микросхем SDRAM инициирует периодические цикли автообновления, без необходимости внешнего входа для управления. SDC должен выдать серию команд, включая команду self-refresh, чтобы перевести SDRAM в этот режим пониженного энергопотребления, и должен выдать другую последовательность команд для выхода из режима self-refresh. Вход в режим self-refresh программируется через общий регистр управления SDRAM (SDRAM memory global control register, EBIU_SDGCTL), и любой доступ к адресному пространству SDRAM приводит SDC к выводу SDRAM из режима self-refresh. Подробнее см. раздел "Вход в режим Self-Refresh (SRFS) и выход из него".

tRAS. Это необходимая задержка между выдачей команды активации банка и выдачей команды pre-charge, и между командой self-refresh и выходом из режима self-refresh. Битовое поле TRAS в общем регистре управления SDRAM (EBIU_SDGCTL) содержит 4 бита, и может быть запрограммировано в значение от 1 до 15 (задержка в тактовых циклах). Подробнее см. раздел "Выбор задержки Selecting the Bank Activate Command Delay (TRAS)".

tRC. Это необходимая задержка между последовательными выдачами команд активации банка в тот же самый внутренний банк SDRAM. Эта задержка не может быть запрограммирована напрямую. Задержка tRC должна быть выдержана соответствующим программированием полей TRAS и TRP, чтобы обеспечить условие tRAS + tRP ≥ tRC.

tRCD. Это необходимая задержка между командой активации банка и началом первой команды чтения или записи. Битовое поле TRCD в общем регистре управления SDRAM (EBIU_SDGCTL) содержит 3 бита, и может быть запрограммировано в значения от 1 до 7 (задержка в тактовых циклах).

tRFC. Это требуемая задержка между выдачей команды auto-refresh и команды активации банка, и между выдачами последовательных команд auto-refresh. Эта задержка не может быть запрограммирована напрямую, и подразумевается, что она равна tRC. Задержка tRC должна быть выдержана соответствующим программированием полей TRAS и TRP, чтобы обеспечить условие tRAS + tRP ≥ tRC.

tRP. Это требуемая задержка между выдачей команды pre-charge и выдачей команд:

• команда активации банка
• команда auto-refresh
• команда self-refresh

Битовое поле TRP в общем регистре управления SDRAM (EBIU_SDGCTL) содержит 3 бита, и может быть запрограммирована в значение от 1 до 7 (задержка в тактовых циклах). Подробнее см. раздел "Выбор задержки Pre-Charge (TRP)".

tRRD. Это требуемая задержка между выдачей команды активации банка A выдачей команды активации банка B. Эта задержка не может быть запрограммирована напрямую и подразумевается, что она равна tRCD + 1.

tWR. Это требуемая задержка между командой записи (которая вызывает запись данных) и командой pre-charge. Битовое поле TWR в общем регистре управления SDRAM (EBIU_SDGCTL) содержит 2 бита, и может быть запрограммировано в значения от 1 до 3 тактовых цикла задержки.

tXSR. Это требуемая задержка между выходом из режима self-refresh и выдачей команды auto-refresh. та задержка не может быть запрограммирована напрямую и подразумевается, что она равна tRC. Задержка tRC должна быть выдержана соответствующим программированием полей TRAS и TRP, чтобы обеспечить условие tRAS + tRP ≥ tRC.

[Поддерживаемые конфигурации SDRAM]

В таблице 18-4 показаны все возможные размеры банка, значения ширины банка и дискретные конфигурации SDRAM, которые можно напрямую подключить к SDC.

Таблица 18-4. Поддерживаемые конфигурации дискретных компонентов SDRAM.

Размер памяти системы, мегабайт Размер системной памяти Микросхемы SDRAM Количество микросхем
8 4M x 16 4M x 4 4
8 4M x 16 4M x 16 1
16 8M x 16 8M x 8 2
16 8M x 16 8M x 16 1
32 16M x 16 16M x 4 4
32 16M x 16 16M x 8 2
32 16M x 16 16M x 16 1
64 64M x 16 32M x 4 4
64 64M x 16 32M x 8 2
64 64M x 16 32M x 16 1
128 128M x 16 64M x 4 4
128 128M x 16 64M x 8 2
128 128M x 16 64M x 16 1

[Примеры блок-диаграмм систем с использованием SDRAM]

На рис. 18-11a и 18-11b показана блок-диаграмма подключения процессора Blackfin к SDRAM. В этом примере интерфейс SDRAM подключен к двум 64 мегабитным (x8 шина данных) микросхемам SDRAM, чтобы сформировать внешний банк памяти размером 16 мегабайт. На обе микросхемы SDRAM параллельно подключены шины адреса и управления.

В SDC имеется отдельный вывод адреса (SA10) для разрешения выполнения команды auto-refresh параллельно с любым асинхронным доступом к памяти. Этот отдельный вывод позволяет SDC выдать команду pre-charge для SDRAM перед выдачей команды auto-refresh.

ADSP BF538 SDRAM 16Mbyte example

Рис. 18-11a. Пример системы с 16 мегабайтами SDRAM на 2 микросхемах.

ADSP BF538 SDRAM MT48LC16M16A2

Рис. 18-11b. Пример системы с 32 мегабайтами SDRAM на 1 микросхеме (MT48LC16M16A2BG-75 в корпусе 54-ball FBGA, процессор ADSP-BF538 в корпусе 316-ball Pb-free CSP_BGA).

ADSP BF532 SDRAM MT48LC16M16A2

Рис. 18-11c. Пример системы с 32 мегабайтами SDRAM на 1 микросхеме (MT48LC16M16A2TG-75 в корпусе 54 выводов TSOP, ADSP-BF532 в корпусе 176 выводов LQFP).

//Код инициализации ADSP-BF532 (подходит и для ADSP-BF538) SDRAM
// (микросхема MT48LC16M16A2BG-75, шина 16 бит, размер 32 мегабайта)
// частота шины SCLK=32.768 МГц.
#include < cdefBF532.h >
 
void InitSDRAM (void)
{
/////////////////////////////////////////////
// SDRAM Refresh Rate Control Register:
   *pEBIU_SDRRC = 252;
   ssync();
/////////////////////////////////////////////
// SDRAM Memory Bank Control Register:
   *pEBIU_SDBCTL = EBCAW_9 |  // EBCAW = 01 (9 бит ширина адреса столбца)
                   EBSZ_32 |  // EBSZ  = 01 (32 мегабайта размер внешнего банка)
                   EBE;       // EBE   = 1  (разрешен внешний банк SDRAM)
   ssync();
/////////////////////////////////////////////
// SDRAM Memory Global Control Register:
   *pEBIU_SDGCTL = //FBBRW |  визуально не видно влияние этого бита на скорость
                   //Разрешение запуска SDRAM power-up sequence после первого доступа к SDRAM:
                   PSS     |
                   //SDRAM tWR:
                   TWR_1   |
                   //SDRAM tRCD:
                   TRCD_1  |
                   //SDRAM tRP:
                   TRP_1   |
                   //SDRAM tRAS:
                   TRAS_1  |
                   //Обновляются все банки:
                   PASR_ALL|
                   //SDRAM CAS latency:
                   CL_2    |
                   //Разрешить выдачу CLKOUT, SRAS, SCAS, SWE, SDQM[1:0]:
                   SCTLE;
   ssync();
}

Проект [2] VisualDSP++ 5.0 для инициализации SDRAM (микросхема MT48LC16M16A2BG-75, шина 16 бит, размер 32 мегабайта) подходит для ADSP-BF532 и ADSP-BF538 (компилировать надо для процессора ADSP-BF532).

Дополнительно вывод SA10 позволяет SDC войти в режим self-refresh и выйти из него параллельно с любым асинхронным доступом к памяти. Вывод SA10 (вместо вывода ADDR[11]) должен быть напрямую подключен к выводу A10 микросхемы SDRAM. Во время команды pre-charge вывод SA10 используется, чтобы показать, что pre-charge все еще должно быть выполнено. Во время команды активации банка выводит внутренний бит адреса строки, который должен быть мультиплексирован на вход A10 SDRAM. Во время команд чтения и записи SA10 используется для запрета функции auto-pre-charge микросхем SDRAM.

Системы SDRAM не используют вывод ADDR[11].

Общий регистр управления SDRAM (SDRAM memory global control register, EBIU_SDGCTL) содержит в себе все программируемые параметры, связанные с конфигурацией и физическими параметрами времени доступа к SDRAM. На рис. 18-12 показаны биты регистра EBIU_SDGCTL (серым цветом помечены не используемые биты).

ADSP BF538 EBIU SDGCTL

Рис. 18-12. SDRAM Memory Global Control Register (EBIU_SDGCTL).

Обратите внимание, что все зарезервированные биты регистра EBIU_SDGCTL (показаны на рисунке серым цветом) должны всегда записываться нулями.

CDDBG. Запрет управления при предоставлении шины внешнему мастеру. Бит CDDBG используется для разрешения или запрещения управляющих сигналов SDRAM, когда внешний интерфейс памяти предоставлен внешнему контроллеру. Если этот бит установлен в 1, то управляющие сигналы переходят в третье состояние, когда активно предоставление доступа к внешней шине другому контроллеру. Иначе эти сигналы продолжат управляться во время предоставления доступа. Если бит установлен, и к внешней шине предоставлен доступ, то считается, что все внутренние банки SDRAM изменяются внешним контроллером. Это означает, что на каждом банке требуется pre-charge перед использованием, после того, как заново установлен контроль над внешней шиной. Это влияет на сигналы ~SRAS, ~SCAS, ~SWE, ~SMS, SA10, SCKE и CLKOUT.

TCSR. Определяет термокомпенсированное значение для самообновления в регистре расширенного режима (extended mode register) SDRAM. 0: 45°C, 1:85°C.

EMREN. 0: запрет программирования регистра расширенного режима, 1: разрешение. Бит EMREN разрешает программирование регистра расширенного режима при запуске SDRAM. Регистр расширенного режима используется для управления энергопотреблением SDRAM для мобильных приложений (микросхемы памяти с пониженным энергопотреблением). Если разрешен бит EMREN, то биты TCSR и PASR[1:0] управляют значением, записанным в регистр расширенного режима. Биты PASR определяют, сколько внутренних банков SDRAM будут обновлены во время self-refresh. Бит TCSR сигнализирует для SDRAM наихудший диапазон температур для системы, и в зависимости от этого как часто нужно обновлять внутренние банки SDRAM во время self-refresh.

FBBRW. Быстрый переход между режимами чтения и записи, 0: запрещено, 1: разрешено. Бит FBBRW разрешает чтение SDRAM, за которым следует запись, в последовательных циклах. Во многих системах это невозможно, потому что время выключения выводов данных SDRAM слишком велико, что приведет к конфликту на шине с операцией записи процессора. Когда этот бит равен 0, вставляется тактовый цикл между доступом на чтение, за которым немедленно следует доступ на запись.

EBUFE. 0: запрещает дополнительную задержку сигналов адреса и управления при использовании внешнего буфера, 1: разрешает. Бит EBUFE используется для разрешения или запрета управления интервалами времени внешнего буфера. В ситуациях, где используются буферизованные модули SDRAM или дискретные регистры-буферы для управления управляющими входами SDRAM, EBUFE должен быть установлен в 1. Использование этой установки добавляет цикл буферизации данных для доступов на чтение и запись. См. "Установка опции тайминга буферизации SDRAM (EBUFE)" для дополнительной информации по поводу бита EBUFE.

SRFS. 0: запрет самообновления SDRAM, 1: разрешение. Когда бит SRFS установлен в 1, срабатывает режим self-refresh. Как только SDC завершит активную передачу, SDC выполнит последовательность команд для перевода SDRAM в режим self-refresh. Следующий доступ к разрешенному банку SDRAM заставит SDC выполнить команды для выхода SDRAM из режима self-refresh и осуществить доступ. См. раздел "Вход в режим Self-Refresh (SRFS) и выход из него" для получения дополнительной информации по биту SRFS.

PSSE. Разрешение запуска SDRAM power-up sequence. 0: не оказывает никакого эффекта, 1: разрешает power-up sequence при следующем обращении к SDRAM.

PSM. Определяет, как будет работать SDRAM power-up sequence. 0: операции Pre-charge, 8 циклов CBR refresh, установка регистра режима (mode register SDRAM). 1: операции Pre-charge, установка регистра режима (mode register SDRAM), 8 циклов CBR.

Биты PSM и PSSE работают совместно, чтобы указать и вызвать срабатывание последовательности включения SDRAM (power-up sequence, инициализация). Если PSM установлен в 1, то SDC выполняет команду pre-charge, за которой выдает команду загрузки регистра режима, и затем выполняет 8 циклов auto-refresh. Если бит PSM очищен, то SDC выполняет команду, за которой следует 8 циклов auto-refresh, и затем идет команда загрузки регистра режима. Должны произойти 2 события перед тем, как SDC выполнит SDRAM power-up sequence:

• Бит PSSE должен быть установлен в 1 чтобы разрешить SDRAM power-up sequence.
• Доступ на чтение или запись должен быть выполнен для разрешенного адресного пространства, чтобы предоставить внешнюю шину для SDC, так чтобы могла пройти SDRAM power-up sequence.

Произойдет SDRAM power-up sequence, за которой немедленно следует передача чтения или записи, которая использовалась для срабатывания SDRAM power-up sequence. Имейте в виду, что задержка для первой операции доступа к SDRAM довольно большая из-за того, что SDRAM power-up sequence занимает множество тактов для завершения.

Перед выполнением SDC power-up sequence убедитесь, что SDRAM получает стабильное питание правильно тактируется некоторый промежуток времени, как это указано в даташите на SDRAM.

PUPSD. Определяет задержку запуска power-up. 0: нет задержки перед первой командой Pre-charge, 1: добавится 15 тактов задержки перед первой командой Pre-charge. Бит задержки запуска power-up (PUPSD) опционально задерживает power-up start sequence на 15 тактов SCLK. Это полезно для многопроцессорных систем, которые используют общую внешнюю память SDRAM. Если шина была ранее предоставлена другому процессору перед тем, как были выполнены power-up и использован режим self-refresh, когда происходит переключение владения шиной, то бит PUPSD может использоваться для гарантирования достаточного периода неактивности от self-refresh до первой команды pre-charge в последовательности power-up, чтобы удовлетворить времени выхода из self-refresh (tXSR) микросхем SDRAM.

TWR[1:0]. Задает время SDRAM tWR в тактовых циклах, определяет выбор задержки предзаряда для записи (Write to Pre-Charge Delay, TWR). Значение tWR определяет требуемую задержку (в тактах) между моментом времени, когда SDC выдает команду записи (которая запускает запись данных) и командой pre-charge. Этот параметр позволяет приложению удовлетворять требования по необходимым интервалам времени со стороны микросхем SDRAM.

Биты TWR в регистре EBIU_SDGCTL выбирают значение tWR, можно выбрать от 1 до 3 тактовых циклов. Например: TWR = 00 зарезервировано, TWR = 01 задержка 1 тактовый цикл, TWR = 10 задержка 2 тактовых цикла, TWR = 11 задержка 3 тактовых цикла.

TRCD[2:1]. Старшие биты поля, которое задает время SDRAM tRCD в тактовых циклах. 

TRCD. Младший бит поля, которое задает время SDRAM tRCD в тактовых циклах.

Биты TRCD[2:0] определяют выбор задержки между стробами строки и столбца (RAS to CAS Delay, TRCD). Значение tRCD (задержка между RAS и CAS) определяет задержку для первой команды чтения или записи после команды активации строки, указанной в тактовых циклах. Параметр tRCD позволяет процессору адаптироваться под требования интервалов времени микросхем SDRAM системы.

Биты tRCD в регистре EBIU_SDGCTL позволяют выбрать значение tRCD, может быть выбрано любое значение от 1 до 7. Например: TRCD = 000 зарезервировано (не дает эффекта), TRCD = 001 задержка 1 тактовый цикл, TRCD = 010 задержка 2 тактовых цикла, TRCD = 111 задержка 7 тактовых циклов.

TRP[2:0]. Задает время SDRAM tRP в тактовых циклах, определяет выбор задержки предзаряда (Pre-Charge Delay, TRP). Значение tRP (pre-charge delay) определяет требуемую задержку (в тактах) между моментом времени, когда SDC выдает команду pre-charge и моментом времени, когда он выдает команду активации банка. Время tRP также указывает необходимое время между pre-charge и auto-refresh, и между pre-charge и self-refresh. Значения tRP и tRAS определяют значения tRFC, tRC и tXSR. Эти параметры позволяют приложению удовлетворять требования по необходимым интервалам времени со стороны микросхем SDRAM.

Биты TRP в регистре EBIU_SDGCTL выбирают значение tRP, можно выбрать любое значение между 1 и 7 тактовыми циклами. Например: TRP = 000 не дает никакого эффекта, TRP = 001 задержка 1 тактовый цикл, TRP = 010 задержка 2 тактовых цикла, TRP = 111 задержка 7 тактовых циклов.

TRAS[3:0]. Задает время SDRAM tRAS в тактовых циклах, определяет выбор задержки команды активации банка (Bank Activate Command Delay, TRAS). Значение tRAS (bank activate command delay) определяет требуемую задержку (в количестве тактовых циклов) между моментом времени, когда SDC выдает команду активации банка и временем, когда он выдает команду pre-charge. SDRAM должна также оставаться в режиме self-refresh как минимум на период времени, заданном для tRAS. Значения tRP и tRAS определяют значения tRFC, tRC и tXSR. Параметр tRAS позволяет процессору адаптироваться под требования интервалов времени микросхем SDRAM системы.

Биты TRAS в регистре EBIU_SDGCTL позволяют выбрать значение tRAS, может быть выбрано любое значение от 1 до 15 тактовых циклов. Например: TRAS = 0000 не дает никакого эффекта, TRAS = 0001 задержка в 1 тактовый цикл, TRAS = 0010 задержка в 2 тактовых цикла, TRAS = 1111 задержка в 15 тактовых циклов.

Для получения информации по установке этого значения обратитесь к даташиту на используемые микросхемы SDRAM.

PASR[1:0]. Данные для регистра расширенного режима (extended mode register), определяющие частичное восстановление массива (partial array self-refresh).

00 обновляются все 4 банка.
01 обновляются банки 0, 1.
10 будет обновлен только внутренний банк 0.
11 зарезервировано.

CL[1:0]. Задержка строба CAS в тактах. 00 и 01 зарезервированные значения, 10: 2 цикла тактов, 11: 3 цикла тактов.

Параметры CAS latency (биты CL), время SDRAM tRAS (биты TRAS), время SDRAM tRP (биты TRP), время SDRAM tRCD (биты TRCD) и время SDRAM tWR timing (биты TWR) должны быть запрограммированы на основе выбранной тактовой системной частоты SCLK и параметры используемых микросхем SDRAM.

Пользователь должен гарантировать выполнение условия tRAS + tRP ≥ max(tRC,tRFC,tXSR).

SCTLE. 1: разрешает выдачу сигналов CLKOUT, SRAS, SCAS, SWE, SDQM[1:0], 0: запрещает.

Бит SCTLE используется для разрешения или запрещения SDC. Если SCTLE==0, то любой доступ к адресному пространству SDRAM будет генерировать ошибку внутренней шины, и не будет осуществляться доступ к внешним микросхемам памяти. Дополнительную информацию см. в разделе "Детектирование ошибок". Когда SCTLE==0, все выводы управления SDC переходят в свое неактивное состояние, и тактирование SDRAM не происходит. Бит SCTLE должен быть записан в лог. 1 для того, чтобы разрешить работу SDC и по умолчанию после сброса работа SDC разрешена (SCTLE==1).

Установка SDRAM Clock Enable (SCTLE). Бит SCTLE позволяет программе запретить все управляющие выводы SDRAM, т. е. выводы SDQM[3:0], ~SCAS, ~SRAS, ~SWE, SCKE и CLKOUT. SCTLE = 0 запретит все управляющие выводы SDRAM (управляющие выводы не работают, CLKOUT в лог. 0). SCTLE = 1 разрешает все управляющие выводы SDRAM (CLKOUT переключается).

Обратите внимание, что функционал CLKOUT также используется и AMC. Даже если SCTLE запрещен, выход CLKOUT может быть разрешен независимо через бит AMCKEN регистра EBIU_AMGCTL блока AMC.

Если система не использует SDRAM, SCTLE должен быть установлен в 0.

Если произошел доступ к адресному пространству SDRAM, когда SCTLE==0, то доступ генерирует ошибку внутренней шины и не произойдет доступ к внешним микросхемам SDRAM. Для дополнительной информации см. раздел "Детектирование ошибок". При аккуратном программном управлении бит SCTLE может использоваться совместно с режимом self-refresh для дополнительного снижения энергопотребления. Однако SCTLE должен оставаться разрешенным во всех случаях, когда SDC должен генерировать для SDRAM команды auto-refresh.

Вход в режим Self-Refresh (SRFS) и выход из него. SDC поддерживает режим self-refresh для SDRAM. В режиме self-refresh SDRAM выполняет операции обновления сама, внутри себя, без внешнего управления со стороны контроллера. Это уменьшает энергопотребление со стороны SDRAM.

Бит SRFS в регистре EBIU_SDGCTL разрешает запуск режима self-refresh: SRFS = 0 запрещает режим self-refresh, SRFS = 1 разрешает режим self-refresh.

Когда SRFS установлен в 1, то как только SDC входит в состояние ожидания, он выдает команду pre-charge, если это необходимо, и затем выдает команду self-refresh. Если находится в ожидании внутренний доступ, то SDC откладывает выдачу команды self-refresh, пока не завершится запрос на доступ к SDRAM и любой последующий ожидающий запрос доступа. Подробнее см. раздел "Команды SDC".

Как только устройство SDRAM вошло в режим self-refresh, контроллер SDRAM выставляет бит SDSRA в управляющем регистре состояния SDRAM (SDRAM control status register, EBIU_SDSTAT).

Устройство SDRAM выходит из режима self-refresh только когда SDC получает запрос доступа от ядра или от DMA. В соединении с битом SRFS может быть 2 возможности для выхода из режима self-refresh:

• Если бит SRFS установлен перед запросом, то SDC выходит из режима self-refresh и остается в режиме auto-refresh.
• Если бит SRFS очищен перед запросом, то SDC выходит из режима self-refresh только для одного запроса, и возвращается обратно в режим self-refresh, пока не поступит новый запрос на доступ.

Обратите внимание, что как только бит SRFS установлен в 1, SDC входит в режим self-refresh всякий раз, когда завершены ожидающие запросы, и нет способа отменить такие входы в режим self-refresh.

Установка опции тайминга буферизации SDRAM (EBUFE). Чтобы удовлетворять требованиям интервалов времени всех систем, для тех систем, в которых множество микросхем SDRAM подключено параллельно к шинам управления, данных и адреса, может потребоваться буферизация между процессором и этими микросхемами SDRAM. Буферизация обычно состоит из регистра и драйвера.

Чтобы удовлетворить таким требованиям ко времени сигналов и позволить промежуточную регистрацию, SDC поддерживает конвейеризацию адреса SDRAM и управляющих сигналов.

Бит EBUFE в регистре EBIU_SDGCTL управляет включением этого режима: EBUFE = 0 запрещает задержку для внешней буферизации, EBUFE = 1 разрешает.

Когда EBUFE = 1, контроллер SDRAM задерживает данные при доступе на запись на 1 цикл, что разрешает внешним буферным регистрам защелкнуть адрес и сигналы управления. При доступе на чтение контроллер SDRAM делает выборку данных на 1 цикл позже, чтобы учесть 1-цикловую задержку, добавляемую внешними буферными регистрами. Когда разрешена функция внешней буферизации, задержка для всех доступов увеличивается на 1 цикл.

Выбор значения задержки строба столбца (CAS Latency, CL). Значение CAS latency определяет задержку в количестве тактовых циклов между моментом времени, когда SDRAM детектирует команду чтения и моментом, когда данные предоставляются на выходных выводах.

CAS latency не влияет на циклы записи.

Биты CL в общем регистре управления SDRAM (SDRAM memory global control register, EBIU_SDGCTL), выбирает значение CAS latency:

CL = 00 или 01 зарезервировано
CL = 10 задержка 2 такта
CL = 11 задержка 3 такта

В основном частота шины определяет значение задержки CAS. Для информации по установке этого значения проконсультируйтесь с документацией на микросхему SDRAM.

[Онлайн-калькулятор EBIU_SDGCTL]

Примечание: по умолчанию вставлены значения для SCLK=32.768 МГЦ, 32-мегабайтная микросхема памяти MT48LC16M16A2 (шина данных 16 бит, 4 банка по 8 мегабайт) [4].

CDDBG = (по умолчанию 1)
TCSR = (по умолчанию 1)
EMREN = (программирование EMR, по умолчанию 0)
FBBRW = (быстрый переход WR-RD, по умолчанию 0)
EBUFE = (задержка внешнего буфера, по умолчанию 0)
SRFS = (самообновление SDRAM, по умолчанию 0)
PSSE = (power-up sequence, по умолчанию 0)
PSM = (работа SDRAM power-up sequence, по умолчанию 0)
PUPSD = (задержка power-up, по умолчанию 0)
TWR[1:0] = (Write to Pre-Charge Delay, по умолчанию 1)
TRCD[2:0] = (tRCD, по умолчанию 0, хотя это запрещено)
TRP[2:0] = (tRP, по умолчанию 1)
TRAS[3:0] = (tRAS, по умолчанию 1)
PASR[1:0] = (partial array self-refresh, по умолчанию 0)
CL[1:0] = (задержка CAS, по умолчанию 2)
SCTLE = (выходные сигналы, по умолчанию 1)
EBIU_SDGCTL =

Регистр управления банком памяти SDRAM (SDRAM memory bank control register, EBIU_SDBCTL), показанный на рис. 18-13, содержит в себе программируемые параметры, относящие к внешнему банку. Это позволяет программе приложения управлять некоторыми параметрами работы с SDRAM. Внешний банк может быть сконфигурирован для разного размера SDRAM. Это использует параметры, заданные в общем регистре управления SDRAM (SDRAM memory global control register, EBIU_SDGCTL). Регистр EBIU_SDBCTL должен быть запрограммирован перед процедурой power-up и должен быть изменен только когда SDC находится в состоянии ожидания.

ADSP BF538 EBIU SDBCTL

Рис. 18-13. SDRAM Memory Bank Control Register (EBIU_SDBCTL).

EBCAW[1:0]. Ширина адреса столбца внешнего банка SDRAM.

00 адрес из 8 бит
01 адрес из 9 бит
10 адрес из 10 бит
11 адрес из 11 бит

EBSZ[1:0]. Размер внешнего банка SDRAM.

00 - 16 мегабайт
01 - 32 мегабайт
10 - 64 мегабайт
11 - 128 мегабайт

EBE. Разрешение внешнего банка SDRAM. 0: запрещено, 1: разрешено.

Регистр EBIU_SDBCTL хранит конфигурационную информацию, описывающую интерфейс банка SDRAM. EBIU поддерживает микросхемы SDRAM размерами 64 мегабита, 128 мегабит, 256 мегабит и 512 мегабит с организацией шин данных x4, x8, x16. В таблице 18-4 показана привязка плотности SDRAM и ширины I/O для поддерживаемых EBSZ кодировок. Подробнее по декодированию начального адреса банка см. раздел "Размер внешней памяти SDRAM".

SDC определяет размер внутренней страницы SDRAM из параметров EBCAW. Поддерживаются размеры страниц 512 байт, 1 килобайт, 2 килобайта и 4 килобайта. Таблица 18-5 показывает размер страницы и разбиение внутреннего адреса (IA[31:0], который виден со стороны ядра или DMA) в адрес строки, банка, столбца и байта. Адрес столбца и адрес байта вместе дают адрес внутри страницы.

Бит EBE в регистре EBIU_SDBCTL используется для разрешения или запрета внешнего банка SDRAM. Если SDRAM запрещена, то любой доступ к адресному пространству SDRAM приведет к генерации ошибки внутренней шины, и при этом не произойдет доступ к внешней памяти. Подробнее см. раздел "Детектирование ошибок".

Table 18-5. Привязка внутреннего адреса.

Размер банка, мегабайт (биты EBSZ)
Ширина адреса столбца (биты EBCAW)
Размер страницы, кбайт
Адрес банка
Адрес строки Страница
Адрес столбца Адрес байта
128
11 4 IA[26:25] IA[24:12] IA[11:1] IA[0]
10 2 IA[24:11] IA[10:1] IA[0]
9 1 IA[24:10] IA[9:1] IA[0]
8 0.5 IA[24:9] IA[8:1] IA[0]
64
11 4 IA[25:24] IA[23:12] IA[11:1] IA[0]
10 2 IA[23:11] IA[10:1] IA[0]
9 1 IA[23:10] IA[9:1] IA[0]
8 0.5 IA[23:9] IA[8:1] IA[0]
32
11 4 IA[24:23] IA[22:12] IA[11:1] IA[0]
10 2 IA[22:11] IA[10:1] IA[0]
9 1 IA[22:10] IA[9:1] IA[0]
8 0.5 IA[22:9] IA[8:1] IA[0]
16
11 4 IA[23:22] IA[21:12] IA[11:1] IA[0]
10 2 IA[21:11] IA[10:1] IA[0]
9 1 IA[21:10] IA[9:1] IA[0]
8 0.5 IA[21:9] IA[8:1] IA[0]

Как подключить микросхемы SDRAM, которые меньше 16 мегабайт по объему памяти, см. раздел "Using SDRAMs Smaller Than 16M Byte" даташита [1].

[Онлайн-калькулятор EBIU_SDBCTL]

Примечание: по умолчанию вставлены значения для SCLK=32.768 МГЦ, 32-мегабайтная микросхема памяти MT48LC16M16A2 (шина данных 16 бит, 4 банка по 8 мегабайт) [4].

EBCAW[1:0] =  
EBSZ[1:0] =  
EBE = (внешнего банка SDRAM)  
EBIU_SDBCTL =  

Регистр состояния управления SDRAM (SDRAM control status register, EBIU_SDSTAT), показанный на рис. 18-14, предоставляет информацию о состоянии SDC. Эта информация может использоваться, чтобы определить безопасный момент для изменения управляющих параметров, или как средство для отладки. Бит SDEASE в этом регистре является sticky-битом. Как только этот бит установился, для его очистки программа должна явно записать в него единицу. Запись не окажет эффекта на другие биты состояния, которые обновляются только блоком SDC. Этот SDC MMR имеет размер 16 бит.

ADSP BF538 EBIU SDSTAT

Рис. 18-14. SDRAM Control Status Register (EBIU_SDSTAT).

BGSTAT. Показывает состояние предоставления шины внешнему мастеру. 0: шина не предоставлена, 1: предоставлена.

SDEASE. Sticky-бит, тип очистки W1C. Показывает статус ошибки EAB. 0: ошибка не была обнаружена, 1: доступ к EAB сгенерировал ошибку.

SDRS. 0: при следующем доступе не произойдет power-up (SDRAM уже в состоянии power-up), 1: при следующем доступе к SDRAM произойдет для неё power-up, если SDRAM разрешена.

SDPUA. Показывает активность power-up sequence. 0: SDC не в состоянии последовательности power-up, 1: SDC находится в состоянии power-up sequence.

SDSRA. Показывает, активен или нет режим самообновления. 0: SDRAM не в режиме self-refresh, 1: SDRAM в режиме самообновления, при этом она меньше потребляет энергии.

SDCI. Показывает, находится или нет SDC в режиме ожидания (idle). 0: SDC занят процедурой доступа или auto-refresh, 1: SDC в состоянии ожидания.

Регистр управления частотой обновления SDRAM (SDRAM refresh rate control register, EBIU_SDRRC), показанный на рис. 18-15, предоставляет гибкий механизм для указания параметров времени auto-refresh. Поскольку значение тактовой частоты, предоставляемой для SDRAM, может меняться, то SDC предоставляет программируемый счетчик обновления, у которого период счета зависит от значения, запрограммированного в поле RDIV этого регистра. Счетчик согласует предоставленную тактовую частоту с требуемой частотой обновления SDRAM.

Требуемая задержка (в количестве тактов SDRAM) между следующими друг за другом периодами таймаута счетчика должна быть записана в поле RDIV. Срабатывание таймаута счетчика вызывает выдачу команды auto-refresh для всех внешних микросхем SDRAM. Запишите значение RDIV в регистр EBIU_SDRRC перед срабатыванием SDRAM power-up sequence. Меняйте это значение только когда SDC находится в режиме ожидания.

ADSP BF538 EBIU SDRRC

Рис. 18-15. SDRAM Refresh Rate Control Register (EBIU_SDRRC).

Чтобы вычислить значение, которое должно быть записано в регистр EBIU_SDRRC, используйте следующее выражение:

RDIV = ((fSCLK x tREF) / NRA) – (tRAS + tRP)

Здесь:

fSCLK тактовая частота SDRAM (равна системной тактовой частоте процессора SCLK), Гц.
tREF период обновления SDRAM в секундах.
NRA количество адресов строки в SDRAM (определяет количество циклов обновления, необходимое для обновления всего объема SDRAM).
tRAS время между активным состоянием и состоянием pre-charge (значение поля TRAS в общем регистре управления SDRAM), в тактах.
tRP время от RAS до pre-charge (значение поля TRP в общем регистре управления SDRAM), в тактах.

Это выражение вычисляет количество тактовых циклов между требуемыми обновлениями, и вычитает требуемую задержку между командами активации банка для того же самого внутреннего банка (tRC = tRAS + tRP). Значение tRC вычтено, так что даже для случая, когда таймаут восстановления произойдет в момент активного цикла SDRAM, требование по частоте обновления SDRAM будет гарантировано удовлетворено. Результат выражения всегда должно быть округлено вниз до ближайшего целого значения. Ниже приведен пример вычисления RDIV для типичной системы SDRAM с тактовой частотой 133 МГц:

fSCLK = 133 MHz
tREF = 64 ms
NRA = 4096 адресов строки
tRAS = 2
tRP = 2

Вычисление по этим параметрам значения RDIV:

RDIV = ( (133 x 106 x 64 x 10-3)/4096) – (2 + 2) = 2074 тактовых цикла

Это означает, что поле RDIV, которое следует записать в регистр EBIU_SDRRC, будет равно 2074 (0x81A hex).

Обратите внимание, что RDIV должно быть запрограммировано в ненулевое значение, если разрешен контроллер SDRAM. Когда RDIV = 0, функционирование контроллера SDRAM не поддерживается, и может привести к нежелательному поведению системы. Для RDIV допустимы значения в диапазоне 0x001 .. 0xFFF.

Для информации по процедуре изменения частоты PLL при использовании SDRAM см. раздел "Managing SDRAM Refresh During PLL Transitions" даташита [1].

[Онлайн-калькулятор EBIU_SDRRC]

Примечание: по умолчанию вставлены значения для SCLK=32.768 МГЦ, 32-мегабайтная микросхема памяти MT48LC16M16A2 (шина данных 16 бит, 4 банка по 8 мегабайт) [4].

Частота SCLK:   fSCLK = МГц
Период обновления SDRAM: tREF = мс
Количество строк SDRAM: NRA = (определяется количеством бит адреса строки)
Задержка после команды активации строки SDRAM: tRAS =
Время между RAS и precharge: tRP =
  EBIU_SDRRC =

[Размер внешней памяти SDRAM]

Общее количество внешней адресуемой процессором памяти SDRAM управляется битами EBSZ регистра EBIU_SDBCTL (см. таблицу 18-6). Обращения вне этого диапазона, указанного специальным значением EBSZ, приведет к ошибке внутренней шины, и никакого доступа к внешней памяти не произойдет. Подробнее см. раздел "Детектирование ошибок".

Таблица 18-6. Как кодируются размеры внешнего банка.

EBSZ Размер банка Диапазон допустимых адресов для обращения к SDRAM
00 16 мегабайт 0x00000000 – 0x00FFFFFF
01 32 мегабайта 0x00000000 – 0x01FFFFFF
10 64 мегабайта 0x00000000 – 0x03FFFFFF
11 128 мегабайт 0x00000000 – 0x07FFFFFF

[Привязка SDRAM к адресному пространству]

Чтобы осуществить доступ к SDRAM, блок SDC мультиплексирует внутренний 32-битный, не мультиплексированный адрес в адрес строки, адрес столбца, адрес банка и маски байта данных, в виде сигналов подаваемые на микросхемы SDRAM, см. рис. 18-16. Самый младший бит адреса привязан к маскам байта данных, следующие по старшинству биты привязаны к адресу столбца, следующие биты привязаны к адресу строки, и последние 2 бита привязаны к адресу банка. Привязка базируется на параметрах EBSZ и EBCAW, запрограммированных в регистр управления банком SDRAM.

ADSP BF538 SDRAM address mux

Рис. 18-16. Схема мультиплексированной адресации SDRAM.

Мультиплексирование 16-битного адреса SDRAM. Таблица 18-7 показывает соединение выводов адреса процессора с выводами микросхемы памяти SDRAM.

Таблица 18-7. Соединения адресов SDRAM для 16-битных банков.

Внешний вывод адреса Вывод адреса SDRAM
ADDR[19] BA[1]
ADDR[18] BA[0]
ADDR[16] A[15]
ADDR[15] A[14]
ADDR[14] A[13]
ADDR[13] A[12]
ADDR[12] A[11]
SA[10] A[10]
ADDR[10] A[9]
ADDR[9] A[8]
ADDR[8] A[7]
ADDR[7] A[6]
ADDR[6] A[5]
ADDR[5] A[4]
ADDR[4] A[3]
ADDR[3] A[2]
ADDR[2] A[1]
ADDR[1] A[0]

[Кодирование маски данных Data Mask (SDQM[1:0])]

При пересылках записи в SDRAM выводы SDQM[1:0] используются для маскирования записи в байты, к которым не нужен доступ. Таблица 18-8 показывает кодирование SDQM[1:0] для 16-битного SDRAM на базе внутреннего адреса пересылки IA[0] и размера пересылки.

Во время передач чтения из банков SDRAM чтение всегда выполняется для всех байт в банке, независимо от размера передачи. Это означает, что для 16-битных банков SDRAM на сигналах SDQM[1:0] всегда нули.

Таким образом, выводы SDQM[1:0] могут быть в лог. 1 только тогда, когда байты маскируются при передачах записи в SDRAM. Во всех других случаях SDQM[1:0] удерживаются в состоянии лог. 0.

Таблица 18-8. Кодирование SDQM[1:0] при записях.

Внутренний адрес IA[0]
Внутренний размер передачи
1 байт 2 байта 4 байта
0 SDQM[1] = 1
SDQM[0] = 0
SDQM[1] = 0
SDQM[0] = 0
SDQM[1] = 0
SDQM[0] = 0
1 SDQM[1] = 0
SDQM[0] = 1
   

[Как работает SDC]

SDC использует длину пакета (burst length) = 1 для операций чтения и записи. Каждый раз, когда происходит промах мимо страницы, SDC выполняет команду pre-charge, за которой следует команда активации банка перед выполнением команды чтения или записи. Если есть попадание на страницу, то команда чтения или записи может быть выдана немедленно без необходимости выдачи команды pre-charge.

Для команд чтения SDRAM имеется задержка от начала команды чтения до появления данных от SDRAM, которая равна задержке столбца (CAS latency). Эта задержка всегда присутствует для любой одиночной передачи чтения. У последующих чтений нет такой задержки.

Как уже упоминалось, имеется программируемый счетчик обновления. Он может быть запрограммирован для генерации фоновых циклов auto-refresh, как это требуется по параметрам микросхем SDRAM с учетом используемой тактовой частоты. Период таймаута счетчика обновления задается полем RDIV в регистре управления частотой обновления SDRAM.

Чтобы позволить выполняться командам auto-refresh параллельно с любым доступом AMC, предоставлен отдельный вывод A10 (SA10). Все внутренние банки SDRAM предзаряжаются перед выдачей команды auto-refresh.

Внутренний 32-битный, не мультиплицированный адрес мультиплицируется на адрес строки, адрес столбца, адрес выбора банка и маски данных. Бит 0 для 16-битных SDRAM используется для генерации сигналов маскирования данных. Следующие по старшинству биты привязаны к адресу столбца, далее к адресу строки, и последние 2 бита привязаны к адресу внутреннего банка. Эта привязка базируется на настройке значений EBCAW и EBSZ в регистре управления банка SDRAM.

Конфигурация SDC. После аппаратного или программного сброса процессора разрешается тактирование SDC; однако SDC должен быть сконфигурирован и инициализирован. Перед программированием SDC и выполнением последовательности power-up для SDRAM удостоверьтесь, что такты для SDRAM разрешены после стабилизации уровней напряжения питания в течение определенного времени (как это указано в даташите на используемую SDRAM). Чтобы настроить SDC и запустить SDRAM power-up sequence для микросхем SDRAM, должны быть записаны регистры EBIU_SDRRC, EBIU_SDBCTL и EBIU_SDGCTL, и должна быть осуществлена операция передачи данных с адресным пространством SDRAM. Может быть проверен бит SDRS в регистре состояния управления SDRAM, чтобы определить текущее состояние SDC. Если этот бит установлен, то SDRAM power-up sequence не была инициирована.

Поле RDIV регистра EBIU_SDRRC должно быть записано нужным значением, чтобы определить требуемую скорость обновления SDRAM.

Регистр EBIU_SDBCTL должен быть записан для определения размеров и конфигурации используемой памяти SDRAM (поля EBSZ и EBCAW) и для разрешения внешнего банка (EBE). Обратите внимание, что пока не произойдет SDRAM power-up sequence, любой доступ к адресному пространству SDRAM, независимо от состояния бита EBE, будет генерировать ошибку внутренней шины, и не будет осуществлен доступ к внешней памяти. Для дополнительной информации см. раздел "Детектирование ошибок". После завершения SDRAM power-up sequence, если внешний банк запрещен, любая передача приведет к прерыванию по аппаратной ошибке, и обмен с SDRAM не произойдет.

Регистр EBIU_SDGCTL записывается для:

• Настройки опций количества циклов тайминга SDRAM (CL, TRAS, TRP, TRCD, TWR, EBUFE).
• Разрешения тактирования SDRAM (SCTLE).
• Выбора и разрешения запуска SDRAM power-up sequence (PSM, PSSE).

Имейте в виду, что если SCTLE запрещен, то любой доступ к адресному пространству SDRAM приведет к генерации ошибки внутренней шины, и не будет осуществлен доступ к внешней памяти. Для дополнительной информации см. раздел "Детектирование ошибок".

Как только бит PSSE в регистре EBIU_SDGCTL установлен в 1, и произошел обмен с разрешенным адресным пространством SDRAM, SDC инициирует последовательность SDRAM power-up sequence. Точная последовательность определена битом PSM регистра EBIU_SDGCTL. Передача, используемая для срабатывания SDRAM power-up sequence, может быть либо операцией чтения, либо записи. Эта передача произойдет после завершения SDRAM power-up sequence, и эта первоначальная передача займет много циклов, поскольку в этот момент будет выполняться процедура SDRAM power-up sequence.

Команды SDC. Описанные ниже команды автоматически инициируются на интерфейсе SDRAM при каждой операции чтения или записи памяти.

• Pre-charge all: выполнение предзаряда на всех банках.
• Single pre-charge: выполнение предзаряда на одном банке.
• Bank activate: активирует страницу в требуемом внутреннем банке SDRAM.
• Load mode register: инициализирует рабочие параметры SDRAM во время power-up sequence.
• Load extended mode register: инициализирует мобильные рабочие параметры SDRAM во время power-up sequence.
• Read/write: чтение/запись.
• Auto-refresh: приводит к выполнению SDRAM обновления CAS перед RAS.
• Self-refresh: переводит SDRAM в режим самообновления, в котором SDRAM уменьшает энергопотребление, производя операции восстановления внутри себя.
• NOP/command inhibit: нет операции, пустая команда.

В таблице 18-9 показано состояние выводов SDRAM во время команд SDC.

Таблица 18-9. Состояние выводов во время выполнения команд SDC.

Команда ~SMS ~SCAS ~SRAS ~SWE SCKE SA10
Pre-charge All 0 1 0 0 1 1
Single Pre-charge 0 1 0 0 1 0
Bank Activate 0 1 0 1 1  
Load Mode Register 0 0 0 0 1  
Load Extended Mode Register 0 0 0 0 1 0
Read 0 0 1 1 1 0
Write 0 0 1 0 1 0
Auto-Refresh 0 0 0 1 1  
Self-Refresh 0 0 0 1 0  
NOP 0 1 1 1 1  
Command Inhibit 1 1 1 1 1  

Команды предзаряда. Команда pre-charge выдается для предзаряда всех внутренних банков в одно и то же время перед выполнением auto-refresh. Для ситуаций доступа по адресу с промахом мимо страницы при чтении или записи с определенным внутренним банком SDRAM, блок SDC использует команду single pre-charge для этого банка.

Команда Bank Activate. Команда активации банка требуется, если следующий доступ к данных относится к другой странице. Для активации страницы в нужном внутреннем банке SDRAM блок SDC выполняет команду pre-charge, за которой следует команда bank activate.

SDC поддерживает чередование банков (открытие до 4 внутренних банков SDRAM за один раз). Это дает эффективный размер 4 страниц. Привязка адреса показывает начальный адрес каждого внутреннего банка.

Чередование банков осуществляется переключением между 4 внутренними банками SDRAM без каких-то приостановок между страницами.

Команда загрузки регистра режима (Load Mode Register). Команда load mode register инициализирует рабочие параметры SDRAM. Эта команда входит в операцию SDRAM power-up sequence. Команда загрузки регистра режима использует шину адреса SDRAM как вход данных. Операция power-up sequence инициируется записью 1 в бит PSSE регистра EBIU_SDGCTL, и затем записью или чтением любого разрешенного адреса в пределах адресного пространства SDRAM - после этого срабатывает power-up sequence. Точный порядок выполнения power-up sequence определяется битом PSM регистра EBIU_SDGCTL.

Команда load mode register инициирует следующие параметры:

• Burst length = 1, биты 2–0 всегда в равны 0.
• Wrap type = sequential, бит 3 всегда 0.
• Ltmode = latency mode (CAS latency), биты 6–4 программируются через регистр EBIU_SDGCTL.
• Биты 14–7 всегда равны 0.

При выполнении команды load mode register все не используемые выводы адреса устанавливаются в 0. В течение 2 тактовых циклов, следующих после команды load mode register, блок SDC выдает только команды NOP.

Для микросхем SDRAM с низким энергопотреблением, предназначенных для мобильных приложений, имеется extended mode register (регистр расширенного режима), этот регистр программируется во время during power-up sequence, если установлен бит EMREN в регистре EBIU_SDGCTL.

Регистр расширенного режима инициируется следующими параметрами:

• Partial array self-refresh (самообновление части массива), биты 2–0, бит 2 всегда равен 0, биты 1–0 программируются через регистр EBIU_SDGCTL.
• Компенсированное по температуре самообновление, биты 4–3, бит 3 всегда равен 1, бит 4 программируется через регистр EBIU_SDGCTL.
• Биты 12–5, всегда равны 0, и бит 13 всегда равен 1.

Команда Read/Write. Команда чтения/записи выполняется в следующем доступе чтения/записи на представленной активной странице. Во время команды чтения SDRAM защелкивает адрес столбца. Задержка между командами активации и чтения определяется параметром tRCD. Данные доступны на выходе SDRAM после обусловленной задержки CAS latency.

В команде записи SDRAM защелкивает адрес столбца. Записываемые данные достоверны в том же цикле. Задержка между командами активации и записи определяется параметром tRCD.

SDC не использует функцию auto-pre-charge микросхем SDRAM, которая разрешается выставлением SA10 в лог. 1 при выполнении команды чтения или записи.

Команда Auto-Refresh. SDRAM инкрементирует внутри себя счетчик обновления адреса, и приводит к внутреннему обновлению CAS перед RAS (CBR) для адреса, на котором была выдана команда auto-refresh. SDC генерирует команду auto-refresh после истечения таймаута счетчика обновления. Значение поля RDIV в регистре управления скоростью обновления SDRAM должно быть установлено для всех обновляемых адресов в пределах периода tREF, указанного в даташите на используемые микросхемы SDRAM. Эта команда выдается для внешнего банка независимо от того, разрешен он или нет (EBE в общем регистре управления SDRAM). Перед выполнением команды auto-refresh блок SDC выполняет команду pre-charge all для внешнего банка. Следующая команда активации не выдается, пока не будет удовлетворено условие tRFC даташита (tRFC = tRAS + tRP).

Команды автообновления также выдаются блоком SDC как часть power-up sequence и также после выхода из режима self-refresh.

Команда Self-Refresh. Команда самовосстановления переводит выполнение операции обновления внутри SDRAM, без какого-нибудь внешнего управления. Это означает, что SDC не генерирует циклы auto-refresh, пока SDRAM находится в режиме self-refresh. Перед выполнением команды self-refresh все внутренние банки предзаряжены. Режим self-refresh разрешается записью 1 в бит SRFS в общем управляющем регистре SDRAM (EBIU_SDGCTL). После выдачи команды self-refresh блок SDC переводит SCKE в лог. 0. Это переводит SDRAM в режим пониженного энергопотребления (power down mode, SCKE = 0, ~SRAS/~SMS/~SCAS/~SWE = 1). Перед выходом из режима self-refresh mode блок SDC выставляет SCKE. SDRAM остается в режиме self-refresh как минимум на время tRAS и пока не произойдет внутренний доступ к области SDRAM. Когда произойдет внутренний доступ, это приведет к выводу блоком SDC памяти SDRAM из режима self-refresh, SDC ожидает удовлетворения спецификации tXSR (tXSR = tRAS + tRP) и затем выдает команду auto-refresh. После команды auto-refresh блок SDC ждет удовлетворения времени спецификации tRFC (tRFC = tRAS + tRP) перед выполнением команды активирования для передачи, которая привела к выходу SDRAM из режима self-refresh. Таким образом, задержка от момента, когда передача принята блоком SDC в режиме self-refresh, до появления команды активирования для этой передачи, составит 2 x (tRAS + tRP).

Обратите внимание, что CLKOUT не запрещается SDC в режиме self-refresh. Однако программа может запретить такты путем очистки бита SCTLE в регистре EBIU_SDGCTL. Программа приложения должна гарантировать, что удовлетворены требования даташита микросхем SDRAM к тактированию до того, как осуществится обмен с адресным пространством SDRAM, который привел SDC к выходу из режима self-refresh. Если обмен произошел с SDRAM в момент, когда бит SCTLE очищен, будет сгенерирована ошибка внутренней шины, и доступ к внешней шине не будет осуществлен, оставляя SDRAM в режиме self-refresh. Для дополнительной информации см. раздел "Детектирование ошибок".

Команды No Operation/Command Inhibit. Команда no operation (NOP) к SDRAM не окажет никакого эффекта на операции, выполняющиеся в настоящий момент. Команда inhibit работает так же, как и команда NOP; однако, SDRAM не будет выбрана. Когда SDC активно осуществляет доступ к SDRAM, но нуждается во вставке дополнительных команд без какого-то эффекта, выдается команда NOP. Когда SDC не осуществляет доступ к SDRAM, выдается команда inhibit.

[Требования к интервалам времени SDRAM]

Чтобы обеспечить требуемые ключевые параметры по скорости работы и последовательности power-up для разных вендоров SDRAM, блок SDC предоставляет возможность программирования для tRAS, tRP, tRCD, tWR и режима power-up sequence (подробнее см. описание регистра EBIU_SDGCTL). CAS latency должно быть запрограммирована в регистре EBIU_SDGCTL на базе используемой тактовой частоты (требования по этому параметру см. в даташите вендора на используемые микросхемы SDRAM).

Для других параметров SDC подразумевает:

• Время цикла банка: tRC = tRAS + tRP
• Время цикла обновления: tRFC = tRAS + tRP
• Время выхода из self-refresh: tXSR = tRAS + tRP
• Время между загрузкой регистра режима и активацией: tMRD или tRSC = 3 тактовых цикла
• Штраф времени при промахе мимо страницы = tRP + tRCD
• Время активации от строки (на банке A) до строки (на банке B): tRRD = tRCD + 1

Быстродействие SDRAM. Таблица 7-3 перечисляет скорости передачи данных для доступов на чтение/запись ядра или DMA для 16-разрядной SDRAM. Для этого примера предполагается, что все циклы это циклы SCLK, и используются следующие частота SCLK и параметры SDRAM:

• Частота SCLK = 133 МГц
• CAS latency = 2 цикла (CL = 2)
• Нет буферизации SDRAM (EBUFE = 0)
• RAS pre-charge (tRP) = 2 цикла (TRP = 2)
• Задержка RAS - CAS (tRCD) = 2 цикла (TRCD = 2)
• Время активной команды (tRAS) = 5 циклов (TRAS = 5)

Когда используется время с учетом внешнего буфера (EBUFE = 1 в общем регистре управления SDRAM) и/или CAS latency равно 3 (CL = 11 в общем регистре управления SDRAM), все доступы получат дополнительный один тактовый цикл.

[Запрос шины и предоставление шины]

Процессор может оставить управление шиной данных и адреса для внешнего устройства. Шина процессора с тремя состояниями позволяет внешнему контроллеру получить доступ к микросхемам внешней асинхронной или синхронной памяти.

Когда для внешнего устройства требуется доступ к шине, оно выставляет сигнал запрос шины (~BR). Сигнал ~BR проходит арбитраж с запросами EAB. Если нет внутренних ожидающих запросов, то внешний запрос шины будет предоставлен. Процессор инициирует предоставление шины следующим образом:

• Переводит шины данных и адреса в третье состояние и сигналы управления асинхронной памятью. Сигналы управления синхронной памятью могут быть опционально переведены в третье состояние.
• Выдает сигнал предоставления шины (~BG).

Процессор может остановить выполнение программы, если шина предоставлена для внешнего устройства, и обнаружена инструкция выборки данных или запрос на чтение/запись данных в области внешней памяти. Когда внешнее устройство освободит ~BR, процессор снимет сигнал BG и продолжит выполнять программу с того места, где она была остановлена.

Процессор выставляет сигнал на выводе ~BGH, когда он готов начать другой доступ к шине со стороны внешнего порта, но удерживает это выключенным, потому что шина была предоставлена ранее.

Когда шина была предоставлена, устанавливается бит BGSTAT в регистре SDSTAT. Этот бит может использоваться процессором для проверки состояния шины, чтобы избежать начала транзакции, которая будет отложена в течение времени предоставления шины.

[Словарик]

AMC asynchronous memory controller, контроллер асинхронной памяти.

CCLK core clock, частота работы ядра процессора. Обычно она выше частоты системной шины SCLK.

EAB external access bus, шина внешнего доступа.

EBC external bus controller, контроллер внешней шины.

EBIU external bus interface unit, блок интерфейса внешней шины.

MMR Memory-Mapped Register, внутренний регистр процессора (обычно для настройки, управления или получения состояния какого-то периферийного устройства), отображенный на адресное пространство процессора.

PLL Phase-Locked Loop, дословно "петля захвата фазы", русский термин фазовая автоподстройка частоты, или ФАПЧ. Технология, применяемая для синтеза тактовых частот путем умножения и деления опорной частоты.

SCLK system clock, системная тактовая частота. Тактовая частота, от которой тактируются все периферийные устройства процессора, в том числе и контроллеры внешней шины. Обычно SCLK меньше частоты ядра CCLK.

SDRAM Synchronous dynamic random access memory, синхронная динамическая оперативная память с произвольным доступом.

SDC SDRAM controller, контроллер синхронной памяти SDRAM.

sticky-бит дословно переводится как "липкий бит". Флаг состояния, который сам по себе не сбрасывается, и требует для этого неких действий процессора.

W1C write-1-clear, особенность бита регистра, когда для его очистки нужно записать в него лог. 1. Запись лог. 0 не оказывает никакого влияния на состояние бита.

[Ссылки]

1. ADSP-BF538/ADSP-BF538F Blackfin® Processor Hardware Reference site:analog.com.
2. 151011InitSDRAM.zip - проект VisualDSP для кода инициализации SDRAM.
3. Модуль интерфейса внешней шины процессоров Blackfin.
4. SDR SDRAM MT48LC16M16A2.
5. ADSP-BF538: динамическое управление питанием.