Научная статья на тему 'Разработка базовых компонентов цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx®, с помощью генератора параметризированных модулей core Generator (часть 5)'

Разработка базовых компонентов цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx®, с помощью генератора параметризированных модулей core Generator (часть 5) Текст научной статьи по специальности «Электротехника, электронная техника, информационные технологии»

CC BY
112
40
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по электротехнике, электронной технике, информационным технологиям, автор научной работы — Зотов Валерий

Для создания элементов, выполняющих поразрядные логические операции над входными данными предусмотрено три ядра.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по электротехнике, электронной технике, информационным технологиям , автор научной работы — Зотов Валерий

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Разработка базовых компонентов цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx®, с помощью генератора параметризированных модулей core Generator (часть 5)»

Продолжение. Начало в № 2'2007

Валерий ЗОТОВ

[email protected]

Разработка базовых компонентов цифровых устройств, реализуемых на базе ПЛИС FPGA фирмы Xilinx®,

с помощью генератора параметризированных модулей CORE Generator

Формирование элементов, выполняющих поразрядные логические операции, с помощью генератора параметризированных модулей CORE Generator

Для создания элементов, выполняющих поразрядные логические операции над входными данными, представленными в параллельном двоичном коде, в составе генератора параметризированных модулей CORE Generator предусмотрено три ядра, которые входят в группу базовых компонентов цифровых устройств Basic Elements: Bit Bus Gate, Bit Gate и Bus Gate. Все элементы, которые создаются с помощью указанных ядер, могут выполнять одну из следующих поразрядных операций: «Логическое И», «Логическое И-НЕ», «Логическое ИЛИ», «Логическое ИЛИ-НЕ», «Исключающее ИЛИ», «Исключающее ИЛИ-НЕ». Параметризированный модуль Bit Bus Gate предназначен для генерации элементов, которые осуществляют побитовые логические операции над словом данных, состоящим из заданного пользова-

телем количества двоичных разрядов, и некоторым (контрольным) битом, поступающими на входы этого элемента. Обобщенная структура элементов, формируемых на основе ядра Bit Bus Gate, приведена на рис. 37.

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

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

Все параметризированные модули, перечисленные выше в настоящем разделе, позволяют создавать элементы, осуществляю-

Рис. 38. Структура выполняющих поразрядные логические операции элементов, формируемых с помощью параметризированного модуля Bit Gate

щие поразрядные логические операции, которые могут быть реализованы в ПЛИС следующих семейств: Spartan-II; Spartan-IIE; Spartan-3; Spartan-3E; Spartan-3A; Virtex; QPRO Virtex Rad-Hard; QPRO Virtex Hi-Rel; Virtex-E; QPRO Virtex-E Military; Virtex-II; Virtex-II PRO и Virtex-4.

Отличительными особенностями элементов, формируемых на основе параметризи-

Рис. 37. Структура выполняющих поразрядные логические операции элементов, создаваемых на основе параметризированного модуля Bit Bus Gate

Рис. 39. Структура выполняющих поразрядные логические операции элементов, создаваемых на основе параметризированного модуля Bus Gate

Рис. 40. Страница Parameters основной диалоговой панели «мастера» настройки параметров ядра Bit Bus Gate

Рис. 41. Страница Parameters основной диалоговой панели «мастера» настройки параметров ядра Bit Gate

рованных модулей Bit Bus Gate, Bit Gate и Bus Gate, являются:

• возможность выбора разрядности входных портов (данных) в диапазоне от 2 до 256 разрядов;

• поддержка выполнения всех поразрядных логических операций;

• возможность маскирования (выборочного поразрядного инвертирования) данных, которые представлены на входных шинах;

• возможность использования в генерируемых элементах комбинационных (обычных) и/или регистровых выходов;

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

• поддержка различных способов представления формируемых элементов, в том числе в виде макросов с относительным размещением RPM.

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

Для параметризированных модулей Bit Bus Gate и Bit Gate «мастер» настройки включает в себя две диалоговые панели, одна из которых является основной, а вторая — дополнительной. Определение главных параметров создаваемого элемента осуществляется с помощью страницы Parameters основной диалоговой панели, вид которой показан на

рис. 40 и 41 для параметризированных модулей Bit Bus Gate и Bit Gate соответственно.

В данных диалоговых панелях, прежде всего в поле редактирования Component Name, указывается идентификатор формируемого вида элемента, выполняющего заданные поразрядные логические операции. Затем определяется разрядность входной шины данных с помощью поля редактирования Input Bus Width. Информация о допустимом диапазоне значений данного параметра приводится в строке Valid Range. Тип логической операции, которую должен выполнять генерируемый элемент, выбирается с помощью группы кнопок с зависимой фиксацией, которые расположены во встроенной панели Gate Type (рис. 40, 41). При нажатой кнопке AND будет создан элемент, выполняющий побитовую операцию «Логическое И» над всеми разрядами слова данных, которое представлено на соответствующей входной шине. Для того чтобы создаваемый элемент осуществлял поразрядную операцию «Логическое И-НЕ», нужно зафиксировать в нажатом состоянии кнопку NAND. Если необходимо сформировать элемент, выполняющий поразрядную операцию «Логическое ИЛИ», то в нажатое состояние следует установить кнопку OR. Когда требуется элемент, осуществляющий поразрядную операцию «Логическое ИЛИ-НЕ», в нажатом состоянии должна находиться кнопка NOR. Генерация элементов, выполняющих побитовые операции «Исключающее ИЛИ» и «Исключающее ИЛИ-НЕ», производится при нажатой кнопке XOR и XNOR соответственно.

Для выборочного инвертирования отдельных разрядов входного слова данных используется соответствующая «маска», кодовое значение которой указывается в поле редактиро-

вания Input Inversion Mask, расположенном во встроенной панели Input Inversion (рис. 40,41). Код «маски» должен быть представлен в виде шестнадцатеричного значения, количество разрядов которого должно соответствовать разрядности входной шины данных. При этом в начале указывается старший значащий бит MSB. Единичное значение в каком-либо двоичном разряде значения «маски» соответствует инверсии этого же разряда входного слова данных.

Выбор типов выходов в создаваемом элементе осуществляется с помощью группы кнопок с зависимой фиксацией Output Options (рис. 40, 41). Для формирования элемента, выполняющего поразрядные логические операции, только с обычным (комбинационным) выходом нужно зафиксировать в нажатом состоянии кнопку Non Registered. Если в состав генерируемого элемента необходимо включить выходной регистр, то следует переключить в нажатое состояние кнопку Registered. Чтобы сформировать элемент с обычным и регистровым выходами, нужно установить в нажатое состояние кнопку Both. При выборе варианта с использованием выходного регистра становится доступной клавиша Register Options..., которая позволяет открыть дополнительную диалоговую панель «мастера» настройки. Эта диалоговая панель имеет то же назначение и тот же вид (рис. 7, см. КиТ № 2, стр. 63), что и вспомогательная панель параметров ядра двоичного дешифратора, которое было рассмотрено в первой части данной статьи. Выбор режимов и соответствующих входов управления (разрешения сигнала синхронизации, сброса, установки или инициализации) в выходном регистре осуществляется так же, как и в выходном регистре двоичного дешифратора.

end component;

-- FPGA Express Black Box declaration attribute fpga_dont_touch: string;

attribute fpga_dont_touch of bit_and_bus_32: component is «true»;

-- Synplicity black box declaration attribute syn_black_box : boolean;

attribute syn_black_box of bit_and_bus_32: component is true;

Параметр Create RPM позволяет изменить форму представления генерируемого элемента для последующей реализации. Чтобы создаваемый элемент был представлен в виде макроса с относительным размещением, нужно установить одноименный индикатор, расположенный во встроенной панели Layout (рис. 40, 41), в состояние «включено». Такое представление обеспечивает достижение максимальной производительности формируемого элемента.

В описаниях элементов, создаваемых на основе параметризированных модулей Bit Bus Gate и Bit Gate, используется следующая система условных обозначений интерфейсных портов:

• I[N:0] — входная шина данных с разрядностью N+1;

• CTRL — вход контрольного бита данных (присутствует только в элементах, формируемых с помощью ядра Bit Bus Gate);

• O[N:0] — комбинационные выходы элементов, генерируемых с помощью модуля Bit Bus Gate;

• Q[N:0] — регистровые выходы элементов, построенных на базе ядра Bit Bus Gate;

• O — комбинационный выход элементов, формируемых с помощью модуля Bit Gate;

• Q — регистровый выход элементов, генерируемых на основе ядра Bit Gate;

• CLK — вход тактового сигнала выходного регистра;

• CE — вход сигнала разрешения синхронизации выходного регистра;

• ACLR — вход сигнала асинхронного сброса выходного регистра;

• ASET — вход сигнала асинхронной установки выходного регистра;

• SCLR — вход сигнала синхронного сброса выходного регистра;

• SSET — вход сигнала синхронной установки выходного регистра;

• AINIT — вход сигнала асинхронной инициализации выходного регистра;

• SINIT — вход сигнала синхронной инициализации выходного регистра.

В качестве примера, демонстрирующего применение параметризированного модуля Bit Bus Gate, далее приводится описание элемента bit_and_bus_32, выполняющего побитовую операцию «Логическое И» над тридцатидвухразрядным словом данных и контрольным битом. В составе сформированного элемента используется выходной регистр с входами разрешения синхронизации, синхронного и асинхронного сброса, синхронной и асинхронной установки. Кроме регистрового выхода в элементе bit_and_bus_32 задействован и комбинационный выход:

CTRL: IN std_logic;

O: OUT std_logic_VECTOR(31 downto 0);

CLK: IN std_logic;

Q: OUT std_logic_VECTOR(31 downto 0);

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic

);

END bit_and_bus_32;

ARCHITECTURE bit_and_bus_32_a OF bit_and_bus_32 IS -- synopsys translate_off component wrapped_bit_and_bus_32 port (

I: IN std_logic_VECTOR(31 downto 0);

CTRL: IN std_logic;

O: OUT std_logic_VECTOR(31 downto 0);

CLK: IN std_logic;

Q: OUT std_logic_VECTOR(31 downto 0);

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic

);

end component;

Configuration specification

for all : wrapped_bit_and_bus_32 use entity

XilinxCoreLib.C_GATE_BIT_BUS_V7_0(behavioral) generic map(

c_has_aset => 1, c_gate_type => 0, c_sync_priority => 1, c_has_sclr => 1, c_width => 32, c_enable_rlocs => 0,

c_ainit_val => «00000000000000000000000000000000», c_has_ce => 1, c_has_aclr => 1, c_sync_enable => 1,

c_sinit_val => «00000000000000000000000000000000»,

c_has_ainit => 0,

c_has_sset => 1,

c_has_sinit => 0,

c_has_q => 1,

c_has_o => 1,

c_input_inv_mask => «0000000000000000000000000000000^»

);

-- synopsys translate_on BEGIN

-- synopsys translate_off U0 : wrapped_bit_and_bus_32 port map (

I => I,

CTRL => CTRL,

O => O,

CLK => CLK,

Q => Q,

CE => CE,

ACLR => ACLR,

ASET => ASET,

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

SCLR => SCLR,

SSET => SSET );

-- synopsys translate_on END bit_and_bus_32_a;

При использовании сгенерированного элемента bit_and_bus_32 в качестве компонента в составе VHDL-описания проектируемого устройства нужно поместить в раздел декларации определения архитектуры объекта, представляющего разрабатываемое устройство, следующую последовательность выражений:

Для описания экземпляров компонентов bit_and_bus_32 в составе архитектуры разрабатываемого устройства рекомендуется использовать в качестве шаблона следующий оператор:

<идентификатор_экземпляра_компонента>: bit_and_bus_32 port map (

I => I,

CTRL => CTRL,

O => O,

CLK => CLK,

Q => Q,

CE => CE,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR,

SSET => SSET );

Иллюстрацией результата использования параметризированного модуля Bit Gate является элемент bit_xor_16, выполняющий операцию «Исключающее ИЛИ» над шестнадцатиразрядным словом данных. В сформированном элементе bit_xor_16 предусмотрены обычный (комбинационный) выход и выходной регистр (а точнее, триггер) с входом разрешения синхронизации, асинхронными и синхронными сбросом и установкой. Текст VHDL-описания элемента bit_xor_16 выглядит следующим образом:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

-- synopsys translate_off Library XilinxCoreLib;

-- synopsys translate_on ENTITY bit_xor_16 IS port (

I: IN std_logic_VECTOR(15 downto О); Q: OUT std_logic;

CLK: IN std_logic;

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic;

O: OUT std_logic );

END bit_xor_16;

component bit_and_bus_32 port (

I: IN std_logic_VECTOR(31 downto О); CTRL: IN std_logic;

O: OUT std_logic_VECTOR(31 downto О); CLK: IN std_logic;

Q: OUT std_logic_VECTOR(31 downto О); CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic

ARCHITECTURE bit_xor_16_a OF bit_xor_16 IS -- synopsys translate_off component wrapped_bit_xor_16 port (

I: IN std_logic_VECTOR(15 downto 0);

Q: OUT std_logic;

CLK: IN std_logic;

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic;

O: OUT std_logic );

end component;

-- Configuration specification

for all : wrapped_bit_xor_16 use

XilinxCoreLib.C_GATE_BIT_V7_0(behavioral) generic map(

c_has_aset => 1, c_gate_type => 4, c_sync_priority => 1, c_has_sclr => 1,

entity

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

-- synopsys translate_off Library XilinxCoreLib;

-- synopsys translate_on ENTITY bit_and_bus_32 IS port (

I: IN std_logic_VECTOR(31 downto О);

Рис. 42. Стартовая диалоговая панель «мастера» настройки параметров ядра Bus Gate (страница Parameters)

Рис. 43. Заключительная диалоговая панель «мастера» настройки параметров ядра Bus Gate (страница Parameters)

c_enable_rlocs => 0, c_ainit_val => «0», c_has_ce => 1, c_pipe_stages => 0, c_has_aclr => 1, c_sync_enable => 1, c_has_ainit => 0, c_sinit_val => «0», c_has_sset => 1, c_has_sinit => 0, c_has_q => 1, c_has_o => 1, c_inputs => 16,

c_input_inv_mask => «0000000000000000» );

-- synopsys translate_on BEGIN

-- synopsys translate_off U0 : wrapped_bit_xor_16 port map (

I => I,

Q => Q,

CLK => CLK,

CE => CE,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR,

SSET => SSET,

O => O );

-- synopsys translate_on END bit_xor_16_a;

Для декларации компонента Ьк_хог_16 в описании проектируемого устройства нужно добавить в соответствующий раздел следующую конструкцию:

Создание экземпляров компонентов вида bit_xor_16 в составе описания проектируемого устройства осуществляется с помощью оператора, шаблон которого имеет следующий вид:

<идентификатор_экземпляра_компонента> : bit_xor_16 port map (

I => I,

Q => Q,

CLK => CLK,

CE => CE,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR,

SSET => SSET,

O => O );

«Мастер» настройки параметров ядра Bus Gate содержит две основные диалоговые панели и одну дополнительную. Вид страницы Parameters стартовой диалоговой панели этого «мастера» приведен на рис. 42.

В данной диалоговой панели определяются название создаваемого компонента и разрядность шин данных с помощью полей редактирования Component Name и Input Bus Width соответственно. Количество входных шин данных, над соответствующими разрядами которых выполняются логические операции, указывается в поле редактирования Number of Input Buses. Выбор типа логической операции, которая должна выполняться над соответствующими разрядами слов данных, представленных на входных шинах, осуществляется с помощью группы кнопок с зависимой фиксацией Gate Type (рис. 42). В отличие от «мастера» настройки параметризированных модулей Bit Bus Gate и Bit Gate для ядра Bus Gate в эту группу кроме кнопок, соответствующих основным логическим операциям, включены две дополнительные кнопки Inverter и Buffer. При нажатии одной из этих дополнительных кнопок формируемый элемент будет выполнять соответствующие

поразрядные операции только для одной входной шины данных, независимо от ранее выбранного значения параметра Number of Input Buses. Данный параметр в этом случае автоматически принимает единичное значение. Если в нажатом состоянии зафиксирована кнопка Inverter, то генерируемый элемент будет представлять собой N-разрядный инвертор (где N — разрядность входной шины данных). Когда в нажатом положении находится кнопка Buffer, формируемый элемент будет выполнять функцию N-разрядного буфера. Параметр Create RPM, значение которого определяется с помощью индикатора состояния, находящегося во встроенной панели Layout (рис. 42), имеет то же назначение, что и для ядер Bit Bus Gate и Bit Gate.

Вторая (заключительная) диалоговая панель «мастера» настройки параметров ядра Bus Gate позволяет для каждой входной шины данных задать «маску», определяющую те разряды слова данных, которые должны быть инвертированы перед выполнением основной логической операции. Кроме того, с помощью данной диалоговой панели производится выбор типа выходов, используемых в генерируемом элементе. Вид страницы Parameters заключительной диалоговой панели «мастера» настройки параметров ядра Bus Gate изображен на рис. 43.

Определение значений «маски» для каждой входной шины данных осуществляется с помощью полей редактирования Input A Inversion Mask, Input B Inversion Mask, Input C Inversion Mask и Input D Inversion Mask, которые расположены во встроенной панели Input Inversion. Из этих четырех полей редактирования доступны для ввода значения «маски» только те, которые соответствуют выбранному ранее количеству входных шин данных Number of Input Buses. Значения «маски» задаются в этих полях в том же формате, что и аналогичное значение для параме-

component bit_xor_16 port (

I: IN std_logic_VECTOR(15 downto 0);

Q: OUT std_logic;

CLK: IN std_logic;

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

SSET: IN std_logic;

O: OUT std_logic );

end component;

-- FPGA Express Black Box declaration attribute fpga_dont_touch: string;

attribute fpga_dont_touch of bit_xor_16: component is «true»;

-- Synplicity black box declaration attribute syn_black_box : boolean;

attribute syn_black_box of bit_xor_16: component is true;

тризированных модулей Bit Bus Gate и Bit Gate.

Типы выходов, которые должны присутствовать в создаваемом элементе, указываются с помощью группы кнопок с зависимой фиксацией, расположенных во встроенной панели Output Options (рис. 43). Если в состав формируемого элемента включен выходной регистр, то для определения его режимов и входов управления, а также соотношения приоритетов сигналов на входах управления нужно воспользоваться дополнительной диалоговой панелью. Эта панель открывается при нажатии кнопки Register Options. , которая находится в той же встроенной панели. Выбор типов выходов и входов управления в выходном регистре генерируемого элемента производится таким же образом, как и в параметризированных модулях Bit Bus Gate и Bit Gate.

Система условных обозначений интерфейсных портов в описаниях элементов, создаваемых с помощью параметризированно-го модуля Bus Gate, выглядит следующим образом:

• IA[N:0] — входная шина данных A с разрядностью N+1;

• IB[N:0] — входная шина данных B с разрядностью N+1;

• IC[N:0] — входная шина данных C с разрядностью N+1;

• ID[N:0] — входная шина данных D с разрядностью N+1;

• O[N:0] — комбинационные выходы генерируемых элементов;

• Q[N:0] — регистровые выходы формируемых элементов;

• CLK — вход тактового сигнала выходного регистра;

• CE — вход сигнала разрешения синхронизации выходного регистра;

• ACLR — вход сигнала асинхронного сброса выходного регистра;

• ASET — вход сигнала асинхронной установки выходного регистра;

• SCLR — вход сигнала синхронного сброса выходного регистра;

• SSET — вход сигнала синхронной установки выходного регистра;

• AINIT — вход сигнала асинхронной инициализации выходного регистра;

• SINIT — вход сигнала синхронной инициализации выходного регистра.

В качестве примера использования параме-тризированного модуля Bus Gate ниже приводится VHDL-описание элемента bus_4_nor_24, который выполняет операцию «Логическое ИЛИ-НЕ» над соответствующими битами четырех 24-разрядных слов данных, представленных на входных шинах IA, IB, IC, ID. В этом элементе присутствуют обычный (комбинационный) и регистровый выходы. В выходном регистре сформированного элемента bus_4_nor_24 задействованы входы разрешения синхронизации, асинхронного и синхронного сброса и установки:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

-- synopsys translate_off Library XilinxCoreLib;

-- synopsys translate_on ENTITY bus_4_nor_24 IS port (

IA: IN std_logic_VECTOR(23 downto 0);

IB: IN std_logic_VECTOR(23 downto 0);

IC: IN std_logic_VECTOR(23 downto 0);

ID: IN std_logic_VECTOR(23 downto 0);

O: OUT std_logic_VECTOR(23 downto 0);

CLK: IN std_logic;

CE: IN std_logic;

Q: OUT std_logic_VECTOR(23 downto 0);

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic );

END bus_4_nor_24;

ARCHITECTURE bus_4_nor_24_a OF bus_4_nor_24 IS -- synopsys translate_off component wrapped_bus_4_nor_24 port (

IA: IN std_logic_VECTOR(23 downto 0);

IB: IN std_logic_VECTOR(23 downto 0);

IC: IN std_logic_VECTOR(23 downto 0);

ID: IN std_logic_VECTOR(23 downto 0);

O: OUT std_logic_VECTOR(23 downto 0);

CLK: IN std_logic;

CE: IN std_logic;

Q: OUT std_logic_VECTOR(23 downto 0);

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic );

end component;

-- Configuration specification for all : wrapped_bus_4_nor_24 use entity

XilinxCoreLib.C_GATE_BUS_V7_0(behavioral) generic map(

c_has_aset => 1, c_gate_type => 3,

c_input_a_inv_mask => «101000001010000010100000»,

c_sync_priority => 1,

c_has_sclr => 1,

c_width => 24,

c_enable_rlocs => 0,

c_input_d_inv_mask => «000000000000000000000000», c_ainit_val => «000000000000000000000000», c_has_ce => 1,

c_input_b_inv_mask => «000000000000000000000000», c_has_aclr => 1, c_sync_enable => 1,

c_sinit_val => «000000000000000000000000»,

c_has_ainit => 0,

c_has_sset => 1,

c_has_sinit => 0,

c_has_q => 1,

c_has_o => 1,

c_inputs => 4,

c_input_c_inv_mask => «000000000000000000000000» );

-- synopsys translate_on BEGIN

-- synopsys translate_off U0 : wrapped_bus_4_nor_24 port map (

IA => IA,

IB => IB,

IC => IC,

ID => ID,

O => O,

CLK => CLK,

CE => CE,

Q => Q,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR,

SSET => SSET );

-- synopsys translate_on END bus_4_nor_24_a;

Декларация компонента bus_4_nor_24 в описании разрабатываемого устройства осуществляется с помощью следующей последовательности выражений:

component bus_4_nor_24 port (

IA: IN std_logic_VECTOR(23 downto 0);

IB: IN std_logic_VECTOR(23 downto 0);

IC: IN std_logic_VECTOR(23 downto 0);

ID: IN std_logic_VECTOR(23 downto 0);

O: OUT std_logic_VECTOR(23 downto 0);

CLK: IN std_logic;

CE: IN std_logic;

Q: OUT std_logic_VECTOR(23 downto 0);

ACLR: IN std_logic;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic

);

end component;

-- FPGA Express Black Box declaration

attribute fpga_dont_touch: string;

attribute fpga_dont_touch of bus_4_nor_24: component is «true»;

-- Synplicity black box declaration

attribute syn_black_box : boolean;

attribute syn_black_box of bus_4_nor_24: component is true;

Описание конкретных экземпляров компонентов вида bus_4_nor_24 в составе архитектурного тела выполняется с помощью оператора, шаблон которого выглядит следующим образом:

<идентификатор_экземпляра_компонента> : bus_4_nor_24 port map (

IA => IA,

IB => IB,

IC => IC,

ID => ID,

O => O,

CLK => CLK,

CE => CE,

Q => Q,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR,

SSET => SSET );

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

Подготовка описаний аккумуляторов средствами генератора параметризированных модулей CORE Generator

Формирование описаний аккумуляторов в среде генератора параметризированных модулей CORE Generator осуществляется с помощью ядра Accumulator. Этот параметризиро-ванный модуль входит в состав группы ядер, предназначенных для реализации математических функций Math Functions. Ядро Accumulator позволяет создавать аккумуляторы различной разрядности, выполняющие операции суммирования и/или вычитания, которые могут быть реализованы в ПЛИС следующих семейств: Spartan-II; Spartan-IIE; Spartan-3; Spartan-3E; Spartan-3A; Virtex; QPRO Virtex Rad-Hard; QPRO Virtex Hi-Rel; Virtex-E; QPRO Virtex-E Military; Virtex-II; Virtex-II PRO и Virtex-4.

Параметризированный модуль Accumulator характеризуется следующими отличительными особенностями:

Рис. 44. Структура аккумуляторов, формируемых на основе параметризированного модуля Accumulator

Рис. 45. Страница Parameters основной диалоговой панели «мастера» настройки параметров ядра аккумулятора Accumulator

• возможность выбора одного из вариантов выполняемой операции для формируемого аккумулятора (суммирования, вычитания, суммирования/вычитания);

• поддержка широкого диапазона разрядности входного двоичного кода (входной шины данных) от 1 до 256 разрядов;

• возможность выбора разрядности выходных данных в диапазоне от 2 до 258 разрядов;

• поддержка выполнения операций с данными, представленными как в знаковом, так и в беззнаковом формате;

• возможность формирования аккумуляторов с режимом непосредственной (прямой) загрузки данных;

• возможность выбора активного уровня сигнала на входе управления непосредственной загрузкой данных в аккумулятор;

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

• возможность создания аккумуляторов с выходами различного типа (комбинационным и регистровым);

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

с помощью параметризированного модуля Accumulator, представлена на рис. 44. В отличие от рассмотренных ранее ядер, выходной регистр является обязательным элементом аккумулятора. Выбор требуемых параметров архитектуры генерируемого аккумулятора осуществляется с помощью соответствующего «мастера» настройки.

В составе «мастера» настройки аккумулятора Accumulator используются две диалоговые панели, одна из которых является основной, а другая — дополнительной. Значения ключевых параметров генерируемого аккумулятора определяются с помощью страницы Parameters стартовой диалоговой панели этого «мастера», вид которой представлен на рис. 45.

В данной диалоговой панели нужно после ввода в поле редактирования Component Name названия создаваемого вида аккумулятора выбрать один из трех вариантов выполняемой операции, используя группу кнопок с зависимой фиксацией, которые расположены во встроенной панели Operation (рис. 45). Для формирования аккумулятора, построенного на основе сумматора, нужно зафиксировать в нажатом состоянии кнопку Add. Чтобы генерируемый аккумулятор выполнял операцию вычитания, следует переключить в нажатое положение кнопку Subtract. Когда необходим аккумулятор, осуществляющий операции и сложения и вычитания, в нажатом состоянии должна находиться кнопка Add/Subtract.

Далее нужно установить требуемые параметры для входных портов генерируемого аккумулятора. Порт A представляет собой внутренний порт, используемый для организации обратной связи, необходимой для функционирования аккумулятора. Для этого порта можно задать коэффициент масштабирования входных данных, используя поле выбора Feedback Scaling, которое находится во встроенной панели Port A Input Options (рис. 45). Значение этого параметра, выбираемое из выпадающего списка поля Feedback Scaling, представляет собой количество младших бит в выходном слове данных аккумулятора, которое должно быть отброшено при передаче этого слова в порт обратной связи.

Порт B является входным портом (входной шиной) данных аккумулятора. Для определения разрядности входных данных, поступающих в этот порт, предназначено поле редактирования Port B Width, которое расположено во встроенной панели Port B Input Options (рис. 45). Формат представления входных данных выбирается с помощью группы кнопок с зависимой фиксацией, которые находятся в этой же встроенной панели. Если входные данные должны интерпретироваться как значения со знаком, то необходимо зафиксировать в нажатом состоянии кнопку Signed. При нажатой кнопке Unsigned входные данные будут восприниматься как числа без знака. В качестве входного слова данных может быть задано постоянное значение. Для этого нужно установить в состояние «включено» индикатор Constant Value, который также расположен во встроенной панели Port B Input Options. При этом становится доступным одноименное поле редактирования, в нем нужно указать требуемое значение константы, которое будет использоваться в качестве входного слова данных в сформированном аккумуляторе. Данное значение задается в двоичном формате. При этом количество указываемых двоичных разрядов значения константы должно соответствовать разрядности входного порта данных Port B Width, определенной ранее.

Выбор выходных шин данных в генерируемом аккумуляторе и определение их разрядности осуществляется с помощью поля редактирования и двух кнопок с зависимой фиксацией, которые представлены во встроенной панели Output Options (рис. 45). Разрядность выходной шины данных указывается в поле редактирования Output Width. Если необходимо сформировать аккумулятор только с синхронными (регистровыми) выходами, то следует установить в нажатое

состояние кнопку Registered. Чтобы в создаваемом аккумуляторе были представлены не только синхронные (регистровые), но и асинхронные (комбинационные) выходы, нужно переключить в нажатое положение кнопку Registered and Non-Registered. Выбор входов управления в выходном регистре и определение соотношения приоритетов сигналов на этих входах осуществляется с помощью дополнительной диалоговой панели, которая выводится на экран монитора при нажатии кнопки Register Options. , находящейся в этой же встроенной панели. Дополнительная диалоговая панель имеет тот же вид, что и вспомогательная диалоговая панель «мастера» настройки параметров двоичного дешифратора, представленная на рис. 7.

Рассматриваемый параметризированный модуль позволяет в процессе генерации аккумуляторов включить в их состав входы и/или выходы сигналов переноса (заема) и переполнения. С этой целью следует воспользоваться индикаторами состояния, расположенными во встроенной панели Carry/Overflow Options (рис. 45). Чтобы использовать в формируемом аккумуляторе вход сигнала переноса (для суммирующего аккумулятора) или заема (для вычитающего аккумулятора), нужно установить в состояние «включено» индикатор Carry/Borrow Input. Если в генерируемом аккумуляторе необходимы выходы сигналов переноса или заема, то в активное состояние нужно перевести индикатор Carry/Borrow Output. Чтобы задействовать в создаваемом аккумуляторе выход переполнения, следует установить во включенное состояние Overflow Output. Следует обратить внимание на то, что индикаторы состояния Carry/Borrow Output и Overflow Output доступны только при определенных соотношениях разрядности входных и выходных данных, когда становится возможным перенос из самого старшего разряда полученного результата или переполнение.

Для генерации аккумуляторов с возможностью прямой загрузки входных данных непосредственно в выходной регистр (регистр записи результата) нужно установить индикатор Bypass, расположенный во встроенной панели Bypass (Load) Options (рис. 45), в состояние «включено». При этом в состав формируемого описания аккумулятора добавляется входной порт сигнала управления непосредственной загрузкой. Если в генерируемом аккумуляторе предполагается одновременное присутствие входа разрешения синхронизации и входа управления прямой загрузкой данных, то необходимо установить приоритеты сигналов, подаваемых на эти входы. Для этой цели предназначен индикатор состояния CE Overrides for Bypass, который находится в этой же встроенной панели. Чтобы в формируемом аккумуляторе сигнал разрешения синхронизации имел более высокий приоритет, чем сигнал управления загрузкой данных, данный индикатор должен находиться в состоянии «включено». При выключен-

ном состоянии индикатора CE Overrides for Bypass более высоким приоритетом будет обладать сигнал разрешения прямой записи данных в регистр аккумулятора. Активный уровень сигналов на входе управления загрузкой данных в регистр аккумулятора выбирается с помощью группы кнопок с зависимой фиксацией Bypass (Load) Sense. При нажатой кнопке Active Low активным будет считаться низкий логический уровень сигнала. Для установки активного высокого уровня сигнала разрешения прямой записи данных в регистр аккумулятора нужно перевести в нажатое состояние кнопку Active High. По умолчанию в качестве активного установлен высокий логический уровень сигнала (в нажатом состоянии зафиксирована кнопка Active High).

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

• BIM^] — входная шина данных с разрядностью M+1;

• S[P:G] — комбинационные асинхронные выходы генерируемого аккумулятора (асинхронная выходная шина данных с разрядностью P+1);

• QIP^] — регистровые (синхронные) выходы формируемого аккумулятора (синхронная выходная шина данных с разрядностью P+1);

• ADD — вход выбора выполняемой операции (суммирование или вычитание);

• BYPASS — вход управления прямой загрузкой данных с входной шины данных в выходной регистр аккумулятора;

• C_IN — вход сигнала переноса;

• B_IN — вход сигнала заема (используется только в аккумуляторах, выполняющих операцию вычитания);

• OVFL — асинхронный выход сигнала переполнения;

• Q_OVFL — синхронный (регистровый) выход сигнала переполнения;

• C_OUT — асинхронный выход сигнала переноса;

• Q_C_OUT — синхронный (регистровый) выход сигнала переноса;

• B _OUT — асинхронный выход сигнала заема (используется только в аккумуляторах, выполняющих операцию вычитания);

• Q_B_OUT — синхронный (регистровый) выход сигнала заема (используется только в аккумуляторах, выполняющих операцию вычитания);

• CLK — вход тактового сигнала выходного регистра;

• CE — вход сигнала разрешения синхронизации выходного регистра;

• ACLR — вход сигнала асинхронного сброса выходного регистра;

• ASET — вход сигнала асинхронной установки выходного регистра;

• SCLR — вход сигнала синхронного сброса выходного регистра;

• SSET — вход сигнала синхронной установки выходного регистра;

• AINIT — вход сигнала асинхронной инициализации выходного регистра;

• SINIT — вход сигнала синхронной инициализации выходного регистра.

Примером элемента, сформированного на

основе ядра Accumulator, является аккумулятор accum_ad_sub_32, выполняющий операции сложения и вычитания тридцатидвухразрядных входных данных. В сгенерированном аккумуляторе используются синхронные и асинхронные выходы данных, а также входы сигнала переноса и управления прямой записью данных в регистр аккумулятора. Сформированный текст VHDL-описания аккумулятора accum_ad_sub_32 выглядит следующим образом:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

-- synopsys translate_off Library XilinxCoreLib;

-- synopsys translate_on ENTITY accum_ad_sub_32 IS port (

B: IN std_logic_VECTOR(31 downto 0);

Q: OUT std_logic_VECTOR(33 downto 0);

S: OUT std_logic_VECTOR(33 downto 0);

CLK: IN std_logic;

ADD: IN std_logic;

BYPASS: IN std_logic;

C_IN: IN std_logic;

OVFL: OUT std_logic;

Q_OVFL: OUT std_logic;

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic );

END accum_ad_sub_32;

ARCHITECTURE accum_ad_sub_32_a OF accum_ad_sub_32 IS -- synopsys translate_off component wrapped_accum_ad_sub_32 port (

B: IN std_logic_VECTOR(31 downto 0);

Q: OUT std_logic_VECTOR(33 downto 0);

S: OUT std_logic_VECTOR(33 downto 0);

CLK: IN std_logic;

ADD: IN std_logic;

BYPASS: IN std_logic;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

C_IN: IN std_logic;

OVFL: OUT std_logic;

Q_OVFL: OUT std_logic;

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic );

end component;

-- Configuration specification

for all : wrapped_accum_ad_sub_32 use entity XilinxCoreLib.C_AC-CUM_V7_0(behavioral) generic map(

c_has_bypass_with_cin => 0, c_has_sclr => 1, c_sync_priority => 1, c_has_b_out => 0, c_has_aset => 1, c_has_s => 1, c_bypass_enable => 0, c_b_constant => 0, c_has_ovfl => 1, c_high_bit => 33, c_sinit_val => «0», c_has_bypass => 1, c_pipe_stages => 0, c_has_sset => 1, c_has_ainit => 0, c_has_q_c_out => 0, c_b_type => 0, c_has_add => 1, c_has_sinit => 0, c_has_b_in => 0,

c_has_b_signed => 0, c_bypass_low => 0, c_enable_rlocs => 0, c_b_value => «0000», c_add_mode => 2, c_has_aclr => 1, c_out_width => 34, c_ainit_val => «0000», c_saturate => 0, c_low_bit => 0, c_has_q_ovfl => 1, c_has_q_b_out => 0, c_has_c_out => 0, c_b_width => 32, c_scale => 0, c_sync_enable => 1, c_has_ce => 1, c_has_c_in => 1 );

-- synopsys translate_on BEGIN

-- synopsys translate_off U0 : wrapped_accum_ad_sub_32 port map (

B => B,

Q => Q,

S => S,

CLK => CLK,

ADD => ADD, BYPASS => BYPASS, C_IN => C_IN,

OVFL => OVFL, Q_OVFL => Q_OVFL, CE => CE,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR, SSET => SSET );

-- synopsys translate_on END accum_ad_sub_32_a;

attribute fpga_dont_touch: string;

attribute fpga_dont_touch of accum_ad_sub_32: component is «true»;

-- Synplicity black box declaration attribute syn_black_box : boolean;

attribute syn_black_box of accum_ad_sub_32: component is true;

Выражения декларации аккумулятора ас-сит_а^иЬ_32 в составе описания разрабатываемого устройства выглядят следующим образом:

Для описания конкретных экземпляров аккумуляторов вида ассит_а^8иЬ_32 нужно использовать соответствующий оператор, шаблон которого имеет следующий вид:

component accum_ad_sub_32 port (

B: IN std_logic_VECTOR(31 downto О);

Q: OUT std_logic_VECTOR(33 downto О); S: OUT std_logic_VECTOR(33 downto О); CLK: IN std_logic;

ADD: IN std_logic;

BYPASS: IN std_logic;

C_IN: IN std_logic;

OVFL: OUT std_logic;

Q_OVFL: OUT std_logic;

CE: IN std_logic;

ACLR: IN std_logic;

ASET: IN std_logic;

SCLR: IN std_logic;

SSET: IN std_logic );

end component;

-- FPGA Express Black Box declaration

<ндентн^нкатор_экземппaра_аккумупaтора> : accum_ad_sub_32 port map (

B => B,

Q => Q,

S => S,

CLK => CLK,

ADD => ADD,

BYPASS => BYPASS,

C_IN => C_IN,

OVFL => OVFL,

Q_OVFL => Q_OVFL,

CE => CE,

ACLR => ACLR,

ASET => ASET,

SCLR => SCLR,

SSET => SSET );

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

i Надоели баннеры? Вы всегда можете отключить рекламу.