Использование продвинутых возможностей 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
Реализуйте регистр с активацией по обоим перепадам тактов.
Разработчик в любом дизайне 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)
beginif (clock_event) then
...
endif;
end process;
The following Verilog syntax would be used to infer a DET register in CoolRunner-II.
always @ (negedge clock orposedge 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 имеет встроенную схему задержки. Когда функция задержки разрешена, выход делителя тактов задерживается на один полный цикл тактов. Когда используется делитель тактов, он не выводит положительный перепад тактов до тех пор, пока делитель не достигнет предельного значения счетчика (terminal count value). Функция задержки разрешается или запрещается при конфигурировании. Тип инстанциации компонента делителя тактов будет определяться, если задержка разрешена или запрещена. Рис. 2 показывает диаграмму времени делителя тактов CoolRunner-II с разрешенной и запрещенной задержкой.
Рис. 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.
Чтобы разработать делитель тактовой частоты CoolRunner-II на VHDL, требуется и декларация компонента, и его инстанциация. Декларация компонента включает имя и интерфейс блока делителя (clock divider unit). Синтаксис декларации компонента VHDL для использования деления тактовой частоты на 2 (компонент CLK_DIV2):
componentCLK_DIV2is
port (
CLKIN :inSTD_LOGIC;
CLKDV :outSTD_LOGIC );
endcomponent;
Инстанциация компонента делителя тактовой частоты связывает сигналы с портами этого компонента. Если частота тактов делится на 2, то должен инстанцироваться компонент CLK_DIV2. Входящий тактовый сигнал clk декларируется на порт CLKIN, и выходной сигнал делителя clk_div_by_2 декларируется на выходной порт CLKDV. Ниже показан синтаксис VHDL для инстанциации компонента CLK_DIV2.
U1: CLK_DIV2
portmap(
CLKIN => clk,
CLKDV => clk_div_by_2 );
Если такты делятся на 16, и нужен синхронный сброс и стартовая задержка, то должен декларироваться и инстанцироваться компонент CLK_DIV16RSD. Синтаксис VHDL для декларации показан ниже.
componentCLK_DIV16RSDis
port (
CLKIN :inSTD_LOGIC;
CDRST :inSTD_LOGIC;
CLKDV :outSTD_LOGIC );
endcomponent;
Инстанциация компонента назначает сигналы портов. Входной сигнал тактов clk декларируется на порт CLKIN. Сигнал сброса делителя clk_div_rst декларируется на порт CDRST. Выход делителя clk_div_by_16 декларируется на порт CLKDV. Этот компонент также разрешает схему стартовой задержки в делителе тактов CoolRunner-II. Синтаксис инстанциации компонента CLK_DIV16RSD на VHDL:
Запрись дизайна Verilog с XST не требует декларации компонента, нужна только его инстанциация. Здесь показан синтаксис Verilog для инстанциации компонента CLK_DIV16RSD. Входной сигнал clk назначается на порт CLKIN. Сигнал сброса делителя clk_div_rst назначается на порт CDRST. Сигнал выхода делителя clk_div_by_16 назначается на порт CLKDV.
Для языка ABEL разработка делителей тактов CoolRunner-II требует и декларации, и инстанциации компонента. Делитель тактов должен декларироваться как внешний компонент:
CLK_DIV2R external (CLKIN, CDRST -> CLKDV);
Инстанциация компонента на ABEL происходит путем назначения идентификатора компоненту делителя тактовой частоты. В этом примере U1 это назначаемый идентификатора для компонента делителя CLK_DIV2R, назначение происходит с помощью ключевого слова functional_block языка ABEL.
U1 functional_blockCLK_DIV2R;
Следующие выражения иллюстрируют отображение портов (port mapping) компонента. Входная тактовая частота clk отображается на порт CLKIN. Сигнал сброса делителя clk_div_rst отображается на порт CDRST. Выходной сигнал делителя clk_div_by_2 назначается на выходной порт CLKDV.
1. Сигнал, назначенный на порт CDRST, будет автоматически отображен на вывод CDRST I/O. 2. Выход схемы делителя тактов доступен только в качестве входного сигнала для регистров внутри CPLD. Выход делителя тактов не может использоваться в комбинаторной логике, и не может быть направлен наружу из чипа через внешние выводы. 3. Делитель тактовой частоты доступен в чипах CoolRunner-II, у которых количество макроячеек 128 и больше.
CoolCLOCK. Функция CoolCLOCK семейства CoolRunner-II это техника комбинирования глобального делителя тактов и регистров DET. Экономия питания достигается делением глобальной тактовой частоты на 2 с передачей пониженной тактовой частоты на внутреннюю цепь тактирования, после чего включается удвоение тактовой частоты на каждой макроячейке. Нулевое отклонение тактов (zero clock skew) может быть достигнуто с помощью вставки нулевой задержки между делителем тактов и регистрами DET.
Рис. 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 :signalis"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.
Рис. 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 :signalis"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 :signalis"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 :signalis"TRUE";
attribute SCHMITT_TRIGGER of clock :signalis"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 :signalis"TRUE";
attribute KEEPER of clock :signalis"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 :signalis"TRUE";
attribute PULLUP of clock :signalis"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).
Рис. 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.
attribute IOSTANDARD : string; attribute IOSTANDARD of имя: signal is "атрибут"; Примечание: атрибут строки должен быть декларирован только один раз для всех атрибутов IOSTANDARD.
attribute IOSTANDARD :string;
attribute IOSTANDARD of data_in :signalis"LVCMOS18";
attribute IOSTANDARD of clock :signalis"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 :signalis"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 - примеры кода.