Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2011 №6

Разработка VHDL-описаний цифровых устройств, проектируемых на основе ПЛИС фирмы Xilinx, с использованием шаблонов САПР ISE Design Suite. Часть 17

Зотов Валерий


В семнадцатой части статьи представлена информация о шаблонах VHDL-описаний элементов, выполненных на основе экземпляров библиотечных примитивов, которые предназначены для непосредственной реализации на базе соответствующих аппаратных ресурсов кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT [22–32]. Образцы описаний указанных элементов сосредоточены в разделе Spartan-6 каталога Device Primitive Instantiation шаблонов языка VHDL. Структура этого раздела включает в себя те же подразделы, что и каталог Spartan-3, рассмотренный ранее (рис. 51, КиТ № 8`2010, стр. 101). Содержание большинства шаблонов раздела Spartan-6 совпадает с текстом одноименных шаблонов, рассмотренных ранее при изучении образцов VHDL-описаний компонентов, содержащихся в папках Spartan-3, Spartan-3A и Spartan-3A DSP. Поэтому далее приводятся сведения только о тех шаблонах, которые отсутствуют в этих папках.

48-it Multi-Functional Arithmetic Block (DSP48A1) представляет собой образец VHDL-описания элементов, конфигурируемых на основе аппаратных секций цифровой обработки сигналов DSP48A1 [22, 31], которые входят в состав архитектуры кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Эти секции ЦОС являются результатом дальнейшего усовершенствования аппаратных блоков DSP48A, применяемых в ПЛИС семейства Spartan-3A DSP, шаблоны описаний которых были рассмотрены в предыдущей части статьи. Модифицированные аппаратные секции цифровой обработки сигналов DSP48A1 обладают более широкими функциональными возможностями по сравнению с базовым вариантом DSP48A. В частности, архитектура и взаимное расположение усовершенствованных секций ЦОС DSP48A1 предоставляют возможность их каскадного соединения практически без использования основных трассировочных ресурсов кристаллов программируемой логики серии Spartan-6. Тем самым создаются предпосылки для повышения производительности разрабатываемых многозвенных устройств цифровой обработки сигналов.

Детальная структурная схема аппаратной секции ЦОС DSP48А1, применяемой в ПЛИС семейств Spartan-6 LX и Spartan-6 LXT, изображена на рис. 214. Основные элементы структуры этой секции: предварительный 18-разрядный сумматор, умножитель двух 18-разрядных операндов, основной 48-разрядный сумматор/аккумулятор и совокупность буферных регистров, предназначенных для организации конвейерной обработки данных. Кроме того, в структуре модернизированного варианта аппаратной секции цифровой обработки сигналов предусмотрена дополнительная выходная шина данных, на которую поступает результат выполнения операции умножения. Эта шина предназначена для подключения к стандартным логическим ресурсам ПЛИС. В аппаратных модулях ЦОС DSP48А1 также усовершенствована логика формирования сигнала выходного переноса. В структуре указанных секций присутствует еще один выход сигнала переноса, который используется для подключения к стандартным логическим ресурсам кристаллов серии Spartan-6.

Структурная схема аппаратной секции ЦОС DSP48А1

Рис. 214. Структурная схема аппаратной секции ЦОС DSP48А1

Для подготовки описаний компонентов, реализуемых на базе аппаратных модулей цифровой обработки сигналов в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, предусмотрен библиотечный примитив DSP48A1. Текст шаблона, основанного на использовании этого библиотечного примитива, выглядит следующим образом:

-- DSP48A1 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (DSP48A1_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- DSP48A1: 48-bit Multi-Functional Arithmetic Block
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
DSP48A1_inst : DSP48A1
generic map (
A0REG => 0, -- First stage A input pipeline register (0/1)
A1REG => 1, -- Second stage A input pipeline register (0/1)
B0REG => 0, -- First stage B input pipeline register (0/1)
B1REG => 1, -- Second stage B input pipeline register (0/1)
CARRYINREG => 1, -- CARRYIN input pipeline register (0/1)
CARRYINSEL => “OPMODE5”, -- Specify carry-in source, “CARRYIN” or “OPMODE5”
CARRYOUTREG => 1, -- CARRYOUT output pipeline register (0/1)
CREG => 1, -- C input pipeline register (0/1)
DREG => 1, -- D pre-adder input pipeline register (0/1)
MREG => 1, -- M pipeline register (0/1)
OPMODEREG => 1, -- Enable=1/disable=0 OPMODE input pipeline registers
PREG => 1, -- P output pipeline register (0/1)
RSTTYPE => “SYNC” -- Specify reset type, “SYNC” or “ASYNC”
)
port map (
-- Cascade Ports: 18-bit (each) output Ports to cascade from one DSP48 to another
BCOUT => BCOUT, -- 18-bit output B port cascade output
PCOUT => PCOUT, -- 48-bit output P cascade output (if used, connect to PCIN of another DSP48A1)
-- Data Ports: 1-bit (each) output Data input and output ports
CARRYOUT => CARRYOUT, -- 1-bit output carry output (if used, connect to CARRYIN pin of another DSP48A1)
CARRYOUTF => CARRYOUTF, -- 1-bit output fabric carry output
M => M, -- 36-bit output fabric multiplier data output
P => P, -- 48-bit output data output
-- Cascade Ports: 48-bit (each) input Ports to cascade from one DSP48 to another
PCIN => PCIN, -- 48-bit input P cascade input (if used, connect to PCOUT of another DSP48A1)
-- Control Input Ports: 1-bit (each) input Clocking and operation mode
CLK => CLK, -- 1-bit input clock input
OPMODE => OPMODE, -- 8-bit input operation mode input
-- Data Ports: 18-bit (each) input Data input and output ports
A => A, -- 18-bit input A data input
B => B, -- 18-bit input B data input (connected to fabric or BCOUT of adjacent DSP48A1)
C => C, -- 48-bit input C data input
CARRYIN => CARRYIN, -- 1-bit input carry input signal (if used, connect to CARRYOUT pin of another DSP48A1)
D => D, -- 18-bit input B pre-adder data input
-- Reset/Clock Enable Input Ports: 1-bit (each) input Reset and enable input ports
CEA => CEA, -- 1-bit input active high clock enable input for A registers
CEB => CEB, -- 1-bit input active high clock enable input for B registers
CEC => CEC, -- 1-bit input active high clock enable input for C registers
CECARRYIN => CECARRYIN, -- 1-bit input active high clock enable input for CARRYIN registers
CED => CED, -- 1-bit input active high clock enable input for D registers
CEM => CEM, -- 1-bit input active high clock enable input for multiplier registers
CEOPMODE => CEOPMODE, -- 1-bit input active high clock enable input for OPMODE registers
CEP => CEP, -- 1-bit input active high clock enable input for P registers
RSTA => RSTA, -- 1-bit input reset input for A pipeline registers
RSTB => RSTB, -- 1-bit input reset input for B pipeline registers
RSTC => RSTC, -- 1-bit input reset input for C pipeline registers
RSTCARRYIN => RSTCARRYIN, -- 1-bit input reset input for CARRYIN pipeline registers
RSTD => RSTD, -- 1-bit input reset input for D pipeline registers
RSTM => RSTM, -- 1-bit input reset input for M pipeline registers
RSTOPMODE => RSTOPMODE, -- 1-bit input reset input for OPMODE pipeline registers
RSTP => RSTP -- 1-bit input reset input for P pipeline registers
);
-- End of DSP48A1_inst instantiation

В библиотечном примитиве DSP48A1 используется совокупность параметров настройки, назначение которых было рассмотрено при изучении шаблона DSP Block (DSP48A). В дополнение к представленным параметрам настройки в шаблоне 48-it Multi-Functional Arithmetic Block (DSP48A1) применяется также параметр CARRYOUTREG, значение которого разрешает или запрещает применение буферного регистра в цепи сигнала выходного переноса.

Система условных обозначений, используемых в описании интерфейса библиотечного примитива DSP48A1, кроме идентификаторов, используемых в шаблоне DSP Block (DSP48A), включает в себя следующие наименования выходных портов:

  • CARRYOUTF — дополнительный выход сигнала переноса, предназначенный для подключения к стандартным логическим ресурсам ПЛИС серии Spartan-6;
  • M — 36-разрядная выходная шина данных аппаратного умножителя, входящего в состав секции цифровой обработки сигналов DSP48A1.

На рис. 215 показан условный графический образ элементов, описания которых создаются с помощью шаблона 48-it Multi-Functional Arithmetic Block (DSP48A1) для последующей реализации на основе аппаратных секций ЦОС DSP48А1 в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

Условный графический образ элементов, формируемых на основе секций ЦОС DSP48A1

Рис. 215. Условный графический образ элементов, формируемых на основе секций ЦОС DSP48A1

BASE Phase Locked Loop (PLL_BASE) является образцом VHDL-описания автономного варианта конфигурирования модуля фазовой автоподстройки частоты Phase-Locked-Loop (PLL) в ПЛИС серии Spartan-6. Каждый блок управления синхронизацией Clock Management Tile (CMT) кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT включает в себя два цифровых модуля Digital Clock Manager (DCM) и модуль фазовой автоподстройки частоты PLL [22, 26]. Модули фазовой автоподстройки частоты PLL могут осуществлять функции синтеза выходных сигналов с различными значениями частоты, а также повышения стабильности выходных сигналов блоков управления синхронизацией CMT. Эти модули поддерживают широкий диапазон частот входных сигналов, который составляет от 19 до 500 МГц. При этом генератор, управляемый напряжением (Voltage-Controlled Oscillator, VCO), который является основным элементом модулей фазовой автоподстройки частоты, позволяет формировать выходные сигналы со значениями частот, достигающими 1 ГГц.

Функциональная схема модуля фазовой автоподстройки частоты PLL, представленного в составе блока управления синхронизацией CMT ПЛИС серии Spartan-6, изображена на рис. 216. Основные элементы этой схемы: программируемый счетчик/делитель (Counter/Divider, D), фазо-частотный детектор (Phase-Frequency Detector, PFD), генератор, управляемый напряжением VCO, который формирует 8 сигналов с различными значениями фазы (0°, 45°, 90°, 135°, 180°, 225°, 270° и 315°), интегрирующий источник тока (Charge Pump, CP), петлевой фильтр (Loop Filter, LF) и счетчик в цепи обратной связи (Multiply, M). Все сигналы, вырабатываемые генератором VCO, поступают на соответствующие выходные счетчики/делители (Оutput Counter0 – Оutput Counter5, О0–О5), коэффициент деления каждого из которых программируется в соответствии с требованиями проектируемого устройства.

Функциональная схема модуля фазовой автоподстройки частоты PLL

Рис. 216. Функциональная схема модуля фазовой автоподстройки частоты PLL

Модули DCM и PLL можно использовать для формирования необходимой совокупности тактовых сигналов как независимо друг от друга, так и в виде каскадных соединений DCM–PLL или PLL–DCM. Для автономного варианта конфигурирования модуля фазовой автоподстройки частоты PLL предусмотрен библиотечный примитив PLL_BASE. Этот примитив поддерживает только базовые функции модуля PLL, которые реализуются без применения цифровых модулей DCM. На основе использования библиотечного примитива PLL_BASE выполнен шаблон BASE Phase Locked Loop (PLL_BASE), который включает в себя соответствующий оператор создания экземпляра этого компонента:

-- PLL_BASE : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (PLL_BASE_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- PLL_BASE: Phase Locked Loop (PLL) Clock Management Component
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
PLL_BASE_inst : PLL_BASE
generic map (
BANDWIDTH => “OPTIMIZED”, -- “HIGH”, “LOW” or “OPTIMIZED”
CLKFBOUT_MULT => 1, -- Multiply value for all CLKOUT clock outputs (1-64)
CLKFBOUT_PHASE => 0.0, -- Phase offset in degrees of the clock feedback output -- (0.0-360.0).
CLKIN_PERIOD => “0”, -- Input clock period in ns to ps resolution (i.e. 33.333 is 30 -- MHz).
-- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for CLKOUT# clock output (1-128)
CLKOUT0_DIVIDE => 1,
CLKOUT1_DIVIDE => 1,
CLKOUT2_DIVIDE => 1,
CLKOUT3_DIVIDE => 1,
CLKOUT4_DIVIDE => 1,
CLKOUT5_DIVIDE => 1,
-- CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for CLKOUT# clock output (0.01-0.99).
CLKOUT0_DUTY_CYCLE => 0.5,
CLKOUT1_DUTY_CYCLE => 0.5,
CLKOUT2_DUTY_CYCLE => 0.5,
CLKOUT3_DUTY_CYCLE => 0.5,
CLKOUT4_DUTY_CYCLE => 0.5,
CLKOUT5_DUTY_CYCLE => 0.5,
-- CLKOUT0_PHASE - CLKOUT5_PHASE: Output phase relationship for CLKOUT# clock output (-360.0-360.0).
CLKOUT0_PHASE => 0.0,
CLKOUT1_PHASE => 0.0,
CLKOUT2_PHASE => 0.0,
CLKOUT3_PHASE => 0.0,
CLKOUT4_PHASE => 0.0,
CLKOUT5_PHASE => 0.0,
CLK_FEEDBACK => “CLKFBOUT”, -- Clock source to drive CLKFBIN (“CLKFBOUT” or “CLKOUT0”)
COMPENSATION => “SYSTEM_SYNCHRONOUS”, -- “SYSTEM_SYNCHRONOUS”, “SOURCE_SYNCHRONOUS”, “EXTERNAL”
DIVCLK_DIVIDE => 1, -- Division value for all output clocks (1-52)
REF_JITTER => 0.1, -- Reference Clock Jitter in UI (0.000-0.999).
RESET_ON_LOSS_OF_LOCK => FALSE -- Must be set to FALSE
)
port map (
CLKFBOUT => CLKFBOUT, -- 1-bit output PLL_BASE feedback output
-- CLKOUT0 - CLKOUT5: 1-bit (each) output Clock outputs
CLKOUT0 => CLKOUT0,
CLKOUT1 => CLKOUT1,
CLKOUT2 => CLKOUT2,
CLKOUT3 => CLKOUT3,
CLKOUT4 => CLKOUT4,
CLKOUT5 => CLKOUT5,
LOCKED => LOCKED, -- 1-bit output PLL_BASE lock status output
CLKFBIN => CLKFBIN, -- 1-bit input Feedback clock input
CLKIN => CLKIN, -- 1-bit input Clock input
RST => RST -- 1-bit input Reset input
);
-- End of PLL_BASE_inst instantiation

В библиотечном примитиве PLL_BASE для установки требуемого режима работы формируемого модуля фазовой автоподстройки частоты PLL предусмотрены следующие настраиваемые параметры:

  • BANDWIDTH — используется для выбора алгоритма функционирования, соответствующего требуемым характеристикам формируемого сигнала.
  • CLKFBOUT_MULT — указывает значение множителя в коэффициенте, определяющем значение частоты выходных сигналов.
  • CLKFBOUT_PHASE — задает значение фазового сдвига тактового сигнала в цепи обратной связи.
  • CLKIN_PERIOD — определяет значение периода входного сигнала синхронизации.
  • CLKOUT0_DIVIDE – CLKOUT5_DIVIDE — указывают значения индивидуального делителя в коэффициенте, определяющем значение частоты сигнала синхронизации, формируемого на соответствующем выходе модуля (О0–О5).
  • CLKOUT0_DUTY_CYCLE – CLKOUT5_DUTY_CYCLE — устанавливают значения коэффициента заполнения для тактовых сигналов, вырабатываемых на соответствующих выходах модуля (О0–О5).
  • CLKOUT0_PHASE – CLKOUT5_PHASE — позволяют выбрать значение фазового сдвига для соответствующих выходных сигналов синхронизации.
  • CLK_FEEDBACK — применяется для выбора тактового сигнала, подаваемого на вход обратной связи модуля.
  • COMPENSATION — определяет вид коррекции фазы для поступающего сигнала синхронизации.
  • DIVCLK_DIVIDE — указывает значения общего делителя в коэффициентах, определяющих значения частоты формируемых сигналов синхронизации.
  • REF_JITTER — задает ожидаемое значение джиттера опорного тактового сигнала для оптимизации работы формируемого модуля.
  • RESET_ON_LOSS_OF_LOCK — в текущей версии не поддерживается (следует использовать значение FALSE, предлагаемое по умолчанию).

В систему условных обозначений, применяемых в описании интерфейса библиотечного примитива, представляющего автономный вариант конфигурирования модуля фазовой автоподстройки частоты PLL, входят следующие идентификаторы входных и выходных портов:

  • CLKFBOUT — выход сигнала синхронизации, предназначенный для подключения ко входу обратной связи.
  • CLKOUT0 — CLKOUT5 — выходы тактовых сигналов, формируемых модулем фазовой автоподстройки частоты.
  • LOCKED — выход сигнала, информирующего о достижении режима фазового синхронизма.
  • CLKFBIN — вход сигнала обратной связи.
  • CLKIN — вход исходного сигнала синхронизации.
  • RST — вход сигнала сброса.

Для программирования режима работы модуля фазовой автоподстройки частоты PLL, формируемого с помощью шаблона BASE Phase Locked Loop (PLL_BASE), в первую очередь, рекомендуется задать значение периода для входного сигнала синхронизации, используя параметр настройки CLKIN_PERIOD. Значение этого параметра указывается в наносекундах с точностью до пикосекунд. Допустимый диапазон значений параметра CLKIN_PERIOD составляет от 1408 до 52 630.

Далее необходимо указать значения множителя CLKFBOUT_MULT и делителей CLKOUT0_DIVIDE – CLKOUT5_DIVIDE, DIVCLK_DIVIDE в коэффициентах, определяющих частоты требуемых выходных сигналов создаваемого модуля. Значение параметра CLKFBOUT_MULT (целочисленного типа) можно выбирать в диапазоне от 1 до 64. Параметры CLKOUT0_DIVIDE – CLKOUT5_DIVIDE могут принимать целочисленные значения в интервале от 1 до 128. Для параметра DIVCLK_DIVIDE диапазон возможных значений находится в пределах от 1 до 52. По умолчанию для всех параметров настройки, определяющих частоту вырабатываемых сигналов синхронизации, предлагается единичное значение.

После определения значений частот формируемых тактовых сигналов нужно установить их скважность с помощью параметров CLKOUT0_DUTY_CYCLE – CLKOUT5_DUTY_CYCLE. Значения этих параметров задают коэффициенты заполнения для соответствующих выходных сигналов синхронизации и указываются в процентном соотношении к их периоду. Таким образом, значения параметров CLKOUT0_DUTY_CYCLE – CLKOUT5_DUTY_CYCLE можно выбирать в диапазоне от 0,01 до 0,99. По умолчанию для этих параметров установлено значение 0,5, соответствующее 50%-ному заполнению (скважности 2).

Затем, при необходимости, следует определить значения фазового сдвига для сигналов синхронизации, формируемых на выходах CLKOUT0 – CLKOUT5, воспользовавшись соответствующими параметрами настройки CLKOUT0_PHASE – CLKOUT5_PHASE. Значения этих параметров можно выбирать в диапазоне от –360 до +360. По умолчанию данным параметрам присвоено нулевое значение, при котором фазовый сдвиг отсутствует.

Алгоритм работы системы фазовой автоподстройки частоты PLL выбирается с помощью параметра настройки BANDWIDTH, для которого по умолчанию предлагается значение “OPTIMIZED”. Это значение соответствует оптимизированному алгоритму функционирования модуля PLL. При необходимости параметру BANDWIDTH могут быть присвоены значения “HIGH” или “LOW”, определяющие соответствующие полосы захвата и удержания системы фазовой автоподстройки частоты.

Далее нужно указать ожидаемое значение джиттера опорного тактового сигнала, используя параметр REF_JITTER. Это значение задается в процентном отношении к аналогичному параметру входного сигнала синхронизации в диапазоне от 0 до 0,999. По умолчанию параметру REF_JITTER присваивается значение 0,1.

Для выбора тактового сигнала, подаваемого на вход обратной связи CLKFBIN, следует воспользоваться параметром настройки CLK_FEEDBACK, который может принимать одно из двух возможных значений: “CLKFBOUT” или “CLKOUT0”. По умолчанию для этого параметра предлагается значение “CLKFBOUT”, которое соответствует выходному сигналу генератора, управляемого напряжением. При выборе значения “CLKOUT0” на вход обратной связи будет подан сигнал с одноименного выхода модуля PLL.

Условный графический образ элемента, выполняющего функции фазовой автоподстройки частоты, описание которого создается на базе шаблона BASE Phase Locked Loop (PLL_BASE) для последующей реализации на основе соответствующего модуля блока управления синхронизацией CMT кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, изображен на рис. 217.

Условный графический  образ модуля фазовой  автоподстройки частоты PLL

Рис. 217. Условный графический образ модуля фазовой автоподстройки частоты PLL

DCM/PLL Feedback Clock Buffer (BUFIO2FB) содержит образец описания буферного элемента, предназначенного для организации обратной связи тактового сигнала при использовании модуля фазовой автоподстройки частоты PLL или цифрового модуля управления синхронизацией DCM ПЛИС серии Spartan-6. Применение этого буферного элемента обеспечивает компенсацию задержки входного сигнала синхронизации, вносимой буферным элементом BUFIO2. На рис. 218 приведена структурная схема блока формирования сигнала синхронизации, выполненного на базе модуля PLL или DCM, которая поясняет назначение рассматриваемого буферного элемента.

Структурная схема блока формирования сигнала синхронизации, выполненного на базе модуля PLL или DCM

Рис. 218. Структурная схема блока формирования сигнала синхронизации, выполненного на базе модуля PLL или DCM

Рассматриваемый шаблон включает в себя следующий VHDL-код:

-- BUFIO2FB : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (BUFIO2FB_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- BUFIO2FB: DCM/PLL Feedback Clock Buffer
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
BUFIO2FB_inst : BUFIO2FB
generic map (
DIVIDE_BYPASS => TRUE -- Bypass divider (TRUE/FALSE)
)
port map (
O => O, -- 1-bit output Output feedback clock (connect to feedback input of DCM/PLL)
I => I -- 1-bit input Feedback clock input (connect to input port)
);
-- End of BUFIO2FB_inst instantiation

Основой приведенного шаблона является экземпляр библиотечного примитива BUFIO2FB, который представляет указанный буферный элемент. В этом примитиве используется единственный параметр настройки DIVIDE_BYPASS, который позволяет выбрать тип задержки в формируемом буферном элементе. Если для данного параметра указывается значение FALSE, то величина задержки создаваемого буферного элемента BUFIO2FB будет соответствовать задержке сигнала на выходе DIVCLK буферного элемента BUFIO2. При использовании значения TRUE, предлагаемого по умолчанию для параметра DIVIDE_BYPASS, величина задержки будет эквивалентна значению задержки буферного элемента BUFIO2 на выходе IOCLK.

Система условных обозначений, используемых в описании интерфейса буферных элементов, формируемых с помощью шаблона DCM/PLL Feedback Clock Buffer (BUFIO2FB), включает в себя те же идентификаторы, что и в буферном элементе, создаваемом на базе шаблона Global Clock Buffer (BUFG).

Условный графический образ буферного элемента, описание которого создается на основе библиотечного примитива BUFIO2FB для последующего применения в проектах, реализуемых на базе кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, отличается от изображения, приведенного на рис. 43 (КиТ № 7`2010, стр. 103), только названием.

Digital Clock Manager Frequency Aligned Clock Generator (DCM_CLKGEN) включает в себя шаблон описания компонента, предоставляющего расширенные возможности синтеза тактовых сигналов в цифровых модулях управления синхронизацией DCM ПЛИС серии Spartan-6. Основу этого шаблона образует оператор создания экземпляра библиотечного примитива DCM_CLKGEN. Компоненты, формируемые на базе этого примитива, в отличие от элементов, создаваемых с помощью шаблона Spartan Digital Clock Manager (DCM_SP), поддерживают возможность динамического изменения характеристик формируемых сигналов синхронизации. Для динамического изменения параметров синтезируемых тактовых сигналов используется последовательный интерфейс SPI. На рис. 219 приведена структурная схема блока синхронизации, выполненного на базе трех модулей DCM, параметры цифровых синтезаторов которых могут программироваться во время функционирования через интерфейс SPI. При этом контроллер последовательного интерфейса реализуется на базе стандартных логических ресурсов кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.

Структурная схема блока синхронизации, выполненного на базе трех модулей DCM

Рис. 219. Структурная схема блока синхронизации, выполненного на базе трех модулей DCM

Текст шаблона Digital Clock Manager Frequency Aligned Clock Generator (DCM_CLKGEN) выглядит следующим образом:

-- DCM_CLKGEN : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (DCM_CLKGEN_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- DCM_CLKGEN: Frequency Aligned Digital Clock Manager
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
DCM_CLKGEN_inst : DCM_CLKGEN
generic map (
CLKFXDV_DIVIDE => 2, -- CLKFXDV divide value (2, 4, 8, 16, 32)
CLKFX_DIVIDE => 1, -- Divide value - D - (1-256)
CLKFX_MD_MAX => 0.0, -- Specify maximum M/D ratio for timing anlysis
CLKFX_MULTIPLY => 4, -- Multiply value - M - (2-256)
CLKIN_PERIOD => 0.0, -- Input clock period specified in nS
SPREAD_SPECTRUM => “NONE”, -- Spread Spectrum mode “NONE”, “CENTER_LOW_SPREAD”, “CENTER_HIGH_SPREAD”, “VIDEO_LINK_M0”, “VIDEO_LINK_M1” or “VIDEO_LINK_M2”
STARTUP_WAIT => FALSE -- Delay config DONE until DCM_CLKGEN LOCKED (TRUE/FALSE)
)
port map (
CLKFX => CLKFX, -- 1-bit output Generated clock output
CLKFX180 => CLKFX180, -- 1-bit output Generated clock output 180 degree out of phase from CLKFX.
CLKFXDV => CLKFXDV, -- 1-bit output Divided clock output
LOCKED => LOCKED, -- 1-bit output Locked output
PROGDONE => PROGDONE, -- 1-bit output Active high output to indicate the successful re-programming
STATUS => STATUS, -- 2-bit output DCM_CLKGEN status
CLKIN => CLKIN, -- 1-bit input Input clock
FREEZEDCM => FREEZEDCM, -- 1-bit input Prevents frequency adjustments to input clock
PROGCLK => PROGCLK, -- 1-bit input Clock input for M/D reconfiguration
PROGDATA => PROGDATA, -- 1-bit input Serial data input for M/D reconfiguration
PROGEN => PROGEN, -- 1-bit input Active high program enable
RST => RST -- 1-bit input Reset input pin
);
-- End of DCM_CLKGEN_inst instantiation

В приведенной конструкции предусмотрены следующие настраиваемые параметры, предназначенные для определения характеристик формируемых сигналов синхронизации:

  • CLKFXDV_DIVIDE — указывает значение дополнительного делителя частоты сигнала синхронизации, генерируемого цифровым синтезатором частот DFS модуля DCM.
  • CLKFX_DIVIDE — устанавливает значение знаменателя дробного коэффициента, используемого для вычисления частоты выходного сигнала, формируемого цифровым синтезатором частот DFS в соответствии с выражением (2).
  • CLKFX_MD_MAX — определяет максимальное значение дробного коэффициента, используемого для вычисления частоты синтезируемого сигнала при динамическом программировании модуля DCM.
  • CLKFX_MULTIPLY — задает значение числителя коэффициента умножения частоты входного тактового сигнала, определяющего характеристики сигнала синхронизации, генерируемого на выходе цифрового синтезатора частот, в соответствии с выражением (2).
  • CLKIN_PERIOD — указывает значение периода входного сигнала синхронизации.
  • SPREAD_SPECTRUM — позволяет задействовать функцию расширения спектра сигнала для снижения уровня электромагнитного излучения.
  • STARTUP_WAIT — управляет включением паузы в процессе конфигурирования ПЛИС до момента нормального захвата следящей системы схемы автоподстройки задержек.

При использовании шаблона Digital Clock Manager Frequency Aligned Clock Generator (DCM_CLKGEN) для подготовки описаний цифровых модулей управления синхронизацией необходимо прежде всего задать значение периода входного тактового сигнала с помощью параметра настройки CLKIN_PERIOD. Значение этого параметра указывается в наносекундах.

Затем следует определить значение дробного коэффициента умножения частоты входного тактового сигнала, которое необходимо для получения требуемой частоты сигнала синхронизации, формируемого на выходе цифрового синтезатора частот DFS модуля DCM.  Числитель и знаменатель этого коэффициента задаются в виде значений параметров настройки CLKFX_MULTIPLY и CLKFX_DIVIDE. Допустимые значения этих параметров находятся в диапазонах от 2 до 256 и от 1 до 256 соответственно. По умолчанию параметру CLKFX_MULTIPLY присваивается значение, равное четырем, а параметру CLKFX_DIVIDE — единичное значение.

Если на выходе синтезатора частот предполагается задействовать дополнительный делитель, то нужно указать его коэффициент деления, воспользовавшись параметром CLKFXDV_DIVIDE. Указанный параметр может принимать одно из пяти возможных значений: 2, 4, 8, 16, 32. По умолчанию для этого параметра предлагается значение, равное двум.

В тех случаях, когда необходимо снизить уровень электромагнитного излучения за счет расширения спектра сигнала, следует выбрать соответствующее значение для параметра настройки SPREAD_SPECTRUM, то есть один из шести вариантов: “NONE”, “CENTER_LOW_SPREAD”, “CENTER_HIGH_SPREAD”, “VIDEO_LINK_M0”, “VIDEO_LINK_M1” или “VIDEO_LINK_M2”. Значения “CENTER_LOW_SPREAD” и “CENTER_HIGH_SPREAD” соответствуют режимам фиксированного расширения спектра с различной полосой. Варианты “VIDEO_LINK_M0”, “VIDEO_LINK_M1” и “VIDEO_LINK_M2” устанавливают режимы изменяемого расширения спектра. При выборе значения “NONE”, предлагаемого по умолчанию, функция расширения спектра сигнала не используется.

Система условных обозначений, используемых в описании интерфейса компонентов, формируемых с помощью шаблона Digital Clock Manager Frequency Aligned Clock Generator (DCM_CLKGEN), включает в себя следующие идентификаторы входных и выходных портов:

  • CLKFX — выход сигнала, вырабатываемого цифровым синтезатором частот DFS, с нулевым сдвигом фазы и с частотой, определяемой разработчиком.
  • CLKFX180 — выход сигнала, формируемого цифровым синтезатором частот, со сдвигом фазы на половину периода и с частотой, определяемой разработчиком.
  • CLKFXDV — выход тактового сигнала, формируемого путем деления частоты сигнала, генерируемого цифровым синтезатором частот на заданный делитель.
  • LOCKED — выход сигнала, информирующего о достоверности выходных сигналов создаваемого экземпляра модуля DCM.
  • PROGDONE — выход сигнала, информирующего о статусе выполнения операции динамического программирования параметров цифрового синтезатора частот.
  • STATUS — выходная шина состояния создаваемого экземпляра цифрового модуля управления синхронизацией.
  • CLKIN — вход исходного тактового сигнала.
  • FREEZEDCM — вход сигнала управления, предотвращающего корректировку выходного тактового сигнала при исчезновении исходного сигнала синхронизации (включения режима фиксации частоты).
  • PROGCLK — вход тактового сигнала интерфейса, предназначенного для динамического программирования параметров цифрового синтезатора частот DFS.
  • PROGDATA — последовательный вход данных, определяющих значения параметров цифрового синтезатора частот при динамическом реконфигурировании модуля DCM.
  • PROGEN — вход сигнала управления, разрешающего операцию динамического программирования параметров цифрового синтезатора частот DFS.
  • RST — вход асинхронного сброса.

На рис. 220 показан условный графический образ компонентов, формируемых с помощью шаблона Digital Clock Manager Frequency Aligned Clock Generator (DCM_CLKGEN) для последующей реализации на базе цифрового модуля управления синхронизацией ПЛИС серии Spartan-6.

Условный графический образ компонентов, реализуемых на базе модуля DCM

Рис. 220. Условный графический образ компонентов, реализуемых на базе модуля DCM

Dual Input Differential Clock Buffer (BUFIO2_2CLK) включает в себя образец VHDL-описания буферного элемента тактового сигнала с дифференциальными входами, формирующего входные сигналы синхронизации для глобальных буферных элементов, модулей управления синхронизацией, параллельно-последовательных и последовательно-параллельных преобразователей ячеек ввода/вывода в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT:

-- BUFIO2_2CLK : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (BUFIO2_2CLK_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- BUFIO2_2CLK: Dual Input Differential Clock Buffer
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
BUFIO2_2CLK_inst : BUFIO2_2CLK
generic map (
DIVIDE => 2 -- DIVCLK divider (1-8)
)
port map (
DIVCLK => DIVCLK, -- 1-bit output Divided clock output
IOCLK => IOCLK, -- 1-bit output I/O output clock
SERDESSTROBE => SERDESSTROBE, -- 1-bit output Output SERDES strobe (connect to ISERDES2/OSERDES2)
I => I, -- 1-bit input Clock input (connect to IBUFG)
IB => IB -- 1-bit input Secondary clock input
);
-- End of BUFIO2_2CLK_inst instantiation

Основу представленного шаблона образует экземпляр библиотечного примитива BUFIO2_2CLK, в котором используются единственный параметр настройки DIVIDE. Этот параметр определяет значение делителя частоты входного сигнала для выхода DIVCLK. Частота сигнала на указанном выходе вычисляется по следующей формуле:

FDIVCLK = (2FIN)/DIVIDE, (3)

где FIN — значение частоты входного сигнала.

В качестве делителя частоты можно указать любое целочисленное значение, которое находится в интервале от двух до восьми. По умолчанию параметру DIVIDE присваивается значение, равное двум.

В систему условных обозначений, используемых в описании интерфейса буферных элементов, формируемых с помощью шаблона Dual Input Differential Clock Buffer (BUFIO2_2CLK), входят следующие идентификаторы входов и выходов:

  • DIVCLK — выход тактового сигнала, формируемого встроенным делителем частоты, используемого в качестве входного для глобальных буферных элементов, модулей фазовой автоподстройки частоты и цифровых модулей управления синхронизацией.
  • IOCLK — выход сигнала синхронизации для входных и выходных регистров с удвоенной скоростью передачи данных, а также параллельно-последовательных и последовательно-параллельных преобразователей ячеек ввода/вывода.
  • SERDESSTROBE — выход сигнала управления для параллельно-последовательных и последовательно-параллельных преобразователей ячеек ввода/вывода.
  • I — прямой вход дифференциальной пары сигналов.
  • IB — инверсный вход дифференциальной пары сигналов.

Условный графический образ буферного элемента тактового сигнала с дифференциальными входами, для подготовки описания которого применяется шаблон Dual Input Differential Clock Buffer (BUFIO2_2CLK), изображен на рис. 221.

Условный графический образ буферного элемента тактового сигнала с дифференциальными входами

Рис. 221. Условный графический образ буферного элемента тактового сигнала с дифференциальными входами

На рис. 222 приведена структурная схема, демонстрирующая применение буферных элементов, создаваемых с помощью рассматриваемого шаблона, для формирования тактовых сигналов, необходимых для реализации удвоенной скорости обработки данных в параллельно-последовательных и последовательно-параллельных преобразователях ячеек ввода/вывода ПЛИС серии Spartan-6.

Применение буферного элемента тактового сигнала с дифференциальными входами для реализации удвоенной скорости преобразования данных

Рис. 222. Применение буферного элемента тактового сигнала с дифференциальными входами для реализации удвоенной скорости преобразования данных

Временные диаграммы сигналов синхронизации, поясняющие функционирование буферного элемента тактового сигнала с дифференциальными входами, формируемого на основе шаблона Dual Input Differential Clock Buffer (BUFIO2_2CLK) в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, при различных значениях параметра настройки DIVIDE, представлены на рис. 223.

Временные диаграммы сигналов синхронизации  на выходах буферного элемента BUFIO2_2CLK

Рис. 223. Временные диаграммы сигналов синхронизации на выходах буферного элемента BUFIO2_2CLK

HROW Clock Buffer for a Single Clocking Region (BUFH) является шаблоном VHDL-описания буферных элементов, предоставляющих доступ к горизонтальным линиям передачи тактовых сигналов (Horizontal Clock Row, HCLK ROW) в ПЛИС серии Spartan-6. К каждой горизонтальной магистрали HCLK ROW подключено 16 буферных элементов BUFH, которые обеспечивают минимизацию временных перекосов при распределении сигналов синхронизации в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Структура горизонтальной магистрали тактовых сигналов в ПЛИС указанных семейств, включающая в себя буферные элементы BUFH, показана на рис. 224.

Структура горизонтальной магистрали тактовых сигналов

Рис. 224. Структура горизонтальной магистрали тактовых сигналов

Текст шаблона описания буферного элемента BUFH имеет следующий вид.

-- BUFH : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (BUFH_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- BUFH: HROW Clock Buffer for a Single Clocking Region
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
BUFH_inst : BUFH
port map (
O => O, -- 1-bit output Clock output
I => I -- 1-bit input Clock input
);
-- End of BUFH_inst instantiation

В качестве основы рассматриваемого шаблона используется экземпляр библиотечного примитива BUFH, который представляет соответствующие буферные элементы, входящие в состав инфраструктуры распределения тактовых сигналов в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Система условных обозначений интерфейсных портов буферных элементов, описание которых создается на основе шаблона HROW Clock Buffer for a Single Clocking Region (BUFH), включает в себя те же идентификаторы, что и в буферном элементе, формируемом с помощью шаблона Global Clock Buffer (BUFG).

Условный графический образ буферного элемента, формируемого на основе экземпляра библиотечного примитива BUFH для последующего применения в проектах, реализуемых на базе ПЛИС серии Spartan-6, отличается от изображения, приведенного на рис. 43 (КиТ № 7`2010, стр. 103), только названием.

High-speed I/O PLL clock buffer (BUFPLL) представляет собой образец описания высокоскоростного буферного элемента, используемого для подключения сигналов синхронизации, формируемых модулями фазовой автоподстройки частоты PLL, к логическим ячейкам ввода/вывода кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT. Все логические ресурсы блоков ввода/вывода каждого региона ПЛИС серии Spartan-6 (входные и выходные регистры, параллельно-последовательные и последовательно-параллельные преобразователи) тактируются сигналами синхронизации, поступающими с выходов буферных элементов BUFIO2 и BUFPLL этого региона (рис. 225).

Структура сети распределения региональных тактовых сигналов в ПЛИС серии Spartan-6

Рис. 225. Структура сети распределения региональных тактовых сигналов в ПЛИС серии Spartan-6

Для подготовки описания буферного элемента BUFPLL используется оператор создания экземпляра одноименного библиотечного примитива, который образует основу рассматриваемого шаблона:

-- BUFPLL : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (BUFPLL_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- BUFPLL: High-speed I/O PLL clock buffer
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
BUFPLL_inst : BUFPLL
generic map (
DIVIDE => 1, -- DIVCLK divider (1-8)
ENABLE_SYNC => TRUE -- Enable synchrnonization between PLL and GCLK (TRUE/FALSE)
)
port map (
IOCLK => IOCLK, -- 1-bit output Output I/O clock
LOCK => LOCK, -- 1-bit output Synchronized LOCK output
SERDESSTROBE => SERDESSTROBE, -- 1-bit output Output SERDES strobe (connect to ISERDES2/OSERDES2)
GCLK => GCLK, -- 1-bit input BUFG clock input
LOCKED => LOCKED, -- 1-bit input LOCKED input from PLL
PLLIN => PLLIN -- 1-bit input Clock input from PLL
);
-- End of BUFPLL_inst instantiation

В библиотечном примитиве BUFPLL предусмотрены следующие параметры настройки:

  • DIVIDE — устанавливает значение делителя частоты входного сигнала для выхода SERDESSTROBE.
  • ENABLE_SYNC — предоставляет возможность синхронизации сигнала на выходе SERDESSTROBE с тактовым сигналом на входе GCLK.

В составе системы условных обозначений, применяемых в описании интерфейса буферных элементов, создаваемых с помощью шаблона High-speed I/O PLL clock buffer (BUFPLL), представлены следующие идентификаторы входных и выходных портов:

  • IOCLK — выход сигнала синхронизации, предназначенного для тактирования последовательно-параллельных и парал-лельно-последовательных преобразователей, входящих в состав логических ячеек ввода/вывода кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT.
  • LOCK — выход сигнала, информирующего о достижении режима синхронизма модуля фазовой автоподстройки частоты PLL.
  • SERDESSTROBE — выход сигнала стробирования, предназначенного для управления работой последовательно-параллельных и параллельно-последовательных преобразователей.
  • GCLK — вход сигнала синхронизации, поступающего с выходов глобальных буферных элементов (BUFG или GCLK).
  • LOCKED — вход сигнала, информирующего о достижении режима синхронизма модуля фазовой автоподстройки частоты PLL.
  • PLLIN — вход сигнала синхронизации, формируемого модулем фазовой автоподстройки частоты PLL.

При формировании законченного описания буферного элемента на основе шаблона High-speed I/O PLL clock buffer (BUFPLL) необходимо указать требуемое значение делителя частоты входного сигнала, воспользовавшись настраиваемым параметром DIVIDE. Этот параметр может принимать целочисленные значения в диапазоне от 1 до 8. По умолчанию для параметра DIVIDE предлагается единичное значение.

На рис. 226 приведен условный графический образ высокоскоростного буферного элемента BUFPLL, формирующего на основе выходных сигналов синхронизации модулей фазовой автоподстройки частоты PLL совокупность тактовых сигналов для последовательно-параллельных и параллельно-последовательных преобразователей, входящих в состав логических ячеек ввода/вывода ПЛИС серии Spartan-6.

Условный графический образ высокоскоростного буферного элемента BUFPLL

Рис. 226. Условный графический образ высокоскоростного буферного элемента BUFPLL

Типовая схема включения буферного элемента, формируемого с помощью шаблона High-speed I/O PLL clock buffer (BUFPLL), изображена на рис. 227. Выходные сигналы SERDESSTROBE и IOCLK подключаются соответственно к входам стробирования и тактового сигнала последовательно-параллельных и параллельно-последовательных преобразователей ячеек ввода/вывода.

Типовая схема включения буферных элементов BUFPLL

Рис. 227. Типовая схема включения буферных элементов BUFPLL

На рис. 228 представлены временные диаграммы сигналов синхронизации, которые поясняют функционирование высокоскоростных буферных элементов тактового сигнала, создаваемых на основе шаблона High-speed I/O PLL clock buffer (BUFPLL) при различных значениях параметра настройки DIVIDE.

Временные диаграммы сигналов  синхронизации на выходах буферного элемента BUFPLL

Рис. 228. Временные диаграммы сигналов синхронизации на выходах буферного элемента BUFPLL

I/O Clock Buffer (BUFIO2) содержит шаблон VHDL-описания буферного элемента, предназначенного для организации тактирования параллельно-последовательных и последовательно-параллельных преобразователей, представленных в составе логических ячеек ввода/вывода, с использованием сигналов синхронизации, поступающих с соответствующих входов кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, а также для подключения этих сигналов к глобальным буферным элементам, цифровым модулям управления синхронизацией DCM и фазовой автоподстройки частоты PLL. В качестве основы этого шаблона используется оператор создания экземпляра библиотечного примитива BUFIO2, представляющего одноименные буферные элементы тактовых сигналов, входящие в состав инфраструктуры распределения сигналов синхронизации ПЛИС серии Spartan-6 (рис. 225):

-- BUFIO2 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (BUFIO2_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- BUFIO2: I/O Clock Buffer
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
BUFIO2_inst : BUFIO2
generic map (
DIVIDE => 1, -- DIVCLK divider (1-8)
DIVIDE_BYPASS => TRUE, -- Bypass the divider circuitry (TRUE/FALSE)
I_INVERT => FALSE, -- Invert clock (TRUE/FALSE)
USE_DOUBLER => FALSE -- Use doubler circuitry (TRUE/FALSE)
)
port map (
DIVCLK => DIVCLK, -- 1-bit output Divided clock output
IOCLK => IOCLK, -- 1-bit output I/O output clock
SERDESSTROBE => SERDESSTROBE, -- 1-bit output Output SERDES strobe (connect to ISERDES2/OSERDES2)
I => I -- 1-bit input Clock input (connect to IBUFG)
);
-- End of BUFIO2_inst instantiation

В библиотечном примитиве BUFIO2 применяется следующая совокупность параметров настройки:

  • DIVIDE — задает значение делителя частоты входного сигнала для выходов DIVCLK и SERDESSTROBE.
  • DIVIDE_BYPAS — предоставляет возможность исключения делителя частоты входного сигнала при формировании тактового сигнала на выходе DIVCLK.
  • I_INVERT — позволяет инвертировать (сдвинуть по фазе на 180°) тактовый сигнал, формируемый на выходе IOCLK.
  • USE_DOUBLER — используется для выбора режима функционирования, соответствующего стандартной или удвоенной скорости работы параллельно-последовательных и последовательно-параллельных преобразователей.

В описании интерфейса буферных элементов, создаваемых с помощью шаблона  I/O Clock Buffer (BUFIO2), используется следующая система условных обозначений входных и выходных портов:

  • DIVCLK — выход тактового сигнала, формируемого встроенным делителем частоты, используемый в качестве входного для глобальных буферных элементов, модулей фазовой автоподстройки частоты PLL и цифровых модулей управления синхронизацией DCM.
  • IOCLK — выход сигнала синхронизации, предназначенного для тактирования входных и выходных регистров с удвоенной скоростью передачи данных, а также последовательно-параллельных и парал-лельно-последовательных преобразователей, входящих в состав логических ячеек ввода/вывода.
  • SERDESSTROBE — выход сигнала стробирования, используемого для управления работой последовательно-параллельных и параллельно-последовательных преобразователей.
  • I — вход сигнала синхронизации, поступающего с выхода глобального буферного элемента.

Условный графический образ буферного элемента сигналов синхронизации, для подготовки описания которого используется шаблон I/O Clock Buffer (BUFIO2), показан на рис. 229.

Условный графический образ  буферного элемента BUFIO2

Рис. 229. Условный графический образ буферного элемента BUFIO2

На рис. 230 представлена типовая схема включения буферного элемента, создаваемого с помощью шаблона I/O Clock Buffer (BUFIO2), формирующая совокупность сигналов синхронизации для обычного режима функционирования параллельно-последова-тельных и последовательно-параллельных преобразователей ячеек ввода/вывода ПЛИС серии Spartan-6.

Типовая схема включения буферных элементов BUFIO2

Рис. 230. Типовая схема включения буферных элементов BUFIO2

Временные диаграммы сигналов синхронизации, которые поясняют применение высокоскоростных буферных элементов тактовых сигналов, формируемых на основе шаблона I/O Clock Buffer (BUFIO2), для организации работы параллельно-последовательных и последовательно-параллельных преобразователей с обычной скоростью при различных значениях параметра настройки DIVIDE, приведены на рис. 231.

Временные диаграммы сигналов синхронизации  на выходах буферного элемента BUFIO2

Рис. 231. Временные диаграммы сигналов синхронизации на выходах буферного элемента BUFIO2

Для реализации режима удвоенной скорости обработки данных параллельно-последовательными и последовательно-параллельными преобразователями логических ячеек ввода/вывода можно использовать схему, включающую в себя два буферных элемента, создаваемых на базе библиотечного примитива BUFIO2. Один из возможных вариантов такой схемы изображен на рис. 232.

Применение буферных элементов BUFIO2 для реализации удвоенной скорости преобразования данных

Рис. 232. Применение буферных элементов BUFIO2 для реализации удвоенной скорости преобразования данных

На рис. 233 показаны временные диаграммы сигналов синхронизации, формируемых двумя буферными элементами, описания которых создаются на основе шаблона I/O Clock Buffer (BUFIO2), соответствующие режиму удвоенной скорости функционирования параллельно-последовательных и последовательно-параллельных преобразователей логических ячеек ввода/вывода.

Временные диаграммы сигналов синхронизации  на выходах буферных элементов BUFIO2 при удвоенной скорости преобразования данных

Рис. 233. Временные диаграммы сигналов синхронизации на выходах буферных элементов BUFIO2 при удвоенной скорости преобразования данных

Internal Configuration Access Port (ICAP_SPARTAN6) включает в себя образец описания внутреннего порта конфигурационного интерфейса кристаллов программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, обеспечивающего доступ к конфигурационным регистрам ПЛИС и возможность обратного считывания данных. В основе этого шаблона лежит использование экземпляра библиотечного примитива ICAP_SPARTAN6, представляющего внутренний порт конфигурационного интерфейса, подобного SelectMAP [24].

-- ICAP_SPARTAN6 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (ICAP_SPARTAN6_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- ICAP_SPARTAN6: Internal Configuration Access Port
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
ICAP_SPARTAN6_inst : ICAP_SPARTAN6
generic map (
DEVICE_ID => X”2000093”, -- Specifies the pre-programmed Device ID value
SIM_CFG_FILE_NAME => “NONE” -- Specifies the Raw Bitstream (RBT) file to be parsed by the simulation model
)
port map (
BUSY => BUSY, -- 1-bit output Busy/Ready output
O => O, -- 16-bit output Configuartion data output bus
CE => CE, -- 1-bit input Active-Low ICAP Enable input
CLK => CLK, -- 1-bit input Clock input
I => I, -- 16-bit input Configuration data input bus
WRITE => WRITE -- 1-bit input Read/Write control input
);
-- End of ICAP_SPARTAN6_inst instantiation

В библиотечном примитиве ICAP_SPARTAN6 предусмотрены следующие параметры настройки:

  • DEVICE_ID — определяет идентификационный код используемого типа кристалла программируемой логики.
  • SIM_CFG_FILE_NAME — позволяет указать идентификатор файла конфигурационной последовательности, применяемого в процессе моделирования проектируемого устройства.

В состав системы условных обозначений входных и выходных портов, используемых в описании интерфейса компонентов, формируемых с помощью шаблона Internal Configuration Access Port (ICAP_SPARTAN6), входят следующие идентификаторы:

  • BUSY — выход сигнала состояния Busy/ Ready, используемого при выполнении операций чтения.
  • O — выходная 16-разрядная шина конфигурационных данных.
  • CE — вход сигнала разрешения внутреннего конфигурационного интерфейса, аналогичного сигналу CSI_B интерфейса SelectMAP.
  • CLK — вход тактового сигнала внутреннего конфигурационного интерфейса.
  • I — входная шестнадцатиразрядная шина конфигурационных данных.
  • WRITE — вход сигнала выбора выполняемой операции — записи или чтения.

Условный графический образ компонента, создаваемого с помощью шаблона Internal Configuration Access Port (ICAP_SPARTAN6), который позволяет выполнять операции записи и чтения данных из конфигурационных регистров ПЛИС серии Spartan-6, изображен на рис. 234.

Условный графический образ компонента ICAP_SPARTAN6

Рис. 234. Условный графический образ компонента ICAP_SPARTAN6

JTAG Boundary Scan Logic Control Circuit (BSCAN_SPARTAN6) является шаблоном VHDL-описания компонента, предоставляющего возможность выполнения операций периферийного сканирования в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT:

-- BSCAN_SPARTAN6 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the body of the design code. The instance name
-- declaration : (BSCAN_SPARTAN6_inst) and/or the port declarations after the
-- code : “=>” declaration maybe changed to properly reference and
-- : connect this function to the design. All inputs and outputs
-- : must be connected.
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- BSCAN_SPARTAN6: JTAG Boundary Scan Logic Control Circuit
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
BSCAN_SPARTAN6_inst : BSCAN_SPARTAN6
generic map (
JTAG_CHAIN => 1 -- Value for USER command. Possible values: (1,2,3 or 4).
)
port map (
CAPTURE => CAPTURE, -- 1-bit output CAPTURE output from TAP controller.
DRCK => DRCK, -- 1-bit output Data register output for USER functions.
RESET => RESET, -- 1-bit output Reset output for TAP controller.
RUNTEST => RUNTEST, -- 1-bit output Output signal that gets asserted when TAP controller is in Run Test Idle state.
SEL => SEL, -- 1-bit output USER active output.
SHIFT => SHIFT, -- 1-bit output SHIFT output from TAP controller.
TCK => TCK, -- 1-bit output Scan Clock output. Fabric connection to TAP Clock pin.
TDI => TDI, -- 1-bit output TDI output from TAP controller.
TMS => TMS, -- 1-bit output Test Mode Select output. Fabric connection to TAP.
UPDATE => UPDATE, -- 1-bit output UPDATE output from TAP controller
TDO => TDO -- 1-bit input Data input for USER function.
);
-- End of BSCAN_SPARTAN6_inst instantiation

Основу представленной конструкции образует оператор создания экземпляра библиотечного элемента BSCAN_SPARTAN6, в котором используется единственный параметр настройки JTAG_CHAIN. Значение этого параметра определяет номер цепочки периферийного сканирования, для управления которой применяется создаваемый экземпляр библиотечного примитива. В составе проектируемого устройства, реализуемого на базе ПЛИС серии Spartan-6, может применяться до четырех компонентов, создаваемых на основе шаблона JTAG Boundary Scan Logic Control Circuit (BSCAN_SPARTAN6). Таким образом, параметр настройки JTAG_CHAIN может принимать одно из четырех значений — 1, 2, 3, 4. По умолчанию данному параметру присваивается единичное значение.

Система условных обозначений входных и выходных портов, используемая в описании интерфейса компонентов, создаваемых с помощью шаблона JTAG Boundary Scan Logic Control Circuit (BSCAN_SPARTAN6), включает в себя следующие идентификаторы:

  • CAPTURE — выход одноименного сигнала, поступающего от контроллера порта тестового доступа TAP (Test Access Port).
  • DRCK — выход тактового сигнала для соответствующей цепочки периферийного сканирования.
  • RESET — выход сигнала сброса, поступающего от контроллера TAP.
  • RUNTEST — выход сигнала, информирующего о текущем состоянии контроллера TAP (Run Test/Idle).
  • SEL — выход сигнала, информирующего о загрузке инструкции периферийного сканирования в регистр команд JTAG Instruction Register и ее исполнении.
  • SHIFT — выход одноименного сигнала, поступающего от контроллера TAP.
  • TCK — выход тактового сигнала, поступающего от контроллера порта тестового доступа.
  • TDI — выход сигнала тестовых данных, поступающего от контроллера JTAG-порта.
  • TMS — выход одноименного сигнала, поступающего от контроллера порта тестового доступа TAP.
  • UPDATE — выход одноименного сигнала, поступающего от контроллера TAP.
  • TDO — вход сигнала тестовых данных цепочки периферийного сканирования.

На рис. 235 приведен условный графический образ компонента, предназначенного для организации периферийного сканирования в кристаллах программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, описание которого формируется с помощью шаблона JTAG Boundary Scan Logic Control Circuit (BSCAN_SPARTAN6).

Условный графический образ компонента, предназначенного для организации периферийного сканирования в ПЛИС серии Spartan-6

Рис. 235. Условный графический образ компонента, предназначенного для организации периферийного сканирования в ПЛИС серии Spartan-6

JTAG Simulation Model (JTAG_SIM_SPARTAN6) представляет собой образец описания компонента, предназначенного для функционального моделирования контроллера порта JTAG-интерфейса в составе разрабатываемого устройства, реализуемого на базе ПЛИС серии Spartan-6:

-- JTAG_SIM_SPARTAN6 : In order to incorporate this simulation model,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the testbench code.
-- declaration : This should not be instantiated into the synthesizable design
-- code : code.
-- : The instance name
-- : (JTAG_SIM_SPARTAN6_inst) and/or the port declarations after the
-- : “=>” assignment maybe changed to properly reference and connect this
-- : function to the design.
-- : Only one JTAG_SIM_SPARTAN6 should be
-- : instantiated per design.
-- : All inputs and output should be connected
--
-- Library : In addition to adding the instance declaration, a use
-- declaration : statement for the UNISIM.vcomponents library needs to be
-- for : added before the entity declaration. This library
-- Xilinx : contains the component declarations for all Xilinx
-- primitives : primitives and points to the models that will be used
-- : for simulation.
--
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exist.
--
Library UNISIM;
use UNISIM.vcomponents.all;
--
-- <-----Cut code below this line and paste into the architecture body---->
--
-- JTAG_SIM_SPARTAN6: JTAG Interface Simulation Model
-- Spartan-6
-- Xilinx HDL Language Template, version 12.4
--
JTAG_SIM_SPARTAN6_inst : JTAG_SIM_SPARTAN6
generic map (
PART_NAME => “LX4”) -- Specify target S6 device. Possible values are: “LX4”,”LX150”,”LX150T”,”LX16”,”LX45”,”LX45T”
port map (
TDO => TDO, -- JTAG data output (1-bit)
TCK => TCK, -- Clock input (1-bit)
TDI => TDI, -- JTAG data input (1-bit)
TMS => TMS -- JTAG command input (1-bit)
);
-- End of JTAG_SIM_SPARTAN6_inst instantiation

Основу приведенного шаблона образует экземпляр библиотечного примитива JTAG_SIM_SPARTAN6. В этом элементе предусмотрен единственный параметр настройки PART_NAME, значение которого определяет тип кристалла программируемой логики семейств Spartan-6 LX и Spartan-6 LXT, применяемый для реализации моделируемого устройства. Список возможных значений указанного параметра содержит следующие варианты сокращенных условных обозначений ПЛИС серии Spartan-6: “LX4”, “LX9”, “LX16”, “LX25”, “LX25T”, “LX45”, “LX45T”, “LX75”, “LX75T”, “LX100”, “LX100T”, “LX150”, “LX150T”. По умолчанию для параметра PART_NAME установлено значение “LX4”, соответствующее младшему представителю семейства Spartan-6 LX.

Условный графический образ компонента, для подготовки описания которого используется шаблон JTAG Simulation Model (JTAG_SIM_SPARTAN6), изображен на рис. 236.

Условный графический образ компонента JTAG_SIM_SPARTAN6

Рис. 236. Условный графический образ компонента JTAG_SIM_SPARTAN6

Продолжение следует.

Литература

  1. Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx. М.: Горячая линия – Телеком, 2004.
  2. Бибило П. Н. Основы языка VHDL. М.: Солон-Р, 2000.
  3. Бибило П. Н. Синтез логических схем с использованием языка VHDL. М.: Солон-Р, 2002.
  4. Уэйкерли Дж. Ф. Проектирование цифровых устройств. Т. 1. М.: Постмаркет, 2002.
  5. Поляков А. К. Языки VHDL и Verilog в проектировании цифровой аппаратуры. М.: Солон-Пресс, 2003.
  6. Зотов В. Инструментальный комплект Spartan-3 Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2005. № 7.
  7. Зотов В. Новый инструментальный комплект Spartan-3E Starter Kit для практического освоения методов проектирования встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2006. № 10.
  8. Зотов В. Новый инструментальный комплект Spartan-3A Starter Kit для практического освоения методов проектирования и отладки цифровых устройств с аппаратной и программной реализацией операций, реализуемых на основе ПЛИС семейств FPGA фирмы Xilinx // Компоненты и технологии. 2007. № 9.
  9. Зотов В. Новый инструментальный комплект от компании Avnet на основе ПЛИС FPGA семейства Spartan-3A фирмы Xilinx // Компоненты и технологии. 2008. № 8.
  10. Зотов В. Инструментальный модуль компании Avnet для отладки проектов встраиваемых систем, разрабатываемых на базе нового семейства ПЛИС FPGA фирмы Xilinx Virtex-5 FXT // Компоненты и технологии. 2008. № 9.
  11. Зотов В. Особенности архитектуры нового поколения высокопроизводительных ПЛИС FPGA фирмы Xilinx серии Virtex-6 // Компоненты и технологии. 2009. № 8.
  12. Зотов В. Особенности архитектуры нового поколения ПЛИС FPGA фирмы Xilinx серии Spartan-6 // Компоненты и технологии. 2009. № 9.
  13. Зотов В. Новое семейство высокопроизводительных ПЛИС с архитектурой FPGA фирмы Xilinx Virtex-6 HXT // Компоненты и технологии. 2010. № 1.
  14. IEEE Standard VHDL Language Reference Manual. IEEE Std 1076-2002.
  15. Суворова Е. А., Шейнин Ю. Е. Проектирование цифровых систем на VHDL. СПб.: БХВ-Петер-бург, 2003.
  16. Сергиенко A. M. VHDL для проектирования вычислительных устройств. Киев: ЧП «Корней-чук», ООО «ТИД «ДС», 2003.
  17. Зотов В. Проектирование цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx, с использованием средств CORE Generator // Компоненты и технологии. 2006. № 12. 2007. № 1.
  18. Зотов В. Разработка компонентов устройств цифровой обработки сигналов, реализуемых на базе аппаратных модулей DSP48E в ПЛИС FPGA серии Virtex-5, с помощью «мастера» Architecture Wizard САПР серии Xilinx ISE // Компоненты и технологии. 2008. № 12. 2009. № 1, 4–7.
  19. Spartan-3 Generation FPGA User Guide. Xilinx, 2009.
  20. Spartan-3 FPGA Family: Complete Data Sheet. Xilinx, 2009.
  21. Spartan-3 Generation Configuration User Guide. Xilinx, 2009.
  22. Зотов В. Особенности архитектуры нового поколения ПЛИС FPGA фирмы Xilinx серии Spartan-6 // Компоненты и технологии. 2009. № 9.
  23. Spartan-6 Family Overview. Xilinx, 2009.
  24. Spartan-6 FPGA Configuration User Guide. Xilinx, 2009.
  25. Spartan-6 FPGA SelectIO Resources User Guide. Xilinx, 2009.
  26. Spartan-6 FPGA Clocking Resources User Guide. Xilinx, 2009.
  27. Spartan-6 FPGA Block RAM User Guide. Xilinx, 2009.
  28. Spartan-6 FPGA Configurable Logic Block User Guide. Xilinx, 2009.
  29. Spartan-6 FPGA GTP Transceivers User Guide. Xilinx, 2009.
  30. Spartan-6 FPGA Memory Controller User Guide. Xilinx, 2009.
  31. Spartan-6 FPGA DSP48A1 User Guide. Xilinx, 2009.
  32. Spartan-6 FPGA Data Sheet: DC and Switching Characteristics. Xilinx, 2009.

Все статьи цикла: