Структура FPGA

27
Содержание Введение стр. 2 1. Внутренняя структура ПЛИС стр. 3 1.1 Логические блоки FPGA стр. 3 1.2 Блоки ввода/вывода FPGA стр. 7 1.3 Системы межсоединений FPGA стр. 9 1.4 Обобщенная структура FPGA стр. 14 2. Реализация на VHDL основных цифровых узлов стр. 16 2.1 Логические элементы и дешифраторы стр. 16 2.2 Триггеры и регистры стр. 17 2.3 Счетчики и делители частоты стр. 20 2.4 Мультиплексоры стр. 21 1

Transcript of Структура FPGA

Page 1: Структура FPGA

Содержание

Введение стр. 2

1. Внутренняя структура ПЛИС стр. 3

1.1 Логические блоки FPGA стр. 31.2 Блоки ввода/вывода FPGA стр. 71.3 Системы межсоединений FPGA стр. 91.4Обобщенная структура FPGA стр. 14

2. Реализация на VHDL основных цифровых узлов стр. 162.1 Логические элементы и дешифраторы стр. 162.2 Триггеры и регистры стр. 172.3 Счетчики и делители частоты стр. 202.4 Мультиплексоры стр. 21

1

Page 2: Структура FPGA

ВведениеПрограммируемые пользователем вентильные матрицы (ППВМ или FPGA — Field

Programmable Gate Arrays) топологически сходны с канальными БМК. В их внутренней области размещается множество регулярно расположенных идентичных конфигурируемых логических блоков (КЛБ), между которыми проходят трассировочные каналы, а на периферии кристалла расположены блоки ввода/вывода БВВ (IOВ, Input/Output Blocks). Перечисленные части FPGA составляют их основу, а для первого поколения по существу все, что размещалось на кристаллах. Позднее в состав FPGA стали вводить схемы памяти, схемы управления тактированием и др.

К широко известным классическим FPGA относятся БИС/СБИС фирмы Xilinx, которая в 1985 г. впервые выпустила FPGA с триггерной памятью конфигурации. Среди FPGA с перемычками типа antifuse следует отметить микросхемы фирм Actel и QuickLogic. Другие типы программируемых элементов для FPGA не характерны. Среди микросхем фирмы Xilinx классической архитектурой отличаются семейства ХС4000, Spartan, Spartan II, Spartan НЕ, Spartan-3.

Свойства и возможности FPGA зависят в первую очередь от характера их КЛБ и системы межсоединений.

2

Page 3: Структура FPGA

1. Внутренняя структура ПЛИС

1.1Логические блоки FPGA

В качестве КЛБ (далее для краткости просто ЛБ — логические блоки) используются:

□ транзисторные пары или простые логические вентили (И-НЕ, ИЛИ-НЕ и т. п.). Такие ЛБ называют SLC — Simple Logic Cells;

□ логические модули на основе мультиплексоров;

□ логические модули на основе программируемых ПЗУ, такие ЛБ называют LUTs — Look-Up Tables.

Важной характеристикой ЛБ является их "зернистость" (Granularity). Другой важной характеристикой считается "функциональность" (Functionality).

Первое свойство связано с тем, насколько "мелкими" будут те части, из которых можно "собирать" нужные схемы, второе — с тем, насколько велики логические возможности Л Б.

Примером наиболее мелкозернистого может служить ЛБ, показанный на рис. 1, а. Блок содержит цепочки транзисторов с р- и n-каналами (на рисунке использованы американские обозначения транзисторов, более простые, чем отечественные). Простейшим ЛБ может служить пара из транзисторов разного типа проводимости (выделенный прямоугольник). Между цепочками транзисторов имеются трассировочные каналы, в которых реализуются необходимые межсоединения элементов.

3

Page 4: Структура FPGA

На рис. 1, б показан пример межсоединений, дающих реализацию функции

F = X1X2VX3X4. Пары транзисторов в прямоугольниках из штриховых линий имеют такие постоянные напряжения на затворах, что оказываются запертыми. Эти пары разделяют цепочки на части, изолированные друг от друга. В трех секциях собраны схемы типа рис. 1, в, т. е. ячейки И-НЕ обычного для схемотехники типа КМОП. Эти ячейки соединены между собою как показано на рис. 1, г, что и приводит к нужному результату.

Мелкозернистость ЛБ ведет к большей гибкости их использования, возможностям реализовать воспроизводимые функции разными способами, получая разные варианты в координатах "площадь кристалла — быстродействие". В то же время мелкозернистость ЛБ усложняет систему межсоединений FPGA в связи с большим числом программируемых точек связи.

Примерами более крупнозернистых ЛБ могут служить блоки микросхем фирмы Actel. ЛБ, состоящий из трех мультиплексоров "2—1" и элемента ИЛИ, для которого воспроизводимая функция

Подключая ко входам ЛБ переменные и константы, можно получить все комбинационные функции двух переменных, все функции трех переменных с, по меньшей мере, одним положительно юнатным входом, многие функции четырех переменных и некоторые функции большего числа переменных, вплоть до восьми. В целом получаются 702 различных варианта (макроса). Например, подключая к входам переменные и константы согласно рис. 2, где S0 = с; S1 = SA= В0 = 0, А0 = A1 = 1, B1 = a, SB= b, получим функцию F = ab\/c .

4

Рис. 1. Схема мелкозернистых логических блоков (а), реализация межсоединений для воспроизведения функции X1X2VX3X4 (б) и пояснения к этой реализации (в, г)

Page 5: Структура FPGA

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

Крупнозернистые блоки, в частности, характерны для семейств FPGA фирмы Xilinx. Архитектурная основа этих блоков была заложена при создании семейства ХС4000, КЛБ которого содержит три. табличных функциональных преобразователя, два триггера и 16 программируемых мультиплексоров. В последующих FPGA высокой сложности (семействах Virtex) логические блоки были несколько упрощены. Такие обновленные КЛБ были затем использованы в микросхемах семейства Spartan, современного семейства FPGA средней сложности. Логический блок микросхем семейства Spartan в несколько упрощенном виде показан на рис. 3.

5

Рис. 2. Пример реализации функции F = abVс с помощью мультиплексорного

логического блока

Рис. 3. Схема КЛБ семейства Spartan

Page 6: Структура FPGA

В функциональных блоках этих микросхем логические преобразования вы-полняются тремя LUT-блоками (Look-Up Tables) G, F и Н. Преобразователи G и F — программируемые запоминающие устройства (ЗУ) с организацией 16x1, способные воспроизводить любые функции четырех переменных, значения которых могут быть переданы на выходы Y и X через мультиплексоры 4 и 6 при соответствующем их программировании (через линии верхних входов мультиплексоров).

Заметим, что на рисунках, как и ранее, в обозначениях мультиплексоров не отражена их программируемость, поскольку все они без исключения обладают этим свойством.

Через верхний вход мультиплексора 1 и нижний вход мультиплексора 2 функции G и F могут быть поданы на ФП-Н (H-LUT — ЗУ с организацией 8x1) для образования "функции от функций" с целью получения результирующей функции, зависящей от более чем четырех аргументов. К третьему входу ФП-Н (H-LUT) подключен входной сигнал HI, так что Н = f (G, F, HI). Аргументами для ФП-Н (H-LUT), поступающими от мультиплексоров 1 и 2 в зависимости от их программирования может быть не только набор G, F, HI, но также наборы G, HI, DIN; SR, HI, DIN; SR, HI, F. Линии DIN (Data Input) и SR (Set/Reset) используются либо для передачи в триггер непосредственно входных данных и сигнала установки/сброса, либо как входы ФП-Н (H-LUT).

Перечисленные ресурсы логической части ФБ позволяют воспроизводить следующие функции:

□ любую функцию с числом аргументов до 4 включительно плюс вторую такую же функцию плюс любую функцию с числом аргументов до трех;

□ любую функцию 5 аргументов (одну);□ любую функцию 4 аргументов и одновременно некоторые функции 6 аргументов,

некоторые функции с числом аргументов до 9.

Сигналы HI, DIN, SR, ЕС являются для ФБ входными, они подаются на его внутренние схемы через группу из четырех мультиплексоров MUX размерностью "4—1" (на рисунке не показаны), к которым подключены 4 линии внешней шины управления. Это позволяет распределять сигналы HI, DIN, SR и ЕС по внешним линиям управления в любом желаемом варианте.

Мультиплексоры 3—6 направляют те или иные сигналы на триггеры 1 и 2. Триггеры могут использоваться для фиксации и хранения выходных сигналов функциональных преобразователей или же работать независимо от них. Входной сигнал ФБ DIN может быть прямым входом для любого триггера. Сигнал HI тоже можно передавать любому триггеру, но через ФП-Н (Н- LUT), что вносит в цепь его передачи некоторую задержку.Оба триггера имеют общие входы СК тактирования от сигнала К, разрешения тактирования ЕС и установки/сброса SR. Внутренние программируемые цепи в схеме триггера (на рис. 3 не показаны) позволяют индивидуально программировать полярность тактирующего сигнала СК. Сигнал ЕС син-хронизирован с сигналом СК, сигнал SR асинхронный и для каждого триггера с использованием внутренних цепей триггера программируется как сигнал установки или сброса. Этот сигнал определяет состояние, в котором окажется триггер после процесса конфигурации микросхемы. Конфигурация определяет и характер воздействия на триггеры импульсов GSR (Global SR) и SR при работе схемы.

6

Page 7: Структура FPGA

1.2 Блоки ввода/вывода FPGA

Характерные черты блока ввода/вывода рассмотрим на примере семейства Spartan (рис. 4). Каждому выводу корпуса микросхемы придается блок ввода/вывода, который может конфигурироваться как вход, выход или двунаправленный вывод.

Режим выходного блока обслуживается следующими элементами: выходным буфером 1, триггером 1, мультиплексорами 1, 2, 5 и логической схемой ИЛИ. Выводимый сигнал О можно получать в прямой или инверсной форме в зависимости от программирования мультиплексора 2. Этот сигнал может передаваться на выходной буфер непосредственно или сниматься с триггера при соответствующем программировании мультиплексора 5. Сигналы Т и GTS (Global Tri State) согласно логике ИЛИ управляют переводом буфера в третье состояние, причем активный уровень сигнала Т программируется с помощью мультиплексора 1. Внутренние программируемые цепи триггера (на рисунке не показаны) позволяют изменять полярность тактирующего фронта. Сам буфер имеет программируемые крутизну фронта выходного сигнала и его уровни (КМОП/ТТЛ). Крутизна фронтов в некритичных к скорости передачи цепях снижается для уменьшения уровня помех на шинах питания и земли. Используется так называемый мягкий cmapm (Soft Start Up), снижающий помехи при конфигурировании схемы и ее переходе к рабочему режиму, когда одновременно активизируются многие буферы. Первая активизация автоматически происходит с пологими фронтами перепадов напряжения. Затем вступает в силу заданный выбор крутизны фронтов в зависимости от принятой конфигурации БВВ.

Тракт ввода сигналов содержит входной буфер 2, триггер 2, программируемые мультиплексоры 3, 4, 6, элемент задержки ЭЗ (DEL) и программируемые схемы задания определенных потенциалов выводу, к которому не подключен вводимый или выводимый сигнал (схемы Pull Up/Pull Down). Вводимый сигнал в зависимости от программирования мультиплексоров 3 и 4 или поступает непосредственно в систему коммутации FPGA по входным линиям I1 и I2 или же фиксируется триггером и с его выхода передается в эти линии. Триггеры могут конфигурироваться как тактируемые фронтом или как защелки (D-триггеры, управляемые уровнем). Выбор осуществляется присвоением триггеру соответствующего библиотечного символа. В цепи передачи сигнала триггеру 2 могут быть включены элементы задержки (при передаче сигнала через нижний вход мультиплексора 6). Включение задержки гарантирует необходимые временные соотношения между входными сигналами триггера D и глобальным сигналом тактирования.

7

Page 8: Структура FPGA

Входной буфер может конфигурироваться для восприятия входных сигналов с пороговым значением ТТЛ (1,2 В) или КМОП (0,5 Ucc). Выходные уровни тоже конфигурируются, две глобальные регулировки входных порогов и выходных уровней независимы.

8

GTS

Рис. 4. Пример схемы блока ввода/вывода FPGA

Page 9: Структура FPGA

1.3 Системы межсоединений FPGA

Системы межсоединений (коммутации), как и логические блоки, реализуются в широком диапазоне архитектурных и технологических решений. Линии связей в FPGA сегментированы, т. е. составлены из отдельных проводящих сегментов (участков, не содержащих ключей). Сегменты соединяются друг с другом программируемым элементом связи (ключом). В системе межсоединений применяются сегменты различной длины. Малое количество сегментов (при их большой длине) ведет к недостаточно эффективному использованию логических блоков, слишком большое (при их малой длине) — к появлению большого числа программируемых ключей в линиях связи, что увеличивает затраты площади кристалла и вносит дополнительные задержки сигналов.Короткие сегменты затрудняют реализацию длинных связей, длинные — коротких. Поэтому целесообразна иерархическая система связей с несколькими типами межсоединений для передач на разные расстояния. Целью построения системы связей является обеспечение максимальной коммутируемости блоков при минимальном количестве ключей и задержек сигналов, а также по возможности предсказуемость задержек, облегчающая проектирование устройств на основе FPGA. Наличие ключей и схем для их программирования усложняет межсоединения FPGA сравнительно с межсоединениями БМК.

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

Система межсоединений фирмы Actel. В разработке FPGA с однократным программированием перемычками antifuse важную роль играет фирма Actel. Логические блоки в FPGA этой фирмы располагаются в виде горизонтальных рядов, между которыми имеются трассировочные каналы. В каналах горизонтально в четыре строки расположены сегменты различной длины и различного взаимного положения по горизонтали. Через ЛБ и трассировочные каналы проходят вертикальные сегменты. Каждый вход ЛБ соединен со своим вертикальным сегментом, пересекающим ближайший канал. Выход ЛБ имеет свой вертикальный сегмент, пересекающий несколько каналов (рис. 5).

9

Page 10: Структура FPGA

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

На рис.5 показаны ЛБ с четырьмя входами, имеющими выводы в ближайший трассировочный канал. Кружками обозначены программируемые перемычки, позволяющие создавать связи между линиями пересечения. Выходы ЛБ соединены с вертикальными сегментами, пересекающими два канала выше данного ряда и два канала ниже его. Имеются ключи, связывающие при необходимости концы горизонтальных сегментов друг с другом для удлинения линий связи.В каналах имеются также непрерывные по всей длине сегменты, один из которых заземлен, а другой соединен с источником питания, что позволяет подавать на любой из входов ЛБ сигналы логического нуля или логической единицы. В вертикальных направлениях идут также неспециализированные сегменты, пересекающие несколько рядов ЛБ и трассировочных каналов. Каждый такой вертикальный сегмент может соединяться с горизонтальными, которые он пересекает. К таким сегментам есть связи от выходов соседних ЛБ. Наличие неспециализированных вертикальных сегментов увеличи-вает трассировочную способность системы коммутации.

На рис. 5 для примера показаны зачерненными кружками те перемычки, которые должны быть запрограммированы для подачи сигнала с выхода ЛБ1 на входы блоков ЛБ2 и ЛБЗ.

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

10

Рис. 5. Система коммутации FPGA фирмы Actel (для упрощения рисунка пересечения горизонтальных и вертикальных линий без их соединения, т. е. незапрограммированные

перемычки, показаны просто светлыми кружками)

Page 11: Структура FPGA

образом. Вначале выполняется предзаряд всех сегментов напряжением Uпр/2. Для этого в схеме имеются специальные транзисторные ключи, включенные параллельно перемычкам и используемые только при программировании и тестировании FPGA. В рабочих режимах ключи заперты и практически не влияют на работу схемы. При замыкании всех этих ключей сегменты соединяются в единые линии, которым и задают необходимые потенциалы. Для замыкания перемычки воздействуют на линии строки и столбца, в пересечении которых находится перемычка. Одна из этих линий заземляется, а другая подсоединяется к напряжению Uпр. Как видно, при этом только перемычка на пересечении адресующих линий попадает под напряжение Uпр. Все остальные попадают под напряжение Uпр/2, не пробивающее перемычку. Транзисторы логических блоков и блоков ввода/вывода, находящиеся в контакте с сегментами и при программировании перемычек попадающие под повышенное напряжение, специально проектируются с необходимой электрической прочностью. Тестирование FPGA производится многократно — до, во время и после программирования.

Система межсоединений FPGA фирмы Xilinx. Это иерархическая система, включающая в себя связи общего назначения (General-Purpose Interconnects), длинные линии (Long Lines), прямые связи (Direct Interconnects), линии тактирования (Clock Lines).Не все перечисленные разновидности связей встречаются одновременно в одной FPGA. Связи общего назначения имеются у всех FPGA, а прямые связи, например, не у всех.

Связи общего назначения FPGA, типичные для микросхем фирмы Xilinx, показаны рис. 6, a. В этой системе коммутации переключательные блоки ПБ расположены на пересечении горизонтальных и вертикальных трассировочных каналов, каждый из которых имеет восемь линий.

а

11

б вРис. 6. Схема связей общего назначения с линиями одинарной длины (а) и схема

переключательного блока (б, в ) FPGA семейства ХС4000Е

Page 12: Структура FPGA

Линии могут иметь одинарную длину (соединяя соседние переключательные блоки ПБ) или двойную (соединяя ПБ через один для сокращения числа ПБ в длинных путях). На рис. 6, а показана схема с одинарными линиями. Связи общего назначения позволяют подводить сигналы к разным сторонам логического блока ПБ. Крестиками отмечены программируемые точки связи.

Структура одного ПБ показана на рис. 6, б. Она позволяет передавать сигналы влево-вправо или вверх-вниз между смежными одинарными линиями, а также изменять направление передачи сигнала. Схема, соответствующая зачерненному квадрату (рис. 6, в), показана отдельно. Видно, что для обеспечения перечисленных передач в эту схему должны входить 6 ключевых транзисторов. Прохождение сигналов через ПБ вносит в процесс распространения сигнала задержку, зависящую от конкретного пути, что создает проблему возможных гонок сигналов и сбоев в работе схемы.

12

Рис. 7. Схема связей общего назначения с линиями двойной длины FPGA ХС4000Е

Page 13: Структура FPGA

Для ускорения и упрощения дальних передач приняты специальные меры. Наряду со связями общего назначения, показанными на рис. 6, имеются связи с линиями двойной длины, в которых переключательные блоки соединены через один, что уменьшает их число при дальних передачах. Фрагмент таких связей представлен на рис. 7.Для передач на большие расстояния с очень малой задержкой или для передач на разные приемники с малым расфазированием сигналов служат длинные линии (здесь термин "длинные линии" имеет прямой смысл, и его не следует путать с аналогичным термином, употребляемым при согласовании волновых сопротивлений в ином смысле). Длинные линии пересекают кристалл вдоль или поперек по всей его длине или ширине (на рисунках не показаны).

В микросхемах фирмы Xilinx применяются несколько типов длинных линий: горизонтальные и вертикальные линии (по несколько на каждую строку и столбец логических блоков), линии для тактирования блоков ввода/вывода (по две линии вдоль блоков ввода/вывода), так называемые глобальные линии с выходами на определенные БВВ, и линии для распределенных дешифраторов. При этом на каждый Л Б приходится по 8 горизонтальных и вертикальных связей с линиями одинарной длины, по 4 с линиями двойной длины, по 6 горизонтальных и вертикальных длинных линий, 4 вертикальных глобальных длинных линии и 2 линии (вертикальных) для образования цепей переноса при построении сумматоров, счетчиков и т. д. Всего на каждый логический блок приходится 24 вертикальных линии и 18 горизонтальных (рис. 8).

13

Рис. 8. Общие ресурсы связей этой микросхемы.

Page 14: Структура FPGA

1.4 Обобщенная структура FPGA

Ряд факторов, в первую очередь различия в зернистости логических блоков, обуславливают неоднозначность топологической структуры FPGA. Так, например, для FPGA с логическими блоками в виде транзисторных цепочек внутренняя область выполняется в виде совокупности строк, образуемых этими цепочками (строчные FPGA). Преобладающей в настоящее время стала структура, показанная в упрощенном виде на рис. 9, а.

Во внутренней области FPGA расположены по строкам и столбцам конфи-гурируемые логические блоки КЛБ (для упрощения рисунка показано малое число КЛБ, в реальных FPGA их число на порядки больше, это же относится и к числу других блоков, показанных на рис. 9, а). Кроме КЛБ FPGA содержит переключательные блоки ПБ (SB, Switch Blocks) и связные блоки СБ (СВ, Connection Blocks), обеспечивающие коммутацию КЛБ.

Связные блоки реализуют соединения выводов КЛБ с линиями вертикальных и горизонтальных трассировочных каналов общего назначения. Схема СБ показана увеличено (раскрыта) на рис. 9, б на примере связей двух соседних по горизонтали КЛБ с вертикальным трассировочным каналом. На пересечениях линий выводов КЛБ с линиями каналов размещаются программируемые точки связей, одна из которых показана кружком в укрупненном виде. Программируемые точки связей имеются во всех пересечениях, но во избежание загромождения рисунка они не изображены. С помощью СБ сигналы КЛБ выводятся в трассировочные каналы.

Переключательные блоки коммутируют линии трассировочных каналов. Их устройство рассмотрено ранее (см. рис. 6, б). Они позволяют переключать линии передачи сигналов, поступающих в блок, на любое направление (прямо, влево, вправо).Средства коммутации, связанные с блоками ввода/вывода, сведены в так называемый VersaRing, окружающий внутреннюю область кристалла. Они связывают БВВ с каналами трассировки КЛБ. С помощью средств VersaRing можно перераспределять внешние контакты микросхемы относительно выводов, сформированных во внутренней области кристалла. Это повышает функциональную гибкость и универсальность FPGA, при модификациях проекта позволяет сохранять неизменной распайку контактов микросхемы на плате.

а

14

Page 15: Структура FPGA

В углах кристалла обычно размещают специализированные устройства, в бы-стродействующих FPGA прежде всего средства управления тактовыми сигналами, к которым относятся блоки DLL или PLL. На рис. 9.19 блок указанного назначения обозначен термином Clock Manager. В угловых областях кристалла нередко помещают и такие устройства, как генераторы тактовых сигналов, схемы обслуживания граничного сканирования кристалла по интерфейсу JTAG и др.

На упрощенной структуре рис. 9. не отображены такие средства коммутации, как ПБ со связями двойной длины для коммутации КЛБ, прямые связи между соседними КЛБ и длинные линии для передачи сигналов на большие расстояния. Эти средства коммутации рассмотрены ранее при описании FPGA фирмы Xilinx.

15

Рис. 9. Обобщенная структура FPGA (а) и схема связного блока (б)

Page 16: Структура FPGA

2. Реализация на VHDL основных цифровых узлов

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

2.1 Логические элементы и дешифраторы

Эти элементы относятся к базовым узлам, повсеместно использующимся в цифровой схемотехнике. Они представляют собой асинхронные цифровые устройства, реализующие некоторую логическую функцию, описываемую соответствующим выражением. Логические выражения представляются в VHDL с помощью следующих операторов: and, or, xor, not, =, /=. Такой синтаксис соответствует общепринятому в языках программирования (за исключением /=, обозначающего отношение «не равно»).

Можно отметить, что средства синтеза освобождают разработчика от необходимости вручную проводить оптимизацию схемотехнического решения на основе анализа таблиц истинности. Эта задача часто является актуальной при построении устройств комбинаторной логики на базе дискретных компонентов, поскольку одной и той же таблице истинности обычно соответствует множество схемотехнических реализаций. САПР избавляет разработчикаот подобных рутинных операций. Более того, микросхемы программируемой логики реализуют таблицу истинности в виде фрагментов памяти, поэтому логические элементы как таковые в них не присутствуют. Благодаря этому 4-входовый логический элемент займет одну таблицу истинности (Look-Up Table, LUT), вне зависимости от того, какую именно логическую функцию он реализует.

Самый простой способ задания элемента комбинаторной логики - использование оператора условного присваивания.

q <= '1' when а = '1' and b = '0' else '' ;

Более сложные условия могут быть заданы в конструкции with...select, пример использования которой был приведен при описании дешифратора для 7-сегментного индикатора.

Данные формы записи должны использоваться вне блока process, поскольку они описывают асинхронные элементы.

В качестве примера рассмотрим формирование некоторого условия на основе анализа сигналов a и b.

architecture Behavioral of example_selector issignal Selector : std_logic_vector(1 downto 0) ;beginSelector(0) <= a;Selector(1) <= b;with Selector select

q <= '1' when "00 " ,' 1 ' when "01",' 0 ' when "10",'1' when "11",'0' when others;

После ключевого слова architecture было записано объявление переменной Selector, в отдельных разрядах которой асинхронно отображаются сигналы а и b. Такое объявление не приведет к использованию дополнительных ресурсов ПЛИС, поскольку назначение

16

Page 17: Структура FPGA

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

Дешифратор может рассматриваться как несколько отдельных логических элементов, выходы которых образуют многоразрядный сигнал, рассматриваемый в совокупности отдельных образующих его логических линий. Например, дешифратор D2_4E из стандартной библиотеки ISE имеет следующую внутреннюю структуру (назначение дешифратора - установить сигнал логической единицы на одном из выходов D0-D3 в соответствии с двоичной комбинацией на входах АО, А1; при этом вход Е действует как вход глобального разрешения работы) (рис. 10).

Рис. 10. Эквивалентная электрическая схема дешифратора

2.2 Триггеры и регистры

Триггер (англ. Flip-Flop) представляет собой простейшее синхронное устройство, имеющее вход данных d, вход тактового сигнала clk и выход данных q. По фронту тактового сигнала состояние входа данных d записывается в выход q. Таким образом, триггер представляет собой простейшее устройство хранения 1 бита данных.

Простейшим способом избежать перезаписывания состояния триггера является снятие тактового сигнала. Например, можно воспользоваться элементом 2И, на один из входов которого подается тактовый сигнал, а на второй - сигнал разрешения. Обозначим сигнал разрешения как се (clock enable) и построим таблицу истинности для такого элемента.

Clk Ce Clk_out0 0 01 0 00 1 01 1 1

17

Page 18: Структура FPGA

Из таблицы видно, что выходной сигнал clk_out отсутствует при се - 0, а при се = 1 он повторяет состояние входа clk. Таким образом, управляя сигналом се, можно обеспечить перезаписывание состояния триггера только в необходимые моменты. Такой подход полностью корректен с точки зрения функционального описания, однако приводит к появлению неудачного для ПЛИС схемотехнического решения - gated clock, дословно: тактовый сигнал, проходящий через логический вентиль (gate). Поскольку в ПЛИС логические функции реализуются с помощью LUT, которые вносят дополнительные задержки, может оказаться, что триггеры ПЛИС будут получать тактовые сигналы в разные моменты времени. Это может привести к трудно обнаруживаемым ошибкам, особенно при конвейеризованной обработке данных и наличии обратных связей внутри проекта. Поэтому общей рекомендацией является отказ от использования логических элементов для управления тактовым сигналом, поскольку каждый триггер ПЛИС уже имеет в своем составе специальный вход разрешения записи, который и называется се.

Кроме того, в состав триггера могут быть включены входы сброса и установки, приводящие триггер в состояние логического нуля и логической единицы соответственно. Кроме того, сброс и установка могут происходить как строго по фронту тактового сиг-нала (синхронно), так и в произвольный момент времени (сразу после появления соответствующего сигнала). Наименования сигналов сброса и установки триггеров, используемые в библиотеках графических обозначений САПР ISE, приведены в таблице.

Установка 0 1Синхронная Reset (R) Set (S)Асинхронная Clear CLR) Preset (PRE)

Логические ячейки ПЛИС Spartan обладают несколько ограниченными функциональными возможностями по сравнению с серией Virtex. В частности, триггеры логических ячеек имеют только один вход сброса/установки, с помощью которого можно реализовать любую из этих функций, но не обе сразу. Практика показывает, что потребность в сложных триггерах, требующих введения разнообразных входов сброса и установки, возникает не слишком часто, поэтому такой подход для ПЛИС низкой стоимости вполне оправдан.

Объединение нескольких триггеров, имеющих общий тактовый вход, образует регистр - устройство для хранения данных (рис. 11).

Обычный триггер описывается следующим фрагментом текста на VHDL:

process (clk) beginif clk'event and clk = ' 1' then

q <= d;end if; end process;

18

Page 19: Структура FPGA

Рис. 11. Формирование регистра из набора триггеров

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

process (clk) beginif clk'event and clk = '1' then

if ce = '1' thenq <= d; end if;

end if; end process;

Модифицируя этот текст далее, можно описать, например, триггер с входами асинхронного сброса и синхронной установки.

process (clk, clear)beginif clear = '1' then q <= '0';

elsif clk'event and clk = '1' then if set = '1' then q <= '1';

elsif се = '1' thenq <=d;

19

Page 20: Структура FPGA

end if; end if; end process;

В этом примере использовано сложное условие, устанавливающее приоритет отдельных управляющих сигналов. Аналогично можно реализовать другие разновидности триггеров.

2.3 Счетчики и делители частоты

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

Поскольку счетчик создается путем каскадного соединения триггеров, он в общем случае может иметь те же вспомогательные сигналы управления - вход разрешения счета, синхронного и асинхронного сброса или установки. Специфическим для счетчика является вход направления счета (увеличение/уменьшение). Кроме того, отдельные разряды счетчика могут устанавливаться независимо, что в конечном итоге может рассматриваться как начальная загрузка - запись в счетчик некоторой константы.

В качестве примера рассмотрим простейший вариант 8-разрядного счетчика, в дальнейшем наращивая его функциональность. В качестве собственно значения счетчика условимся использовать сигнал st (от state - состояние).

Port ( st : inout std_logic__vector (7 downto 0)...Process(clk)beginif clk'event and clk = '1' then

st <= st + 1; end if;end process;

Обратим внимание, что сигнал st объявлен как inout, т. е. двунаправленный. Это требуется потому, что в выражении st <= st + 1 этот сигнал присутствует и в левой и в правой части, т. е. требуется как считывание этого сигнала (in), так и запись (out).

Можно модифицировать представленный пример, введя в счетчик вход начальной загрузки. При этом загружаемое число будет подаваться на отдельный вход d, а сигнал управления загрузкой обозначим как load.

process(clk) beginif clk'event and clk = '1' then

if load = '1' then st <= d; else st <= st + 1;

end if; end if;

20

Page 21: Структура FPGA

end process;

Делитель частоты может быть легко реализован на базе счетчика. Однако вместо многоразрядного сигнала state делитель частоты имеет единственный выход (обозначим его как q). Таким образом, сигнал state можно считать внутренним и объявить его после ключевого слова architecture.

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

Текст на VHDL, реализующий делитель на 5, представляет собой минимально модифицированный счетчик:

process(clk) beginif clk'event and clk = '1' then

if conv_integer(st) = 4 thenst <= conv_std_logic_vector(0, 3);

else st <= st + 1; end if;

end if; end process;q <= '1' when conv_integer(st) = 4 else '0';

В приведенном примере увеличения значение счетчика производится только в том случае, если оно еще не достигло четырех. В противном случае переменной st присваивается нулевое значение и цикл счета повторяется. Проверка равенства st четырем производится вне блока process, поскольку выходной сигнал в данном случае формируется асинхронно.

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

2.4 Мультиплексоры

Существует два основных способа реализации мультиплексоров: на базе комбинаторной логики и на базе буферов с тремя состояниями. Варианты реализации мультиплексора на базе обоих подходов приведены в таблице. При этом подразумевается, что информационные входы обозначены как а и b, выход - как q, а управляющий сигнал - как s.

Логика Буферы с тремя состояниямиq <= a when s = '0' else b; q <= a when s = '0' else 'Z';

q <= b when s = '1' else 'Z';

Из сравнения текстов видно, что для размещения в проекте буфера с тремя состояниями необходимо явно указать сигнал с состоянием 'Z'

21

Page 22: Структура FPGA

С помощью конструкции with... select можно получить мультиплексоры с числом мультиплексируемых входов большим, чем 2, как было в приведенном примере.

with conv_integer(s) select q <= a when 0,

b when 1,с when 2,d when others;

Данный пример описывает мультиплексор «4 в 1». Еще раз обратим внимание, что вместо очевидного условия 3 в последнем варианте выбора было использовано выражение when others, которое требуется транслятору VHDL для завершения такой конструкции.

Мультиплексоры являются достаточно распространенным типом цифровых узлов. Особенности их применения в ПЛИС основаны на том, что для реализации многовходовых мультиплексоров требуется последовательное размещение логических ячеек. Таким образом, общая задержка распространения сигнала может существенно возрасти. При реализации мультиплексоров с помощью буферов с тремя состояниями они соединяются параллельно независимо от числа мультиплексируемых линий. Однако задержка распространения сигнала в таких буферах оказывается больше, чем задержка на логической ячейке. Далее, логические ячейки современных FPGA имеют в своем составе дополнительные ресурсы, которые облегчают построение многовходовых мультиплексоров (вплоть до «8 в 1» в одном slice), поэтому актуальность использования буферов с тремя состояниями в мультиплексорах уменьшается. Тем не менее иногда бывает полезно рассмотреть такую возможность, особенно в случаях, когда мультиплексируемые линии представляют собой результат работы устройств, выполняющих арифметико-логические операции. В этом случае ресурсы ячеек, которые в общем случае предполагается использовать для реализации мультиплексора, оказываются уже занятыми, что требует привлечения дополнительных ячеек. В то же время выходные буферы с тремя состояниями, установленные на выходе ячеек, выполняющих арифметико-логические операции, могут быть эффективно использованы для реализации выходного мультиплексора без привлечения дополнительных ресурсов.

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

22