СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2011-1

ПРОГРАММИРОВАНИЕ емой ячейкой в рассматриваемой памяти является 16 битное слово. На языке Verilog это выглядит следую щим образом: assign ddr_dcd_ba[1:0] = ddr_dcd_vj_cmd_in[24:23]; assign ddr_dcd_r[12:0] = ddr_dcd_vj_cmd_in[22:10]; assign ddr_dcd_c[8:0] = ddr_dcd_vj_cmd_in[9:1]; Все остальные функции контролле ра реализованы вфайле ddr_cntr.v , при чём конечные автоматы инициализа ции и основного рабочего цикла выне сены в отдельные файлы ddr_init_fsm.v и ddr_fsm.v . Блок PLL является мегафункцией па кета Quartus и формирует частоты, не обходимые для работы; ddr_pll_in включает в себя два сигнала частотой 100 МГц, сдвинутых по фазе на 180 ° друг относительно друга. Тактовая частота платы DR START 3C25N рав на 50 МГц, поэтому коэффициент умножения блока PLL для сигналов ddr_pll_in равен 2. Обе частоты пода ются непосредственно на вход памя ти; частота ddr_pll_in[0] является ос новной тактовой частотой блока ddr_cntr.v . Сигнал ddr_pll_90 имеет частоту 100 МГц, сдвинут по фазе на 90 ° относительно ddr_pll_in[0] и ис пользуется для записи/чтения данных в блоке ddr_cntr.v ; ddr_test_clk –этосиг нал частотой 200 МГц с нулевым фазо вымсдвигомотносительно ddr_pll_in[0] , он является тактовой частотой тес тового блока. Функция последнего – запись значений регистров контрол лера в определённые моменты вре мени. Тестовый блок используется только во время отладки работы кон троллера. Рассмотрим подробнее работу бло ков контроллера. И НИЦИАЛИЗАЦИЯ После подачи питания блок началь ной задержки начинает отсчёт време ни, необходимого памяти до начала инициализации (200 мкс): if (ddr_start_count !== 16'h4E20) // Start delay counter begin ddr_start_count <= ddr_start_count + 1'b1; start_delay_done <= 1'b0; ddr_cke <= 1'b0; end Число 16'h4E20 определяет период времени 200 мкс при частоте 100 МГц, в течение которого тактовая частота в памяти отключена, т.е. сигнал ddr_cke равен нулю. По истечении времени за держки включается основной счётчик: ddr_count <= ddr_count + 1'b1; Функцией основного счётчика явля ется отсчёт временимежду цикламире генерации (tREFI). Этот параметр для рассматриваемойпамятиравен 7,8мкс, что в периодах основного счёчика бу дет равняться шестнадцатеричному числу 30Сh. Одновременно с запуском основно го счётчика начинается процесс ини циализации памяти, управляемый ко нечным автоматомМура ddr_init_fsm.v , в котором выходной сигнал зависит только от текущего состояния автома та. Стиль программирования – с двумя блоками always ; текущее состояние кодируется по схеме с одной едини цей ( onehot ). Стиль кодирования one hot требует построения регистров больших размеров, однако обеспе чивает более высокое быстродейст вие. Более подробно различные стили программирования конечных автома тов описаны в [4, 5]. Первый блок always содержит набор защёлок (latches) и определяет правила перехода автомата из одного состоя ния в другое, а также выходной сигнал при каждом состоянии конечного автомата. При схеме кодирования one hot используется инвертированный оператор условия case , т.е. он задаётся как заведомо верный – case (1'b1) , и за тем перебираются все биты текущего состояния автомата. Только один из битов имеет единичное значение. Вто рой блок always содержит набор триг геров и непосредственно осуществля ет переход автомата из одного состоя ния в другое: fsm_init_state <= fsm_init_next_state; Для того чтобы автомат в начальный момент времени был в известном состоянии, в блоке триггеров исполь зована конструкция: if (!fsm_init_start) begin fsm_init_state <= 6'b000000; fsm_init_state[NOP_I] <= 1'b1; end а в блоке защёлок: fsm_init_next_state = 6'b000000; fsm_init_out = NOP_CMD_I; fsm_init_done = 1'b0; Заметим, что в блоке защёлок при меняются блокирующие операторы присваивания (=), а в блоке триггеров – неблокирующие (<=). Входным сигналом, определяющим моменты перехода конечного авто мата инициализации, является время, т.е. значения основного счётчика (ddr_count) . Граф состояний автомата изображён на рисунке 2. В начальный момент времени процесса инициали зации автомат устанавливается в со стояние NOP_I , при этом памяти по сылается команда NOP (no operations). Затем через промежуток времени T_PRE1 автомат переходит в состоя ние PRE_I на время одного такта и посылает памяти команду PREA (precharge all banks) – зарядить ячейки всех четырёх банков. После чего авто мат снова переходит в состояние NOP_I . Следующий шаг – состояние EMRS_I с выходной командой EMRS (extended mode register set, установка дополни тельного конфигурационного регист ра). Значение регистра выставляется на адресные линии а12 – а0. Только два младших бита являются значимыми, остальные устанавливаются в нулевые значения. Бит а1 – мощность управля ющего сигнала (drive strength) – тоже устанавливается в нулевое значение, что соответствует нормальной мощ ности. Бит а0 – включение/выключе ние модуля автоподстройки задержки ( DLL – delay locked loop ) – равен нулю (включено). Через ещё один цикл NOP_I конеч ный автомат переходит в состоя ние MRS_I , в котором командой MRS (mode register set) устанавливается 61 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2011 NOP_I T = T_RDY T = T_PRE1 II T_PRE2 T – значение регистра ddr_count [7:0] T = T_AR1 II T_AR2 T = T_EMRS T = T_MRS EMRS_I PRE_I RDY_I MRS_I AR_I Рис. 2. Граф конечного автомата инициализации памяти © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy