Использование продвинутых возможностей 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.
Разработчик в любом дизайне 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. Рис. 1. CoolRunner-II Clock Divider (делитель тактов). Делитель тактов 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.
[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. CoolCLOCK. Функция CoolCLOCK семейства CoolRunner-II это техника комбинирования глобального делителя тактов и регистров DET. Экономия питания достигается делением глобальной тактовой частоты на 2 с передачей пониженной тактовой частоты на внутреннюю цепь тактирования, после чего включается удвоение тактовой частоты на каждой макроячейке. Нулевое отклонение тактов (zero clock skew) может быть достигнуто с помощью вставки нулевой задержки между делителем тактов и регистрами DET. Рис. 3. Функция CoolRunner-II CoolCLOCK. Поскольку может быть поделена только тактовая частота сети тактов GCK2, то функция CoolCLOCK доступна только на GCK2. Функция CoolCLOCK может быть реализована назначением атрибута на входную частоту тактов. Атрибут CoolCLOCK устраняет необходимость инстанциации делителя тактов и регистров DET. Таблица 3 перечисляет методы, доступные для использования атрибута CoolCLOCK. Таблица 3. Атрибут CoolCLOCK.
Примечание: функция 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.
Сигнал активации 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.
Триггер Шмитта. У каждого чипа CoolRunner-II на выводах I/O есть несколько входных буферов, использующихся для разных стандартных конфигураций ввода/вывода. Один из этих входных буферов работает как триггер Шмитта, и это разрешается при конфигурировании CPLD. Вход с триггером Шмитта позволяет разработчику гибко использовать микросхему CoolRunner-II как с высокоскоростными, так и медленными сигналами. Медленно переключающиеся сигналы могут вводить хаос в цифровую систему, давая двойное тактирование или помехи на входе CMOS, однако это можно устранить использованием триггера Шмитта на входе. Платой за триггер Шмитта на входе будет только задержка сигнала на несколько наносекунд. Точное значение для разных чипов и условий использования можно найти в даташите CoolRunner-II (см. [4]). В таблице 6 показан синтаксис атрибута входного буфера в виде триггера Шмитта для определенного сигнала. Таблица 6. Атрибут SCHMITT_TRIGGER.
[Терминирование ввода/вывода] Выводы 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.
Pullup. Внутренняя подтяжка уровня к лог. 1 устраняет необходимость установки на печатной плате соответствующих резисторов pullup, снижая стоимость дизайна и упрощая разводку. Таблица 8 иллюстрирует синтаксис атрибута для терминирования pullup сигналов I/O. Таблица 8. Атрибут PULLUP.
[Конфигурация ввода/вывода] Устройства CoolRunner-II поддерживает несколько банков I/O в одном устройстве, позволяя упростить реализацию в одном чипе подключение к интерфейсам разных стандартов (разных логических уровней напряжения). Устройство может поддерживать один из стандартов I/O для каждого банка (например, у чипа XC2C128 есть 2 банка, и поэтому он может поддерживать до двух стандартных типов I/O). Независимо от того, какой стандарт был выбран, любой вывод может быть сконфигурирован как выход с открытым стоком. Стандарты I/O. Таблица 9 перечисляет стандарты I/O, поддерживаемые устройствами CoolRunner-II. Обратите внимание, что в зависимости от емкости чипа могут поддерживаться не все стандарты. Таблица 9. Стандарты ввода/вывода, которые поддерживает CoolRunner-II.
Рис. 5 показывает, как указать стандарт по умолчанию для I/O, применяемый всеми выводами проекта. Это настраивается в диалоге свойств процесса размещения на кристалле (свойства процесса Fit, раздел Fitting, пункт I/O Voltage Standard). Рис. 5. Глобальный для кристалла выбор стандарта I/O. Если дизайн требует реализации нескольких стандартов I/O в одном устройстве, то каждый вывод должен быть декларирован индивидуально соответствующим атрибутом стандарта I/O. Таблица 10 иллюстрирует доступные атрибуты стандарта I/O, которые можно декларировать. Таблица 10. Атрибуты стандарта ввода/вывода.
Таблица 11 показывает синтаксис для указания атрибута стандарта I/O. Показаны примеры для стандарта низковольтной логики LVCMOS18. Для других стандартов атрибут LVCMOS18 может быть заменен на соответствующее имя, показанное в таблице 10. Таблица 11. Синтаксис атрибута стандарта ввода/вывода.
Open Drain (открытый сток). Выход, который замыкается на землю для выдачи лог. 0, и переходит в высокое сопротивление для выдачи лог. 1, называется сигналом open-drain (для CMOS это открытый сток, для TTL это открытый коллектор). Выход CoolRunner-II может быть сконфигурирован как открытый сток простым декларированием атрибута OPEN_DRAIN в ПО разработки Xilinx. Таблица 12 иллюстрирует синтаксис назначения выходу открытого стока с помощью атрибута OPEN_DRAIN. Таблица 12. Атрибут OPEN_DRAIN.
[Ссылки] 1. XAPP378 Using CoolRunner-II Advanced Features site:xilinx.com. |