Использование продвинутых возможностей CPLD Xilinx CoolRunner-II Печать
Добавил(а) microsin   

Этот апноут (перевод XAPP378 [1]) описывает, как использовать особые функции серии CPLD CoolRunner-II с помощью ПО разработки Xilinx. Эти функции включают регистры, тактируемые по обоим перепадам тактов (DualEDGE triggered registers), делитель тактовой частоты (clock divider), CoolCLOCK, DataGATE, входы с триггером Шмитта и разные типы терминирования ввода/вывода (I/O termination). Примеры кода HDL доступны для загрузки по ссылке [2].

Микросхемы Xilinx CoolRunner-II CPLD объединяют в себе высокое быстродействие и низкое энергопотребление в одном устройстве. Дополнительные функции CoolRunner-II CPLD по тактированию и предоставляют для разработки расширенные возможности по достижению баланса между быстродействием и снижением потребления энергии. Все функции, рассмотренные в этом апноуте, поддерживаются версиями ПО разработки Foundation™ ISE и WebPACK™ ISE компании Xilinx.

[Программные атрибуты]

Есть 2 метода ввода атрибутов, у каждого из них свои достоинства. User Constraint File (UCF) хорош тем, что его просто редактировать с помощью текстового редактора, отдельно от других модулей (файлов) исходного кода, поэтому при изменении атрибутов в UCF не нужно заново синтезировать схему из исходного кода. Подробнее про ввод ограничений с помощью UCF см. [3].

Ввод атрибута в исходном файле имеет достоинство в том, что не требуется поддерживать отдельный файл для ограничений дизайна (design constraints). Все примеры атрибутов CoolRunner-II языков VHDL и Verilog применимы только к инструментарию синтеза XST.

Атрибуты, которые пользователь определяет для CoolRunner-II CPLD, позволяют задействовать разные расширенные функции: CoolCLOCK, DataGATE, входы с триггером Шмитта, терминирование I/O keeper или pullup, выбор стандарта I/O, VREF и выходы с открытым стоком. Некоторые ограничения дизайна из этого списка можно выбрать программно через ISE Project Navigator GUI. Индивидуальные ограничения на сигнал должны быть явно определены вышеупомянутыми методами.

Обратите внимание, что в Xilinx ISE Project Navigator имеется специальный синтаксис и руководства помощи для атрибутов. Эти файлы подсказки обновляются с каждым релизом ПО разработки, и предоставляют надежны источник информации. См. в ISE меню Help -> ISE Help Contents -> CPLD Attributes.

Регистры DualEDGE. Регистры CoolRunner-II DualEDGE позволяют разработчикам достичь беспрецедентных уровней производительности. CoolRunner-II CPLD могут удвоить быстродействие системы путем создания регистров DualEDGE (DET). Регистры DET позволяют регистрировать данные по обоим перепадам тактового сигнала - по положительному (фронт нарастания лог. уровня, 0 -> 1) и отрицательному (спад лог. уровня, 1 -> 0).

Регистры CoolRunner-II DET могут быть использованы для таких логических функций, как регистры сдвига, счетчики и машины состояний. Разработчики должны оценить необходимую производительности логики CPLD, чтобы определить использование DET-регистров.

Регистр DET может быть выведен в любом из дизайнов - ABEL, HDL или schematic. Таблица 1 перечисляет доступные методы для создания DET-регистра в CoolRunner-II.

Таблица 1. Способы реализации регистра DET.

Тип дизайна Метод инстанциации
ABEL Используйте следующий синтаксис:
QOUT:=data; QOUT.DEC=clock;
VHDL/Verilog Реализуйте регистр с активацией по обоим перепадам тактов.
Schematic Инстанцируйте компонент FDDn[S][R][E].

Разработчик в любом дизайне HDL может сделать регистр, работающий по одному перепаду (single edge triggered, SET). SET-регистр, активируемый по положительному перепаду (0 -> 1) входного тактового сигнала, требует следующего синтаксиса VHDL или Verilog.

-- VHDL:
if (clock_event) and (clock = '1') then
 
// Verilog:
always @ (posedge clock)

Требуемый синтаксис для реализации DET-регистра CoolRunner-II DET требует, чтобы регистр активировался по обоим перепадам тактов (положительному 0 -> 1) и отрицательному (1 -> 0). Для реализации DET-регистра на VHDL должен использоваться следующий синтаксис.

process (clock)
begin
   if (clock_event) then
      ...
   end if;
end process;

The following Verilog syntax would be used to infer a DET register in CoolRunner-II.

always @ (negedge clock or posedge clock)
   ...

DET-регистр доступен во всех макроячейках всех устройств семейства CoolRunner-II.

Делитель тактовой частоты. CoolRunner-II CPLD предоставляет дополнительную для регистра DET функцию делителя тактовой частоты (Clock Divider). Входящая тактовая частота может быть поделена, и результат глобально распределен как поделенная тактовая частота на все макроячейки (macrocells). Делитель тактовой частоты предоставляет дополнительное средство для управления энергопотреблением - снизить потребление можно переключением частоты для внутренней сети тактирования (internal clock network).

CoolRunner-II clock divider доступен для глобальных тактов (global clock, GCK2), и может делить частоту тактов на коэффициенты 2, 4, 6, 8, 10, 12, 14 и 16. Делитель тактов создает сигнал со скважностью 50-50 без влияния на TCO. Делитель тактов инициализируется нулем схемой сброса CPLD, срабатывающей при включении питания.

Делитель тактов включает синхронный сброс, активизируемый лог. 1, который называется CDRST. Когда выставляется сигнал CDRST (лог. 1), выходной сигнал делителя тактов запрещается после текущего цикла. Когда сигнал CDRST снимается (лог. 0), выход сигнала тактов становится активным по первому перепаду GCK2.

CoolRunner II Clock Divider

Рис. 1. CoolRunner-II Clock Divider (делитель тактов).

Делитель тактов CoolRunner-II имеет встроенную схему задержки. Когда функция задержки разрешена, выход делителя тактов задерживается на один полный цикл тактов. Когда используется делитель тактов, он не выводит положительный перепад тактов до тех пор, пока делитель не достигнет предельного значения счетчика (terminal count value). Функция задержки разрешается или запрещается при конфигурировании. Тип инстанциации компонента делителя тактов будет определяться, если задержка разрешена или запрещена. Рис. 2 показывает диаграмму времени делителя тактов CoolRunner-II с разрешенной и запрещенной задержкой.

CoolRunner II Clock Divider waveform

Рис. 2. Форма выходного сигнала Clock Divider.

Технология синтеза (Xilinx Synthesis Technology, XST) позволяет инстанцировать компонент clock divider непосредственно в исходном коде HDL. Таблица 2 перечисляет доступные компоненты clock divider, которые могут быть инстанцированы в дизайне ABEL, HDL или schematic.

Таблица 2. Библиотечные компоненты Clock Divider.

Компонент Описание
CLK_DIVn Компонент делителя глобальной тактовой частоты. Функции синхронного сброса или стартовой задержки не поддерживаются. Доступны коэффициенты деления CLK_DIV2, CLK_DIV4, CLK_DIV6, CLK_DIV8, CLK_DIV10, CLK_DIV12, CLK_DIV14, CLK_DIV16.
CLK_DIVnR Делитель глобальной тактовой частоты с синхронным сбросом. Функция стартовой задержки не поддерживается. Доступны коэффициенты деления CLK_DIV2, CLK_DIV4, CLK_DIV6, CLK_DIV8, CLK_DIV10, CLK_DIV12, CLK_DIV14, CLK_DIV16R.
CLK_DIVnSD Делитель глобальной тактовой частоты со стартовой задержкой. Функция синхронного сброса не поддерживается. Доступны коэффициенты деления CLK_DIV2, CLK_DIV4, CLK_DIV6, CLK_DIV8, CLK_DIV10, CLK_DIV12, CLK_DIV14, CLK_DIV16SD.
CLK_DIVnRSD Делитель глобальной тактовой частоты с синхронным сбросом и стартовой задержкой. Функции синхронного сброса или стартовой задержки не поддерживаются. Доступны коэффициенты деления CLK_DIV2, CLK_DIV4, CLK_DIV6, CLK_DIV8, CLK_DIV10, CLK_DIV12, CLK_DIV14, CLK_DIV16RSD.

[VHDL]

Чтобы разработать делитель тактовой частоты CoolRunner-II на VHDL, требуется и декларация компонента, и его инстанциация. Декларация компонента включает имя и интерфейс блока делителя (clock divider unit). Синтаксис декларации компонента VHDL для использования деления тактовой частоты на 2 (компонент CLK_DIV2):

component CLK_DIV2 is
port (
   CLKIN : in STD_LOGIC;
   CLKDV : out STD_LOGIC );
end component;

Инстанциация компонента делителя тактовой частоты связывает сигналы с портами этого компонента. Если частота тактов делится на 2, то должен инстанцироваться компонент CLK_DIV2. Входящий тактовый сигнал clk декларируется на порт CLKIN, и выходной сигнал делителя clk_div_by_2 декларируется на выходной порт CLKDV. Ниже показан синтаксис VHDL для инстанциации компонента CLK_DIV2.

U1: CLK_DIV2
port map(
   CLKIN => clk,
   CLKDV => clk_div_by_2 );

Если такты делятся на 16, и нужен синхронный сброс и стартовая задержка, то должен декларироваться и инстанцироваться компонент CLK_DIV16RSD. Синтаксис VHDL для декларации показан ниже.

component CLK_DIV16RSD is
port (
   CLKIN : in STD_LOGIC;
   CDRST : in STD_LOGIC;
   CLKDV : out STD_LOGIC );
end component;

Инстанциация компонента назначает сигналы портов. Входной сигнал тактов clk декларируется на порт CLKIN. Сигнал сброса делителя clk_div_rst декларируется на порт CDRST. Выход делителя clk_div_by_16 декларируется на порт CLKDV. Этот компонент также разрешает схему стартовой задержки в делителе тактов CoolRunner-II. Синтаксис инстанциации компонента CLK_DIV16RSD на VHDL:

U1: CLK_DIV16RSD
port map (
   CLKIN => clk,
   CDRST => clk_div_rst,
   CLKDV => clk_div_by_16 );

[Verilog]

Запрись дизайна Verilog с XST не требует декларации компонента, нужна только его инстанциация. Здесь показан синтаксис Verilog для инстанциации компонента CLK_DIV16RSD. Входной сигнал clk назначается на порт CLKIN. Сигнал сброса делителя clk_div_rst назначается на порт CDRST. Сигнал выхода делителя clk_div_by_16 назначается на порт CLKDV.

CLK_DIV16RSD U1 (
   .CLKIN (clk),
   .CDRST (clk_div_rst),
   .CLKDV (clk_div_by_16) );

[ABEL]

Для языка ABEL разработка делителей тактов CoolRunner-II требует и декларации, и инстанциации компонента. Делитель тактов должен декларироваться как внешний компонент:

CLK_DIV2R external (CLKIN, CDRST -> CLKDV);

Инстанциация компонента на ABEL происходит путем назначения идентификатора компоненту делителя тактовой частоты. В этом примере U1 это назначаемый идентификатора для компонента делителя CLK_DIV2R, назначение происходит с помощью ключевого слова functional_block языка ABEL.

U1 functional_block CLK_DIV2R;

Следующие выражения иллюстрируют отображение портов (port mapping) компонента. Входная тактовая частота clk отображается на порт CLKIN. Сигнал сброса делителя clk_div_rst отображается на порт CDRST. Выходной сигнал делителя clk_div_by_2 назначается на выходной порт CLKDV.

U1.CLKIN = clk;
U1.CDRST = clk_div_rst;
clk_div_by_2 = U1.CLKDV;

Примечания: 

1. Сигнал, назначенный на порт CDRST, будет автоматически отображен на вывод CDRST I/O.
2. Выход схемы делителя тактов доступен только в качестве входного сигнала для регистров внутри CPLD. Выход делителя тактов не может использоваться в комбинаторной логике, и не может быть направлен наружу из чипа через внешние выводы.
3. Делитель тактовой частоты доступен в чипах CoolRunner-II, у которых количество макроячеек 128 и больше. 

CoolCLOCK. Функция CoolCLOCK семейства CoolRunner-II это техника комбинирования глобального делителя тактов и регистров DET. Экономия питания достигается делением глобальной тактовой частоты на 2 с передачей пониженной тактовой частоты на внутреннюю цепь тактирования, после чего включается удвоение тактовой частоты на каждой макроячейке. Нулевое отклонение тактов (zero clock skew) может быть достигнуто с помощью вставки нулевой задержки между делителем тактов и регистрами DET.

CoolRunner II CoolCLOCK

Рис. 3. Функция CoolRunner-II CoolCLOCK. 

Поскольку может быть поделена только тактовая частота сети тактов GCK2, то функция CoolCLOCK доступна только на GCK2. Функция CoolCLOCK может быть реализована назначением атрибута на входную частоту тактов. Атрибут CoolCLOCK устраняет необходимость инстанциации делителя тактов и регистров DET. Таблица 3 перечисляет методы, доступные для использования атрибута CoolCLOCK.

Таблица 3. Атрибут CoolCLOCK.

Формат атрибута Синтаксис Пример
UCF NET имя COOL_CLK;
NET clk COOL_CLK;
ABEL XILINX PROPERTY 'COOL_CLK имя';
XILINX PROPERTY 'COOL_CLK clk';
VHDL attribute COOL_CLK : string;
attribute COOL_CLK of имя: signal is "TRUE";
attribute COOL_CLK : string;
attribute COOL_CLK of clk : signal is "TRUE";
Verilog //SYNTHESIS attribute COOL_CLK of имя: signal is "TRUE";
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute COOL_CLK of clk :
signal is "TRUE";

Примечание: функция CoolCLOCK доступна в чипах CoolRunner-II, у которых количество макроячеек 128 и больше.

DataGATE. Разработчики, использующие CoolRunner-II, могут блокировать входы под управлением функции DataGATE. С помощью блокирования входов переключение сигналов не перезаряжают входную емкость чипа, снижая тем самым общее энергопотребление. Внутри CPLD защелкивается и используется последнее значение, которое было на выводе входа перед выставлением сигнала активации (assertion rail) DataGATE. На рис. 4 показана функция DataGATE кристалла CoolRunner-II.

CoolRunner II DataGATE Block Diagram

Рис. 4. Блок-диаграмма DataGATE.

С функцией DataGATE в CoolRunner-II связано два атрибута. Первый атрибут задает, используется ли на входе DataGATE, и второй обозначает управляющий сигнал DataGATE.

Функция DataGATE выбирается для каждого вывода индивидуально. На каждый входной вывод, использующий DataGATE, должен быть назначен атрибут DATA_GATE. Таблица 4 показывает синтаксис для разрешения функции DataGATE на входном сигнале.

Таблица 4. Атрибут DATA_GATE.

Формат атрибута Синтаксис Пример
UCF NET имя DATA_GATE;
NET data_in DATA_GATE;
ABEL XILINX PROPERTY 'DATA_GATE имя';
XILINX PROPERTY 'DATA_GATE data_in';
VHDL attribute DATA_GATE : string;
attribute DATA_GATE of имя: signal is "TRUE";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов DATA_GATE.
attribute DATA_GATE : string;
attribute DATA_GATE of data_in : signal is "TRUE";
Verilog //SYNTHESIS attribute DATA_GATE of имя: signal is "TRUE";
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute DATA_GATE of data_in :
signal is "TRUE";

Сигнал активации DataGATE (assertion rail) может подаваться либо от вывода I/O, либо от внутренней логики. Сигнал разрешения DataGATE имеет выделенный вывод DGE I/O для каждого корпуса CoolRunner-II. При реализации ПО разработки распознает факт использования в проекте функции DataGATE, и автоматически назначает этот вывод I/O на функцию управления разрешением DataGATE (DataGATE enable control), DGE. Генерируемая внутри чипа логика управления DataGATE может быть назначена на этот вывод I/O с помощью атрибута BUFG=DATA_GATE. Методы назначения сигнала DataGATE показаны в таблице 5.

Таблица 5. Атрибут управления DATA_GATE.

Формат атрибута Синтаксис Пример
UCF NET имя BUFG=DATA_GATE;
NET dg_en BUFG=DATA_GATE;
ABEL XILINX PROPERTY 'BUFG=DATA_GATE имя';
XILINX PROPERTY 'BUFG=DATA_GATE dg_en';
VHDL attribute BUFG : string;
attribute BUFG of имя: signal is "DATA_GATE";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов BUFG.
attribute BUFG : string;
attribute BUFG of dg_en : signal is "DATA_GATE";
Verilog //SYNTHESIS attribute BUFG of имя: signal is "DATA_GATE";
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute BUFG of dg_en :
signal is "DATA_GATE";

Триггер Шмитта. У каждого чипа CoolRunner-II на выводах I/O есть несколько входных буферов, использующихся для разных стандартных конфигураций ввода/вывода. Один из этих входных буферов работает как триггер Шмитта, и это разрешается при конфигурировании CPLD. Вход с триггером Шмитта позволяет разработчику гибко использовать микросхему CoolRunner-II как с высокоскоростными, так и медленными сигналами. Медленно переключающиеся сигналы могут вводить хаос в цифровую систему, давая двойное тактирование или помехи на входе CMOS, однако это можно устранить использованием триггера Шмитта на входе. Платой за триггер Шмитта на входе будет только задержка сигнала на несколько наносекунд. Точное значение для разных чипов и условий использования можно найти в даташите CoolRunner-II (см. [4]).

В таблице 6 показан синтаксис атрибута входного буфера в виде триггера Шмитта для определенного сигнала.

Таблица 6. Атрибут SCHMITT_TRIGGER.

Формат атрибута Синтаксис Пример
UCF NET имя SCHMITT_TRIGGER;
NET data_in SCHMITT_TRIGGER;
NET clock SCHMITT_TRIGGER;
ABEL XILINX PROPERTY 'SCHMITT_TRIGGER имя';
XILINX PROPERTY 'SCHMITT_TRIGGER data_in';
XILINX PROPERTY 'SCHMITT_TRIGGER clock';
 
VHDL attribute SCHMITT_TRIGGER : string;
attribute SCHMITT_TRIGGER of имя: signal is "TRUE";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов SCHMITT_TRIGGER.
attribute SCHMITT_TRIGGER : string;
attribute SCHMITT_TRIGGER of data_in : signal is "TRUE";
attribute SCHMITT_TRIGGER of clock : signal is "TRUE";
Verilog //SYNTHESIS attribute SCHMITT_TRIGGER of имя;
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute BUFG of data_in;
//SYNTHESIS attribute BUFG of clock;

[Терминирование ввода/вывода]

Выводы I/O чипа CoolRunner-II могут быть терминированы следующим образом: keeper (это также называется удержанием шины, bushold) и верхняя подтяжка к уровню лог. 1 (pullup). Использование схем keeper и pullup возможно исключительно для всего чипа сразу. Когда выбран один из этих режимов терминирования (keeper, pullup) для любого количества сигналов, то другой режим терминирования больше недоступен для любого другого сигнала (т. е. у всех сигналов может быть только этот режим терминирования).

Keeper. Схема терминирования keeper предоставляет возможность удерживать последнее известное значение на выводе I/O с помощью слабых резисторов pullup/pulldown. Если не терминированный вывод I/O находится в состоянии отключения (высокое сопротивление), или оставлен "висящим", то это приведет к повышенным токам утечки. Схема keeper устраняет необходимости внешнего терминирования для устранения этой проблемы. В таблице 7 показан синтаксис атрибута, задающего терминирование keeper на любом выводе I/O.

Таблица 7. Атрибут KEEPER.

Формат атрибута Синтаксис Пример
UCF NET имя KEEPER;
NET data_in KEEPER;
NET clock KEEPER;
ABEL XILINX PROPERTY 'KEEPER имя';
XILINX PROPERTY 'KEEPER data_in';
XILINX PROPERTY 'KEEPER clock';
 
VHDL attribute KEEPER : string;
attribute KEEPER of имя: signal is "TRUE";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов KEEPER.
attribute KEEPER : string;
attribute KEEPER of data_in : signal is "TRUE";
attribute KEEPER of clock : signal is "TRUE";
Verilog //SYNTHESIS attribute KEEPER of имя;
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute KEEPER of data_in;
//SYNTHESIS attribute KEEPER of clock;

Pullup. Внутренняя подтяжка уровня к лог. 1 устраняет необходимость установки на печатной плате соответствующих резисторов pullup, снижая стоимость дизайна и упрощая разводку. Таблица 8 иллюстрирует синтаксис атрибута для терминирования pullup сигналов I/O.

Таблица 8. Атрибут PULLUP.

Формат атрибута Синтаксис Пример
UCF NET имя PULLUP;
NET data_in PULLUP;
NET clock PULLUP;
ABEL XILINX PROPERTY 'PULLUP имя';
XILINX PROPERTY 'PULLUP data_in';
XILINX PROPERTY 'PULLUP clock';
 
VHDL attribute PULLUP : string;
attribute PULLUP of имя: signal is "TRUE";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов PULLUP.
attribute PULLUP : string;
attribute PULLUP of data_in : signal is "TRUE";
attribute PULLUP of clock : signal is "TRUE";
Verilog //SYNTHESIS attribute PULLUP of имя;
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute PULLUP of data_in;
//SYNTHESIS attribute PULLUP of clock;

[Конфигурация ввода/вывода]

Устройства CoolRunner-II поддерживает несколько банков I/O в одном устройстве, позволяя упростить реализацию в одном чипе подключение к интерфейсам разных стандартов (разных логических уровней напряжения). Устройство может поддерживать один из стандартов I/O для каждого банка (например, у чипа XC2C128 есть 2 банка, и поэтому он может поддерживать до двух стандартных типов I/O). Независимо от того, какой стандарт был выбран, любой вывод может быть сконфигурирован как выход с открытым стоком.

Стандарты I/O. Таблица 9 перечисляет стандарты I/O, поддерживаемые устройствами CoolRunner-II. Обратите внимание, что в зависимости от емкости чипа могут поддерживаться не все стандарты.

Таблица 9. Стандарты ввода/вывода, которые поддерживает CoolRunner-II.

  XC2C32A XC2C64A XC2C128 XC2C256 XC2C384 XC2C512
Банков I/O 2 2 2 2 4 4
LVTTL да да да да да да
LVCMOS33, LVCMOS25, LVCMOS18 да да да да да да
1.5V I/O да да да да да да
SSTL2-1, SSTL3-1 - - да да да да
HSTL-1 - - да да да да

Рис. 5 показывает, как указать стандарт по умолчанию для I/O, применяемый всеми выводами проекта. Это настраивается в диалоге свойств процесса размещения на кристалле (свойства процесса Fit, раздел Fitting, пункт I/O Voltage Standard).

CPLD Global IO Standard Selection

Рис. 5. Глобальный для кристалла выбор стандарта I/O.

Если дизайн требует реализации нескольких стандартов I/O в одном устройстве, то каждый вывод должен быть декларирован индивидуально соответствующим атрибутом стандарта I/O. Таблица 10 иллюстрирует доступные атрибуты стандарта I/O, которые можно декларировать.

Таблица 10. Атрибуты стандарта ввода/вывода.

Стандарт I/O Имя атрибута
LVTTL LVTTL
LVCMOS 3.3V LVCMOS33
LVCMOS 2.5V LVCMOS25
LVCMOS 1.8V LVCMOS18
1.5V I/O LVCMOS15
SSTL 2-1 SSTL2_I
SSTL 3-1 SSTL3_I
HSTL-1 HSTL_I

Таблица 11 показывает синтаксис для указания атрибута стандарта I/O. Показаны примеры для стандарта низковольтной логики LVCMOS18. Для других стандартов атрибут LVCMOS18 может быть заменен на соответствующее имя, показанное в таблице 10.

Таблица 11. Синтаксис атрибута стандарта ввода/вывода.

Формат атрибута Синтаксис Пример
UCF NET имя атрибут;
NET data_in IOSTANDARD=LVCMOS18;
NET clock IOSTANDARD=LVCMOS18;
ABEL XILINX PROPERTY 'IOSTANDARD=атрибут имя';
XILINX PROPERTY 'IOSTANDARD=LVCMOS18 data_in';
XILINX PROPERTY 'IOSTANDARD=LVCMOS18 clock'; 
VHDL attribute IOSTANDARD : string;
attribute IOSTANDARD of имя: signal is "атрибут";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов IOSTANDARD.
attribute IOSTANDARD : string;
attribute IOSTANDARD of data_in : signal is "LVCMOS18";
attribute IOSTANDARD of clock : signal is "LVCMOS18";
Verilog //SYNTHESIS attribute IOSTANDARD of имя is "атрибут";
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute IOSTANDARD of data_in is "LVCMOS18";
//SYNTHESIS attribute IOSTANDARD of clock is "LVCMOS18";

Open Drain (открытый сток). Выход, который замыкается на землю для выдачи лог. 0, и переходит в высокое сопротивление для выдачи лог. 1, называется сигналом open-drain (для CMOS это открытый сток, для TTL это открытый коллектор). Выход CoolRunner-II может быть сконфигурирован как открытый сток простым декларированием атрибута OPEN_DRAIN в ПО разработки Xilinx. Таблица 12 иллюстрирует синтаксис назначения выходу открытого стока с помощью атрибута OPEN_DRAIN.

Таблица 12. Атрибут OPEN_DRAIN.

Формат атрибута Синтаксис Пример
UCF NET имя OPEN_DRAIN;
NET data_out OPEN_DRAIN;
ABEL XILINX PROPERTY 'OPEN_DRAIN= имя';
XILINX PROPERTY 'OPEN_DRAIN data_out'; 
VHDL attribute OPEN_DRAIN : string;
attribute OPEN_DRAIN of имя: signal is "TRUE";
Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов OPEN_DRAIN.
attribute OPEN_DRAIN : string;
attribute OPEN_DRAIN of data_out : signal is "TRUE";
Verilog //SYNTHESIS attribute OPEN_DRAIN of имя;
Примечание: символы комментария вставлены специально, они необходимы для XST.
//SYNTHESIS attribute OPEN_DRAIN of data_out;

[Ссылки]

1. XAPP378 Using CoolRunner-II Advanced Features site:xilinx.com.
2. CoolRunner II Application Notes site:xilinx.com.
3. XAPP352 Utilizing a UCF for CoolRunner XPLA3 CPLDs site:xilinx.com.
4. CoolRunner-II family data sheet site:xilinx.com.
5. xapp378.zip site:xilinx.com - примеры кода.