Разработка компонентов устройств ЦОС,
реализуемых на базе аппаратных модулей DSP48E в ПЛИС FPGA серии Virtex-5, с помощью «мастера» Architecture Wizard САПР серии Xilinx ISE
Продолжение. Начало в № 12 '2008
Валерий ЗОТОВ
Подготовка описаний аккумуляторов, реализуемых на базе аппаратных секций DSP48E в ПЛИС FPGA серии Virtex-5, с помощью «мастера» Architecture Wizard САПР серии Xilinx ISE
Для подготовки описаний аккумуляторов, предназначенных для последующей реализации на базе аппаратных секций ЦОС DSP48E
в ПЛИС FPGA серии Virtex-5, необходимо в списке, представленном во второй диалоговой панели «мастера» Architecture Wizard с заголовком Selection (рис. 6), выбрать строку Accumulator. Если процесс разработки аккумулятора инициирован в среде управляющей оболочки САПР серии Xilinx ISE Навигатора проекта (Project Navigator), то для формирования соответствующего описания нужно в диалоговой панели Select IP, приведенной на рис. 8 (см. КиТ № 12 '2008, стр. 35),
выбрать параметризированный модуль Accumulator v9.1L После выполнения указанных действий на экран выводится стартовая диалоговая панель «мастера» настройки параметров генерируемого аккумулятора, которая имеет заголовок Input/Output Data Setup — Accumulator. Данная панель предназначена для выбора источника входных данных и определения разрядности входной и выходной шины создаваемого элемента. Вид этой диалоговой панели представлен на рис. 11.
Источник входных данных разрабатываемого аккумулятора указывается в поле выбора Select input data. В выпадающем списке этого поля выбора представлено четыре возможных варианта: A:B, BCIN, C и PCIN. При использовании значения A:B, предлагаемого по умолчанию, входным портом формируемого аккумулятора является шина, образованная путем объединения входных шин данных A и B. Если в поле выбора Select input data указывается вариант BCIN, то в качестве источника входных данных используется одноименная шина данных, предназначенная для подключения выходной шины BCOUT предшествующей секции DSP48E при каскадном соединении аппаратных модулей ЦОС. В случае выбора варианта C функцию входного порта создаваемого аккумулятора выполняет дополнительная входная шина данных C арифметическо-логического блока аппаратной секции DSP48E. При выборе варианта PCIN источником входных данных является одноименная шина, предназначенная для подключения выходной шины PCOUT предыдущей секции DSP48E при каскадном наращивании аппаратных модулей ЦОС.
Для определения разрядности входной шины данных генерируемого аккумулятора нужно воспользоваться полем редактирования Width, которое расположено во встроенной панели Input Data (рис. 11). Диапазон возмож-
Рис. 11. Вид стартовой диалоговой панели «мастера» настройки параметров аккумулятора
ных значений этого параметра зависит от источника входных данных создаваемого аккумулятора, указанного в поле выбора Select input data. Если для параметра Select input data выбран вариант A:B или C, то разрядность входной шины данных формируемого аккумулятора можно выбрать в диапазоне от 1 до 48 бит. При этом по умолчанию предлагается значение, равное 48 бит. Требуемое значение разрядности входной шины данных может быть задано с помощью клавиатуры после активизации поля редактирования Width или с помощью кнопок, расположенных в левой части этого поля. В том случае, когда в качестве источника входных данных выбрана шина BCIN, параметр Width принимает фиксированное значение, составляющее 18 двоичных разрядов. Если в создаваемом аккумуляторе входным портом является шина PCIN, то разрядность этого порта также жестко зафиксирована и составляет 48 бит.
При выборе вариантов A:B и BCIN для параметра Select input data в состав интерфейса разрабатываемого аккумулятора может быть добавлена выходная шина данных BCOUT, предназначенная для подключения к входной шине BCIN следующей секции DSP48E при каскадном сопряжении аппаратных модулей ЦОС. Для этой цели следует воспользоваться индикатором состояния Bring the dedicated cascade out to next DSP slice (BCOUTpin), который представлен во встроенной панели Input Data (рис. 11). По умолчанию данный индикатор находится в установленном состоянии, разрешающем включение указанной выходной шины данных в состав интерфейса создаваемого элемента. Чтобы заблокиро-
вать использование выходной шины данных BCOUT, нужно установить индикатор Bring the dedicated cascade out to next DSP slice (BCOUT pin) в состояние «Выключено».
После выбора требуемых параметров входного порта формируемого аккумулятора следует указать разрядность выходной шины данных, используя для этого поле редактирования Width, которое находится во встроенной панели Output Data P (рис. 11). Данный параметр может принимать любые значения в диапазоне от 1 до 48 разрядов. По умолчанию предлагается значение, соответствующее максимально возможной разрядности выходной шины данных. Если создаваемый аккумулятор предполагается использовать в составе каскадной схемы соединения секций DSP48E, то в состав его интерфейса необходимо добавить выходную шину PCOUT, которая предназначена для подключения к входной шине PCIN следующего аппаратного модуля ЦОС. Включение указанной шины в состав генерируемого аккумулятора осуществляется с помощью индикатора состояния Bring the dedicated cascade result out to next DSP Slice in chain (PCOUT pin), который расположен во встроенной панели Output Data P.
Завершив процедуру определения значений параметров входного и выходного порта разрабатываемого элемента, нужно перейти к следующей диалоговой панели «мастера» настройки параметров аккумулятора, предназначенного для реализации на базе аппаратного модуля DSP48E в ПЛИС семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT и Virtex-5 FXT. Для этого следует нажать клавишу Далее (Next), представленную в нижней
части стартовой диалоговой панели Input/ Output Data Setup — Accumulator. Вторая диалоговая панель данного «мастера» имеет заголовок Operation Mode Setup — Accumulator и используется для выбора типа выполняемой операции. Вид этой диалоговой панели приведен на рис. 12.
Индикатор состояния Use a CARRYIN, расположенный во встроенной панели Carry option, определяет возможность использования сигнала входного переноса в создаваемом аккумуляторе. По умолчанию этот индикатор установлен в состояние «Включено», при котором в состав описания интерфейса аккумулятора добавляется порт сигнала входного переноса. Если индикатор Use a CARRYIN переводится в сброшенное состояние, то вход переноса аппаратного модуля DSP48E, на базе которого реализуется аккумулятор, подключается к общей шине.
Чтобы выбрать тип выполняемой операции в разрабатываемом аккумуляторе, следует воспользоваться тремя кнопками с зависимой фиксацией, которые расположены во встроенной панели Add/Subtract control (рис. 12). Для формирования описания аккумулятора, выполняющего операцию сложения входных данных со значением содержимого, нужно зафиксировать в нажатом положении кнопку Add. Данный вариант сумматора предлагается по умолчанию. При создании описания аккумулятора, осуществляющего операцию вычитания, в нажатом состоянии должна находиться кнопка Subtract. Если необходимо сгенерировать описание аккумулятора, в котором тип выполняемой операции изменяется динамически в про-
Рис. 12. Вид второй диалоговой панели «мастера» настройки параметров аккумулятора
Рис. 13. Вид третьей диалоговой панели «мастера» настройки параметров аккумулятора
Рис. 14. Вид третьей диалоговой панели «мастера» настройки параметров аккумулятора, предназначенного для реализации на базе аппаратного модуля 03Р48Б, при выборе одноступенчатой схемы буферизации входных данных
Рис. 15. Вид третьей диалоговой панели «мастера» настройки параметров аккумулятора, предназначенного для реализации на базе аппаратного модуля 03Р48Б, при выборе двухступенчатой схемы буферизации входных данных
цессе работы этого элемента, то нажать следует кнопку Dynamic control of the ALUMODE. При этом в состав интерфейса разрабатываемого элемента автоматически добавляется входная 4-разрядная шина ALUMODE, которая используется для управления выбором выполняемой функции.
Третья диалоговая панелт «мастера» настройки параметров аккумулятора, реализуемого на базе аппаратного модуля DSP48E в ПЛИС семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT и Virtex-5 FXT, имеет заголовок Pipelining and CE/RST Setup. Данная панель, вид которой изображен на рис. 13, предназначена для определения параметров конвейерной организации выполнения операций и выбора входов управления конвейерных регистров в формируемом аккумуляторе.
В представленной диалоговой панели, прежде всего, целесообразно указать расположение и количество конвейерных регистров, включаемых в состав структуры формируемого аккумулятора, используя для этого группы кнопок с зависимой фиксацией, расположенные во встроенной панели Pipelining option. Из всей совокупности кнопок, присутствующих в этой встроенной панели, в доступном состоянии находятся только те группы кнопок, которые соответствуют выбранному источнику входных данных (указанному в поле выбора Select input data в стартовой диалоговой панели Input/Output Data Setup — Accumulator) и типу выполняемой операции (заданному с помощью группы кнопок Add/ Subtract control, расположенных во второй
диалоговой панели Operation Mode Setup — Accumulator). Если в качестве входного порта формируемого аккумулятора используется шина, образованная путем объединения входных шин данных A и B, то с помощью групп кнопок с зависимой фиксацией A и B нужно указать количество конвейерных регистров для этих шин. При этом следует учитывать, что количество используемых буферных регистров в составе шин данных A и B в аккумуляторе должно быть одинаковым. Поэтому кнопки групп A и B переключаются одновременно. Если в нажатом состоянии зафиксированы кнопки 0, то конвейерные регистры на входах данных не устанавливаются. Чтобы добавить в состав генерируемого аккумулятора один конвейерный регистр на входной шине данных A:B, следует нажать кнопки 1. При этом диалоговая панель Pipelining option приобретает вид, представленный на рис. 14.
В этой панели становятся доступны индикаторы состояния, которые позволяют далее указать входы управления для буферного регистра, устанавливаемого на входной шине данных аккумулятора. В том случае, когда необходима двухступенчатая структура конвейерной обработки входных данных, нужно нажать кнопки 2. После этого диалоговая панель Pipelining option автоматически преобразуется к виду, показанному на рис. 15.
Когда входным портом генерируемого аккумулятора является шина данных BCIN, используемая при каскадном сопряжении аппаратных секций DSP48E, в доступном состо-
янии находится группа кнопок B. С помощью этих кнопок аналогичным образом выбирается требуемое число конвейерных регистров, устанавливаемых на входной шине аккумулятора.
Если в качестве источника входных данных формируемого аккумулятора выбирается дополнительная входная шина данных C ариф-метическо-логического блока аппаратного модуля ЦОС, то в доступное состояние автоматически переводится группа кнопок C. В отличие от шин данных A и B к шине C подключается только один входной регистр. Для того чтобы добавить в состав создаваемого аккумулятора данный регистр, нужно нажать кнопку 1.
При выборе конвейерных регистров следует обратить внимание на то, что выходной регистр аккумулятора включается в его состав автоматически.
Кроме входных и выходных шин конвейерные регистры могут также устанавливаться в цепях входного переноса и сигналов управления. Для включения буферного регистра в цепи сигнала входного переноса следует воспользоваться группой кнопок с зависимой фиксацией CARRYIN, которые также находятся во встроенной панели Pipelining option (рис. 14, 15). Управление включением буферного регистра на входе разрешения загрузки входных данных в аккумулятор осуществляется с помощью группы кнопок с зависимой фиксацией LOAD. При формировании описания аккумулятора, в котором тип выполняемой операции изменяется динамически
в процессе работы этого элемента, в его структуру можно добавить буферные регистры на входах шины управления выбором функции, выполняемой арифметическо-логическим блоком. Для этой цели нужно нажать кнопку 1, входящую в состав группы ALUMODE.
После определения состава конвейерных регистров, включаемых в структуру генерируемого аккумулятора, разработчику предоставляется возможность выборочного включения в состав интерфейса входов сброса и разрешения синхронизации указанных регистров. Активизация входов сброса в буферных регистрах осуществляется с помощью индикаторов состояния, представленных во встроенной панели Use a reset (рис. 14, 15). Чтобы добавить в состав интерфейса создаваемого аккумулятора входы сброса конвейерных регистров, устанавливаемых на входных шинах данных, следует перевести в состояние «Включено» индикаторы A, B и C соответственно. Для включения входа сброса выходного регистра в состав интерфейса аккумулятора необходимо установить во включенное состояние индикатор P. Если в разрабатываемом элементе необходимы вход сброса буферного регистра, устанавливаемого в цепи сигнала входного переноса, то нужно перевести в состояние «Включено» индикатор CARRYIN. Чтобы задействовать в создаваемом аккумуляторе входы сброса конвейерных регистров, устанавливаемых в цепях управления загрузкой входных данных и выбора типа выполняемой операции для арифметическо-логического блока, необходимо переключить в активное состояние индикаторы LOAD и ALUMODE соответственно.
Вместо раздельных входов сброса различных конвейерных регистров в формируемом аккумуляторе разработчику предоставляется возможность использования одного общего входа сброса. Для этой цели следует воспользоваться индикатором состояния Bring out one port for all resets, который также расположен во встроенной панели Use a reset. При установке этого индикатора в состояние «Включено», отмеченное маркером, в состав интерфейса генерируемого элемента добавляется вход единого сигнала сброса всех буферных регистров.
Для включения в состав интерфейса разрабатываемого аккумулятора входов сигналов разрешения синхронизации конвейерных регистров следует воспользоваться индикаторами состояния, находящимися во встроенной панели Use a clock-enable (рис. 14, 15). В составе этой встроенной панели в большинстве своем представлены те же индикаторы состояния, что и в панели Use a reset. Основное отличие заключается в том, что при использовании двухступенчатой схемы конвейерной обработки входных данных (рис. 15) в соответствующих буферных регистрах применяются раздельные входы разрешения синхронизации, которые обозначаются как A1, A2
и B1, B2. Чтобы задействовать общий сигнал разрешения синхронизации для всех буферных регистров, применяемых в составе генерируемого аккумулятора, нужно перевести индикатор Bring out one port for all clock-enables в состояние «Включено».
Завершается процесс определения параметров конфигурации создаваемого аккумулятора нажатием клавиши Далее (Next) в нижней части диалоговой панели с заголовком Operation Mode Setup—Accumulator. При этом на экран выводится заключительная информационная панель «мастера» настройки параметров аккумулятора, которая имеет заголовок Summary. Вид этой панели изображен на рис. 16.
Данная информационная панель включает в себя три встроенные панели. В первой из них, Feature Summary, отображаются сведения о типе формируемого элемента и разрядности входных и выходных шин данных. Во второй встроенной панели, Files To Be Generated, представлена информация о формируемых файлах и месте их расположения на диске. Третья встроенная панель, Block Attibutes, содержит список атрибутов используемого библиотечного примитива, представляющего аппаратный модуль ЦОС DSP48E кристаллов семейств Virtex-5 LX, Virtex-5 LXT, Virtex-5 SXT и Virtex-5 FXT.
Чтобы активизировать процесс автоматической генерации файлов описания аккумулятора, следует нажать кнопку «Готово» (Finish), расположенную в нижней части заключитель-
ной информационной панели «мастера» (рис. 16). Если запуск «мастера» Architecture Wizard осуществлялся в автономном режиме, то сформированные файлы нужно добавить в состав проекта разрабатываемого устройства ЦОС в САПР серии Xilinx ISE, выполнив стандартную процедуру включения модулей исходного описания, рассмотренную в [3, 4].
Примеры аккумуляторов, реализуемых на базе аппаратных модулей DSP48E в ПЛИС FPGA серии Virtex-5, сформированных с помощью «мастера»
Architecture Wizard
В качестве примеров в настоящем разделе приводятся описания аккумуляторов, реализуемых на базе аппаратных модулей DSP48E в ПЛИС FPGA семейств Virtex-5 SXT, Virtex-5 LXT и Virtex-5 FXT, для каждого типа выполняемой операции с различными источниками входных данных. Результат формирования описания аккумулятора с возможностью динамического выбора выполняемой операции демонстрирует VHDL-описание элемента accumulator_36_48. Этот аккумулятор предназначен для реализации на основе ПЛИС семейства Virtex-5 SXT. Разрядность входной шины данных элемента accumulator_36_48, которая представляет собой результат объединения входных шин данных A и B аппаратной секции ЦОС, составляет 36 бит. Выход-
ная шина данных сформированного аккумулятора имеет разрядность, равную 48 бит. В элементе accumulator_36_48 применяется двухступенчатая схема конвейерной обработки входных данных, а также задействованы буферные регистры в цепях управляющих сигналов. В состав интерфейса рассматриваемого аккумулятора включен вход сигнала переноса, а также входы сигналов сброса и разрешения синхронизации буферных регистров. Кроме того, в этом элементе предусмотрены шины данных, предоставляющие возможность каскадного соединения.
Текст описания аккумулятора accumulator_ 36_48 на языке VHDL, сформированного «мастером» Architecture Wizard, выглядит следующим образом:
BREG => 2,
B_INPUT => «DIRECT»,
CARRYINREG => 1,
CARRYINSELREG => 0,
CREG => 0,
MASK => x»3FFFFFFFFFFF»,
MREG => 1,
MULTCARRYINREG => 1,
OPMODEREG => 1,
PATTERN => x»000000000000»,
PREG => 1,
SEL_MASK => «MASK»,
SEL_PATTERN => «PATTERN», SEL_ROUNDING_MASK => «SEL_MASK»,
USE_MULT => «NONE»,
USE_PATTERN_DETECT => «NO_PATDET», USE_SIMD => «ONE48»
)
port map (
A(29)=>AB_IN(35),
A(28)=>AB_IN(35),
A(27)=>AB_IN(35),
A(26)=>AB_IN(35),
A(25)=>AB_IN(35),
A(24)=>AB_IN(35),
A(23)=>AB_IN(35),
A(22)=>AB_IN(35),
A(21)=>AB_IN(35),
A(20)=>AB_IN(35),
A(19)=>AB_IN(35),
A(18)=>AB_IN(35),
A(17 downto 0)=>AB_IN(35 downto 18),
ACIN(29 downto 0)=>GND_BUS_30(29 downto 0), ALUMODE(3 downto 0)=>ALUMODE_IN(3 downto 0), B(17 downto 0)=>AB_IN(17 downto 0),
BCIN(17 downto 0)=>GND_BUS_18(17 downto 0),
C(47 downto 0)=>GND_BUS_48(47 downto 0),
CARRYCASCIN=>GND_OPMODE,
CARRYIN=>CARRYIN_IN,
CARRYINSEL(2 downto 0)=>GND_BUS_3(2 downto 0), CEALUMODE=>CEALUMODE_IN,
CEA1=>CEA1_IN,
CEA2=>CEA2_IN,
CEB1=>CEB1_IN,
CEB2=>CEB2_IN,
CEC=>VCC_OPMODE,
CECARRYIN=>CECARRYIN_IN,
CECTRL=>CECTRL_IN,
CEM=>CEM_IN,
CEMULTCARRYIN=>CEMULTCARRYIN_IN,
CEP=>CEP_IN,
CLK=>CLK_IN,
MULTSIGNIN=>GND_OPMODE,
OPMODE(6)=>GND_OPMODE,
OPMODE(5)=>LOAD_IN,
OPMODE(4)=>GND_OPMODE,
OPMODE(3)=>GND_OPMODE,
OPMODE(2)=>GND_OPMODE,
OPMODE(1)=>VCC_OPMODE,
OPMODE(0)=>VCC_OPMODE,
PCIN(47 downto 0)=>GND_BUS_48(47 downto 0), RSTA=>RSTA_IN,
RSTALLCARRYIN=>RSTALLCARRYIN_IN,
RSTALUMODE=>RSTALUMODE_IN,
RSTB=>RSTB_IN,
RSTC=>GND_OPMODE,
RSTCTRL=>RSTCTRL_IN,
RSTM=>RSTM_IN,
RSTP=>RSTP_IN,
ACOUT=>open,
BCOUT(17 downto 0)=>BCOUT_OUT(17 downto 0), CARRYCASCOUT=>open,
CARRYOUT=>open,
MULTSIGNOUT=>open,
OVERFLOW=>open,
P(47 downto 0)=>P_OUT(47 downto 0),
PATTERNBDETECT=>open,
PATTERNDETECT=>open,
PCOUT(47 downto 0)=>PCOUT_OUT(47 downto 0), UNDERFLOW=>open );
end BEHAVIORAL;
В начале представленного описания присутствуют ссылки на используемые библиотеки и пакеты этих библиотек. Далее приведено объявление объекта, представляющего формируемый аккумулятор, и описание его интерфейса. Затем следует описание архитектуры элемента асситиЫот_36_48, основу которого образует примитив Б8Р48Е [5].
В описании интерфейса аккумулятора
ассити\аОт_36_48 используются следующие
условные обозначения входных и выходных
портов:
• АБ_Ш[35:0] — 36-разрядная входная шина данных;
• АШМООЕ_ВД[3:0] — 4-разрядная входная шина управления выбором функции, выполняемой аккумулятором;
• САККГВД_Ш — вход сигнала переноса;
• СЕАШМОБЕ_Ш — вход сигнала разрешения синхронизации для регистра управления, в который заносится код выполняемой функции;
• СЕА1_ВД, СЕА2_ВД — входы сигнала разрешения синхронизации для первого и второго конвейерных регистров, устанавливаемых на шине данных А;
• СЕБ1_Ш, СЕБ2_ВД — входы сигнала разрешения синхронизации для первого и второго конвейерных регистров, устанавливаемых на шине данных В;
• СЕСАККГВД_ВД — вход сигнала разрешения синхронизации для буферного регистра, устанавливаемого в цепи внешнего сигнала входного переноса;
• СЕСТКЬ_Ш — вход сигнала разрешения синхронизации буферных регистров, установленных в цепях управления загрузкой входных данных и входного переноса;
• СЕМи1ТСАККТВД_М — вход сигнала разрешения синхронизации для буферного регистра, устанавливаемого в цепи внутреннего сигнала входного переноса;
• СЕМ_Ш — вход сигнала разрешения синхронизации для конвейерного регистра, устанавливаемого на входе арифметическо-логического блока;
• СЕР_Ш — вход сигнала разрешения синхронизации для выходного регистра;
• СЬК_Ш — вход тактового сигнала;
• ЬОАБ_1Ы — вход сигнала управления загрузкой входных данных в аккумулятор;
• К8ТАЬЬСАККГВД_М — вход сигнала сброса буферных регистров, применяемых в цепях входного переноса;
• Я8ТАШМООЕ_Ш — вход сигнала сброса для регистра управления выбором выполняемой функции аккумулятора;
• Я8ТА_Ш, И8ТБ_Ш — входы сигналов сброса конвейерных регистров, устанавливаемых на входных шинах данных А и В соответственно;
• К8ТСТКЬ_Ш — вход сигнала сброса буферных регистров, установленных в цепях управления загрузкой входных данных и входного переноса;
• И8ТМ_1Ы — вход сигнала сброса конвейерного регистра, устанавливаемого на входе арифметическо-логического блока;
• Я8ТР_Ш — вход сигнала сброса выходного регистра;
• БСОиТ_ОИТ [17:0] — 18-разрядная выходная шина, предназначенная для каскадного соединения аккумуляторов;
--Command: xaw2vhdl-st D:\PRJ\accumulator_36_48.xaw D:\PRJ\ac-cumulator_36_48
--Design Name: accumulator_36_48 --Device: xc5vsx50t-ff1136-3
-- Module
-- Generated by Xilinx Architecture Wizard -- Written for synthesis tool: XST
library ieee;
use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; library UNISIM; use UNISIM.Vcomponents.ALL;
entity accumulator_36_48 is port (
AB_IN : in std_logic_vector (
ALUMODE_IN : in std_logic_vector
CARRYIN_IN : in std_logic;
CEALUMODE_IN : in std_logic;
CEA1_IN : in std_logic;
CEA2_IN : in std_logic;
CEB1_IN : in std_logic;
CEB2_IN : in std_logic;
CECARRYIN_IN : in std_logic;
CECTRL_IN : in std_logic;
CEMULTCARRYIN_IN : in std_logic;
CEM_IN : in std_logic;
CEP_IN : in std_logic;
CLK_IN : in std_logic;
LOAD_IN : in std_logic;
RSTALLCARRYIN_IN : in std_logic;
RSTALUMODE_IN : in std_logic;
RSTA_IN in std_logic;
RSTB_IN : in std_logic;
RSTCTRL_IN : in std_logic;
RSTM_IN : in std_logic;
RSTP_IN : in std_logic;
BCOUT_OUT : out std_logic_vector (
PCOUT_OUT : out std_logic_vector (
P_OUT ); end accumulator_36_48; : out std_logic_vector
architecture BEHAVIORAL of accumulator_36_48 is
: std_logic_vector (2 downto 0);
: std_logic_vector (17 downto 0);
: std_logic_vector (29 downto 0); : std_logic_vector (47 downto 0);
: std_logic;
: std_logic;
signal GND_BUS_3 signal GND_BUS_18 signal GND_BUS_30 signal GND_BUS_48 signal GND_OPMODE signal VCC_OPMODE begin
GND_BUS_3(2 downto 0) <= «000»;
GND_BUS_18(17 downto 0) <= «000000000000000000»; GND_BUS_30(29 downto 0) <= «000000000000000000000000000000»; GND_BUS_48(47 downto 0) <= «000000000000000000000000000000000000000000000000»; GND_OPMODE <= '0';
VCC_OPMODE <= '1';
DSP48E_INST : DSP48E generic map(
ACASCREG => 1,
ALUMODEREG => 1,
AREG => 2,
AUTORESET_PATTERN_DETECT => FALSE, AUTORESET_PATTERN_DETECT_OPTINV => «MATCH», A_INPUT => «DIRECT»,
BCASCREG => 1,
# PCOUT_OUT — 48-разрядная выходная шина данных, используемая при каскадном соединении аккумуляторов;
# P_OUT — выходная 48-разрядная шина данных.
Кроме представленного VHDL-описания, «мастер» Architecture Wizard автоматически создает файл с расширением ucf, название которого состоит из идентификатора генерируемого элемента и суффикса “_arwz”. Этот файл содержит последовательность выражений, которые определяют требуемые значения всех необходимых атрибутов библиотечного примитива DSP48E. Все эти выражения нужно включить в состав файла временных и топологических ограничений проекта разрабатываемого устройства ЦОС в САПР серии Xilinx ISE. Для аккумулятора accumulator_36_48 содержимое соответствующего файла с расширением ucf выглядит следующим образом:
# Generated by Xilinx Architecture Wizard
# --- UCF Template Only ---
# Cut and paste these attributes into the project's UCF file, if desired
INST DSP48E_INST ACASCREG = 1;
INST DSP48E_INST ALUMODEREG = 1;
INST DSP48E_INST AREG = 2;
INST DSP48E_INST AUT ORESET_PATTERN_DETECT = FALSE;
INST DSP48E_INST AUTORESET_PATTERN_DETECT_OPTINV =
MATCH;
INST DSP48E_INST A_INPUT = DIRECT;
INST DSP48E_INST BCASCREG = 1;
INST DSP48E_INST BREG = 2;
INST DSP48E_INST B_INPUT = DIRECT;
INST DSP48E_INST CARRYINREG = 1;
INST DSP48E_INST CARRYINSELREG = 0;
INST DSP48E_INST CREG = 0;
INST DSP48E_INST MASK = 3FFFFFFFFFFF;
INST DSP48E_INST MREG = 1;
INST DSP48E_INST MULTCARRYINREG = 1;
INST DSP48E_INST OPMODEREG = 1;
INST DSP48E_INST PATTERN = 000000000000;
INST DSP48E_INST PREG = 1;
INST DSP48E_INST SEL_MASK = MASK;
INST DSP48E_INST SEL_PATTERN = PATTERN;
INST DSP48E_INST SEL_ROUNDING_MASK = SEL_MASK;
INST DSP48E_INST USE_MULT = NONE;
INST DSP48E_INST USE_PATTERN_DETECT = NO_PATDET;
INST DSP48E_INST USE_SIMD = ONE48;
Примером описания аккумулятора с функцией накопления значений входных данных, сгенерированного с помощью «мастера» Architecture Wizard, является VHDL-описание элемента accumulator_add_32_40. Этот аккумулятор разработан, в первую очередь, для применения в составе проектов устройств ЦОС, реализуемых на базе кристаллов FPGA семейства Virtex-5 LXT. Входной 32-разрядный информационный порт элемента accu-mulator_add_32_40 выполнен на базе дополнительной входной шины данных C ариф-метическо-логического блока аппаратного модуля DSP48E. Разрядность выходной шины данных этого элемента составляет 40 бит. Сформированный текст VHDL-описания аккумулятора accumulator_add_32_40 имеет следующий вид:
--Command: xaw2vhdl-st D:\PRJ\accumulator_add_32_40.xaw
D:\PRJ\accumulator_add_32_40
--Design Name: accumulator_add_32_40
--Device: xc5vlx50t-ff1136-3
-- Module accumulator_add_32 _40
-- Generated by Xilinx Architecture Wizard
-- Written for synthesis tool: XST
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
entity accumulator_add_32_40 is
port (
CARRYIN_IN : in std_logic
CECARRYIN_IN : in std_logic
CECTRL_IN : in std_logic
CEC_IN : in std_logic
CEMULTCARRYIN_IN : in std_logic
CEM_IN : in std_logic
CEP_IN : in std_logic
CLK_IN : in std_logic
C_IN : in std_logic_vector (31 downto 0);
LOAD_IN : in std_logic
RSTALLCARRYIN_IN in std_logic
RSTCTRL_IN : in std_logic
RSTC_IN : in std_logic
RSTM_IN : in std_logic
RSTP_IN : in std_logic
PCOUT_OUT : out std_logic_vector (47 downto 0);
P_OUT ). : out std_logic_vector (39 downto 0)
)> end accumulator_add_32_40;
architecture BEHAVIORAL of accumulator_add_32_40 is
signal GND_ALUMODE : std_logic;
signal GND_BUS_3 std_logic_vector (2 downto 0);
signal GND_BUS_18 std_logic_vector (17 downto 0);
signal GND_BUS_30 : std_logic_vector (29 downto 0);
signal GND_BUS_48 : std_logic_vector (47 downto 0);
signal GND_OPMODE : std_logic;
signal P_float : std_logic_vector (7 downto 0);
signal VCC_OPMODE : std_logic;
begin
GND_ALUMODE <= '0';
GND_BUS_3(2 downto 0) < = «000»;
GND_BUS_18(17 downto 0) <= «000000000000000000»;
GND_BUS_30(29 downto 0) < = «000000000000000000000000000000»;
GND_BUS_48(47 downto 0) <=
«000000000000000000000000000000000000000000000000»;
GND_OPMODE <= '0';
VCC_OPMODE <= '1';
DSP48E_INST : DSP48E
generic map(
ACASCREG => 1,
ALUMODEREG => 0,
AREG => 0,
AUTORESET_PATTERN_DETECT => FALSE,
AUTORESET_PATTERN_DETECT_OPTINV => «MATCH»,
A_INPUT => «DIRECT»,
BCASCREG => 1,
BREG => 0,
B_INPUT => «DIRECT»,
CARRYINREG => 1,
CARRYINSELREG => 0,
CREG => 1,
MASK => x»3FFFFFFFFFFF»,
MREG => 1,
MULTCARRYINREG = > 1,
OPMODEREG => 1,
PATTERN => x»000000000000»,
PREG => 1,
SEL_MASK => «MASK»,
SEL_PATTERN => «PATTERN»,
SEL_ROUNDING_MASK => «SEL_MASK»,
USE_MULT => «NONE»,
USE_PATTERN_DETECT => «NO_PATDET»,
USE_SIMD => «ONE48»
port map (
A(29 downto 0)=>GND_BUS_30(29 downto 0),
ACIN(29 downto 0)=>GND_BUS_30(29 downto 0),
ALUMODE(3)=>GND_ALUMODE,
ALUMODE(2)=>GND_ALUMODE,
ALUMODE(1)=>GND_ALUMODE,
ALUMODE(0)=>GND_ALUMODE,
B(17 downto 0)=>GND_BUS_18(17 downto 0),
BCIN(17 downto 0)=>GND_BUS_18(17 downto 0),
C(47)=>C_IN(31),
C(46)=>C_IN(31),
C(45)=>C_IN(31),
C(44)=>C_IN(31),
C(43)=>C_IN(31),
C(42)=>C_IN(31),
C(41)=>C_IN(31),
C(40)=>C_IN(31),
C(39)=>C_IN(31),
C(38)=>C_IN(31),
C(37)=>C_IN(31),
C(36)=>C_IN(31),
C(35)=>C_IN(31),
C(34)=>C_IN(31),
C(33)=>C_IN(31),
C(32)=>C_IN(31),
C(31 downto 0)=>C_IN(31 downto 0), CARRYCASCIN=>GND_ALUMODE, CARRYIN=>CARRYIN_IN,
CARRYINSEL(2 downto 0)=>GND_BUS_3(2 downto 0),
CEALUMODE=>VCC_OPMODE,
CEA1=>VCC_OPMODE,
CEA2=>VCC_OPMODE,
CEB1=>VCC_OPMODE,
CEB2=>VCC_OPMODE,
CEC=>CEC_IN,
CECARRYIN=>CECARRYIN_IN,
CECTRL=>CECTRL_IN,
CEM=>CEM_IN,
CEMULTCARRYIN=>CEMULTCARRYIN_IN,
CEP=>CEP_IN,
CLK=>CLK_IN,
MULTSIGNIN=>GND_ALUMODE,
OPMODE(6)=>GND_OPMODE,
OPMODE(5)=>VCC_OPMODE,
OPMODE(4)=>VCC_OPMODE,
OPMODE(3)=>GND_OPMODE,
OPMODE(2)=>GND_OPMODE,
OPMODE(1)=>LOAD_IN,
OPMODE(0)=>GND_OPMODE,
PCIN(47 downto 0)=>GND_BUS_48(47 downto 0),
RSTA=>GND_ALUMODE,
RSTALLCARRYIN=>RSTALLCARRYIN_IN,
RSTALUMODE=>GND_ALUMODE,
RSTB=>GND_ALUMODE,
RSTC=>RSTC_IN,
RSTCTRL=>RSTCTRL_IN,
RSTM=>RSTM_IN,
RSTP=>RSTP_IN,
ACOUT=>open,
BCOUT=>open,
CARRYCASCOUT=>open,
CARRYOUT=>open,
MULTSIGNOUT=>open,
OVERFLOW=>open,
P(47 downto 40)=>P_float(7 downto 0),
P(39 downto 0)=>P_OUT(39 downto 0),
PATTERNBDETECT=>open,
PATTERNDETECT=>open,
PCOUT(47 downto 0)=>PCOUT_OUT(47 downto 0), UNDERFLOW=>open );
end BEHAVIORAL;
В структуру аккумулятора асситиЫот_аМ_ 32_40 включены буферные регистры, установленные в цепях входных и выходных информационных шин, а также в цепях сигналов входного переноса и управления загрузкой входных данных. В этих регистрах задействованы входы сигналов сброса и разрешения синхронизации. Эти входы включены в состав интерфейса сформированного аккумулятора в форме соответствующих портов сигналов управления.
Большинство условных обозначений интерфейсных портов элемента асситиЫот_ айй_32_40 совпадает с идентификаторами входных и выходных портов, используемых в описании аккумулятора асситиЫот_36_48, рассмотренными ранее. Кроме того, в составе интерфейса элемента ассити\аШ_айй_32_40 присутствуют следующие входные порты:
• СЕС_ВД — вход сигнала разрешения синхронизации для буферного регистра, установленного на входной шине данных;
• С_ВД[31:0] — 32-разрядная входная шина данных аккумулятора;
• И8ТС_1Ы — вход сигнала сброса буферного регистра, подключенного к входной шине данных.
При использовании аккумулятора accu-mulator_add_32_40в качестве одного из компонентов в составе разрабатываемого устройства ЦОС в файл временных и топологических ограничений проекта САПР серии Xilinx ISE необходимо включить следующую совокупность выражений:
# Generated by Xilinx Architecture Wizard
# --- UCF Template Only ---
# Cut and paste these attributes into the project's UCF file, if desired INST DSP48E_INST ACASCREG = 1;
INST DSP48E_INST ALUMODEREG = 0;
INST DSP48E_INST AREG = 0;
INST DSP48E_INST AUTORESET_PATTERN_DETECT = FALSE; INST DSP48E_INST AUTORESET_PATTERN_DETECT_OPTINV = MATCH;
INST DSP48E_INST A_INPUT = DIRECT;
INST DSP48E_INST BCASCREG = 1;
INST DSP48E_INST BREG = 0;
INST DSP48E_INST B_INPUT = DIRECT;
INST DSP48E_INST CARRYINREG = 1;
INST DSP48E_INST CARRYINSELREG = 0;
INST DSP48E_INST CREG = 1;
INST DSP48E_INST MASK = 3FFFFFFFFFFF;
INST DSP48E_INST MREG = 1;
INST DSP48E_INST MULTCARRYINREG = 1;
INST DSP48E_INST OPMODEREG = 1;
INST DSP48E_INST PATTERN = 000000000000;
INST DSP48E_INST PREG = 1;
INST DSP48E_INST SEL_MASK = MASK;
INST DSP48E_INST SEL_PATTERN = PATTERN;
INST DSP48E_INST SEL_ROUNDING_MASK = SEL_MASK;
INST DSP48E_INST USE_MULT = NONE;
INST DSP48E_INST USE_PATTERN_DETECT = NO_PATDET; INST DSP48E_INST USE_SIMD = ONE48;
В качестве примера аккумулятора, выполняющего операцию вычитания, далее приводится описание элемента accumulator_sub_48_48, реализуемого на основе ПЛИС семейства Virtex-5 FXT. Сформированный аккумулятор предназначен для обработки 48-разрядных значений входных данных, которые поступают на шину PCIN аппаратного модуля ЦОС. Элемент accumulator_sub_48_48 целесообразно использовать в составе каскадного соединения аппаратных секций DSP48E:
--Command: xaw2vhdl-st D:\Xilinx\10.1\ISE\accumulator_sub_48_48.xaw
D:\Xilinx\10.1\ISE\accumulator_sub_48_48
--Design Name: accumulator_sub_48_48
--Device: xc5vfx70t-ff1136-3
-- Module accumulator_sub_48 _48
-- Generated by Xilinx Architecture Wizard
-- Written for synthesis tool: XST
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
entity accumulator_sub_48_48 is
port (
CARRYIN_IN in std_logic
CECARRYIN_IN in std_logic
CECTRL_IN in std_logic
CEMULTCARRYIN_IN in std_logic;
CEM_IN in std_logic
CEP_IN in std_logic
CLK_IN in std_logic
LOAD_IN in std_logic
PCIN_IN in std_logic_vector (47 downto 0);
RSTALLCARRYIN_IN in std_logic
RSTCTRL_IN in std_logic
RSTM_IN in std_logic
RSTP_IN in std_logic
PCOUT_OUT out std_logic_vector (47 downto 0);
P_OUT out std_logic_vector (47 downto 0)
); ); end accumulator_sub_48_48;
architecture BEHAVIORAL of accumulator_sub_48_48 is
signal GND_ALUMODE std_logic;
signal GND_BUS_3 : std_logic_vector (2 downto 0);
signal GND_BUS_18 : std_logic_vector (17 downto 0);
signal GND_BUS_30 : std_logic_vector (29 downto 0);
signal GND_BUS_48 : std_logic_vector (47 downto 0);
signal GND_OPMODE : std_logic;
signal VCC_ALUMODE : std_logic;
signal VCC_OPMODE : std_logic;
begin
GND_ALUMODE <= 'О';
GND_BUS_3(2 downto О) <= «ООО»;
GND_BUS_18(17 downto 0) <= «000000000000000000»; GND_BUS_30(29 downto 0) <= «000000000000000000000000000000»; GND_BUS_48(47 downto О) <= «ОООООООООООООООООООООООООООООООООООООООООООООООО»; GND_OPMODE <= 'О';
VCC_ALUMODE <= '1';
VCC_OPMODE <= '1';
DSP48E_INST : DSP48E generic map(
ACASCREG => 1,
ALUMODEREG => О,
AREG => О,
AUTORESET_PATTERN_DETECT => FALSE, AUTORESET_PATTERN_DETECT_OPTINV => «MATCH», A_INPUT => «DIRECT»,
BCASCREG => 1,
BREG => О,
B_INPUT => «DIRECT»,
CARRYINREG => 1,
CARRYINSELREG => О,
CREG => О,
MASK => x»3FFFFFFFFFFF»,
MREG => 1,
MULTCARRYINREG => 1,
OPMODEREG => 1,
PATTERN => x»000000000000»,
PREG => 1,
SEL_MASK => «MASK»,
SEL_PATTERN => «PATTERN»,
SEL_ROUNDING_MASK => «SEL_MASK»,
USE_MULT => «NONE»,
USE_PATTERN_DETECT => «NO_PATDET»,
USE_SIMD => «ONE48»
)
port map (
A(29 downto 0)=>GND_BUS_30(29 downto 0),
ACIN(29 downto 0)=>GND_BUS_30(29 downto 0),
ALUMODE(3)=>GND_ALUMODE,
ALUMODE(2)=>GND_ALUMODE,
ALUMODE(1)=>VCC_ALUMODE,
ALUMODE(0)=>VCC_ALUMODE,
B(17 downto 0)=>GND_BUS_18(17 downto 0),
BCIN(17 downto 0)=>GND_BUS_18(17 downto 0),
C(47 downto 0)=>GND_BUS_48(47 downto 0),
CARRYCASCIN=>GND_ALUMODE,
CARRYIN=>CARRYIN_IN,
CARRYINSEL(2 downto 0)=>GND_BUS_3(2 downto 0),
CEALUMODE=>VCC_ALUMODE,
CEA1=>VCC_ALUMODE,
CEA2=>VCC_ALUMODE,
CEB1=>VCC_ALUMODE,
CEB2=>VCC_ALUMODE,
CEC=>VCC_ALUMODE,
CECARRYIN=>CECARRYIN_IN,
CECTRL=>CECTRL_IN,
CEM=>CEM_IN,
CEMULTCARRYIN=>CEMULTCARRYIN_IN,
CEP=>CEP_IN,
CLK=>CLK_IN,
MULTSIGNIN=>GND_ALUMODE,
OPMODE(6)=>GND_OPMODE,
OPMODE(5)=>GND_OPMODE,
OPMODE(4)=>LOAD_IN,
OPMODE(3)=>GND_OPMODE,
OPMODE(2)=>GND_OPMODE,
OPMODE(1)=>VCC_OPMODE,
OPMODE(0)=>GND_OPMODE,
PCIN(47 downto 0)=>PCIN_IN(47 downto 0),
RSTA=>GND_ALUMODE,
RSTALLCARRYIN=>RSTALLCARRYIN_IN,
RSTALUMODE=>GND_ALUMODE,
RSTB=>GND_ALUMODE,
RSTC=>GND_ALUMODE,
RSTCTRL=>RSTCTRL_IN,
RSTM=>RSTM_IN,
RSTP=>RSTP_IN,
ACOUT=>open,
BCOUT=>open,
CARRYCASCOUT=>open,
CARRYOUT=>open,
MULTSIGNOUT=>open,
OVERFLOW=>open,
P(47 downto 0)=>P_OUT(47 downto 0), PATTERNBDETECT=>open,
PATTERNDETECT=>open,
PCOUT(47 downto 0)=>PCOUT_OUT(47 downto 0),
UNDERFLOW=>open
);
end BEHAVIORAL;
В аккумуляторе асситиЫот_$иЪ_48_48 предусмотрен вход сигнала переноса. В этом элементе задействованы буферные регистры, установленные в цепях управления загрузкой входных данных и входного переноса.
Система условных обозначений входных и выходных портов элемента асситиЫот_ $иЪ_48_48 включает в себя идентификаторы интерфейсных цепей, представленные в описании аккумулятора асситиЫот_36_48, за исключением входной шины данных. Для обозначения этой шины используется идентификатор РСШ_ВД[47:0].
При использовании данного аккумулятора в составе описания разрабатываемого устройства ЦОС следует добавить в состав файла временных и топологических ограничений проекта следующие выражения:
# Generated by Xilinx Architecture Wizard
# --- UCF Template Only ---
# Cut and paste these attributes into the project's UCF file, if desired INST DSP48E_INST ACASCREG = 1;
INST DSP48E_INST ALUMODEREG = 0;
INST DSP48E_INST AREG = 0;
INST DSP48E_INST AUTORESET_PATTERN_DETECT = FALSE; INST DSP48E_INST AUTORESET_PATTERN_DETECT_OPTINV = MATCH;
INST DSP48E_INST A_INPUT = DIRECT;
INST DSP48E_INST BCASCREG = 1;
INST DSP48E_INST BREG = 0;
INST DSP48E_INST B_INPUT = DIRECT;
INST DSP48E_INST CARRYINREG = 1;
INST DSP48E_INST CARRYINSELREG = 0;
INST DSP48E_INST CREG = 0;
INST DSP48E_INST MASK = 3FFFFFFFFFFF;
INST DSP48E_INST MREG = 1;
INST DSP48E_INST MULTCARRYINREG = 1;
INST DSP48E_INST OPMODEREG = 1;
INST DSP48E_INST PATTERN = 000000000000;
INST DSP48E_INST PREG = 1;
INST DSP48E_INST SEL_MASK = MASK;
INST DSP48E_INST SEL_PATTERN = PATTERN;
INST DSP48E_INST SEL_ROUNDING_MASK = SEL_MASK;
INST DSP48E_INST USE_MULT = NONE;
INST DSP48E_INST USE_PATTERN_DETECT = NO_PATDET; INST DSP48E_INST USE_SIMD = ONE48;
Продолжение следует Литература
1. Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx / Справочное пособие. М.: Горячая линия — Телеком, 2004.
2. Зотов В. Инструментальный модуль компании Avnet для отладки проектов встраиваемых систем, разрабатываемых на базе нового семейства ПЛИС FPGA фирмы Xilinx Virtex-5 FXT // Компоненты и технологии. 2008. № 9.
3. Зотов В. Ю. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. М.: Горячая линия — Телеком, 2003.
4. Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС фирмы Xilinx. М.: Горячая линия — Телеком, 2006.
5. Virtex-5 FPGA XtremeDSP Design Considerations. User Guide.