Учебное пособие "Цифровая обработка сигналов на ПЛИС Xilinx"

advertisement
Министерство образования и науки Российской Федерации
Уральский
федеральный
университет
имени первого Президента
России Б.Н.Ельцина
А.Г. Долматов
ЦИФРОВАЯ ОБРАБОТКА
СИГНАЛОВ НА ПЛИС XILINX
Электронный образовательный ресурс УрФУ
Учебное пособие по дисциплине «Технические средства цифровой обработки
сигналов» для студентов направления 210400 – Радиотехника, магистерских программ:
Микроволновая техника и антенны, Обработка сигналов и изображений в
радиоэлектронных системах, Радиоэлектронные системы локации, навигации и
управления, направления 210700 – Инфокоммуникационные технологии и системы
связи, магистерская программа: Радиоэлектронные системы и устройства
телекоммуникаций
Подготовлено кафедрой «Радиоэлектронные и телекоммуникационные системы».
Рассмотрены
вопросы
реализации
цифровой
обработки
сигналов
на
программируемых логических интегральных схемах производства Xilinx. Выполнен
обзор архитектуры FPGA ПЛИС Xilinx. Рассмотрена технология визуального
проектирования на базе программ Matlab компании MathWorks и System Generator из
состава Xilinx ISE Design Suite.
Екатеринбург
2011
ОГЛАВЛЕНИЕ
Введение ....................................................................................................................... 4
1
Реализация архитектуры FPGA в ПЛИС Xilinx ................................................. 5
1.1 Структура кристаллов ПЛИС архитектуры FPGA ...................................... 5
1.2 Конфигурируемые логические блоки ........................................................... 8
1.2.1
КЛБ Virtex ................................................................................................ 8
1.2.2
КЛБ Spartan-3 ........................................................................................ 12
1.3 Встроенные блоки памяти............................................................................ 15
1.4 Встроенные блоки умножителей ................................................................. 19
1.5 Система синхронизации FPGA .................................................................... 20
2
1.5.1
Основные элементы системы синхронизации FPGA ........................ 20
1.5.2
Блок DLL ................................................................................................ 22
1.5.3
Варианты применения DLL для синхронизации схем ...................... 24
1.5.4
Блок DCM .............................................................................................. 27
1.5.5
Блок CMT ............................................................................................... 31
1.5.6
Основы применения модулей PLL ...................................................... 35
Технология визуального проектирования систем цифровой обработки
сигналов на ПЛИС Xilinx ......................................................................................... 44
2.1 Краткий обзор технологии визуального проектирования Xilinx ............. 44
2.2 Основы работы в Simulink ........................................................................... 54
2.2.1
Первая SysGen-модель в Simulink ....................................................... 54
2.2.2
Подсистемы и документирование модели ......................................... 63
2.2.3
Маскированные подсистемы ............................................................... 66
2.3 Основы применения технологии Xilinx ...................................................... 71
2.3.1
Типы данных в System Generator, интерфейс с Simulink .................. 71
2.3.2
Блок System Generator........................................................................... 74
2.3.3
Общие параметры блоков .................................................................... 76
2.3.4
Особенности преобразования типов данных ..................................... 80
2.3.5
Блоки преобразования типов данных ................................................. 82
2
2.3.6
Блоки программного управления данными Expression и MCode .... 87
2.4 Многочастотные системы ............................................................................ 95
3
2.4.1
Принципы создания многочастотных систем в System Generator ... 95
2.4.2
Проектирование фильтров ................................................................... 99
2.4.3
Отладка многочастотных систем ...................................................... 105
2.4.4
Аппаратная реализация многочастотности ...................................... 107
Библиографический список ............................................................................. 111
3
ВВЕДЕНИЕ
Современный уровень развития технологии производства цифровых
микросхем достиг того уровня, когда полноценная система цифровой
обработки сигнала (ЦОС) может быть реализована на одной микросхеме. Это
может быть сигнальный процессор (в англоязычной литературе принято
обозначение DSP – Digital Signal Processor), заказная микросхема (ASIC –
Application-Specific Integrated Circuit) или программируемая логическая
интегральная схема (ПЛИС). Из перечисленных технологий последняя (ПЛИС)
сочетает в себе достоинства сигнальных процессоров и заказных интегральных
схем. С первыми ее объединяет гибкость (программируемость), со вторыми –
высокая
производительность,
недоступная
процессорам.
Производители
современных ПЛИС обычно имеют в линейке продуктов семейства микросхем,
ориентированные, в том числе, и на цифровую обработку сигналов. В
продукции компании Xilinx к такому семейству относятся программируемые
пользователем логические интегральные схемы архитектуры FPGA (Field
Programmable Gate Arrays) [1].
Традиционное проектирование систем на кристалле (к которым относятся
и системы цифровой обработки сигналов на FPGA) использует языки описания
аппаратных средств (Hardware Description Language, HDL), наиболее известные
среди которых – VHDL и Verilog. Применение этой технологии к
проектированию систем ЦОС требует значительных временных затрат.
Описанная в главе 2 технология визуального проектирования позволяет
существенно упростить весь цикл разработки, начиная от концепции
устройства и заканчивая его реализацией на кристалле FPGA.
Создание эффективных цифровых устройств даже на достаточно
абстрактном системном уровне невозможно без знания общих принципов
функционирования
ПЛИС.
Поэтому
знакомство
проектирования начинается с обзора архитектуры FPGA.
4
с
технологиями
1 РЕАЛИЗАЦИЯ АРХИТЕКТУРЫ FPGA В ПЛИС XILINX
Структура кристаллов ПЛИС архитектуры FPGA
1.1
Основой современных ПЛИС архитектуры FPGA является [2]:
– матрица
конфигурационных
логических
блоков
(КЛБ,
английская
аббревиатура – CLB, Configurable Logic Block), в структуру которой могут
быть «врезаны» дополнительные функциональные блоки – умножители,
память, блоки цифровой обработки сигналов (DSP, Digital Signal Processing),
другие специализированные блоки;
– блоки ввода/вывода (IOB, Input/Output Block);
– трассировочные ресурсы;
– блоки синхронизации;
На рис. 1 – рис. 6 схематично показаны способы размещения указанных
ресурсов на кристаллах семейств ПЛИС Virtex и Spartan разных поколений [1,
3, 4]. Можно заметить, что с развитием ПЛИС в структуре кристаллов
появляются новые блоки, а старые получают новое название, что отражает их
возросшую функциональность. Тем не менее, базовая функциональность
блоков сохраняется во всей линейке продукции Xilinx, что позволяет на
примере относительно простых структурных элементов старых поколений
изучать
работу
новых
кристаллов.
Рассмотрим
первостепенное значение при цифровой обработке сигналов.
5
блоки,
имеющие
Блоки
автоматической
подстройки
задержки
Блочная
память
Конфигурируемые логические
ресурсы
Блоки ввода/вывода (IOBs)
Рис. 1. Структура ПЛИС Spartan-II
Дополнительные
стредства
трассировки
Рис. 2. Структура ПЛИС Virtex
6
Цифровой блок управления
синхронизацией DCM (Digital
Clock Manager)
Мультиплексор цепей
синхронизации (BUFGMUX)
Конфигурируемые логические
ресурсы
Программируемый в/в
Блочная память
(Block RAM)
Умножитель
Рис. 3. Структура ПЛИС Virtex-II
Блочная память
(Block RAM)
Для некоторых серий приборов
семейства Spartan-3 на кристалле
располагается два дополнительных
ряда блочной памяти
Рис. 4. Структура ПЛИС Spartan-3
7
Умножитель
BlockRAM
Элементы цепей
синхронизации
(BUFGMUX,
BUFGCTRL)
CLB
DCM
Блоки цифровой
обработки
сигналов DSP48
IOBs
Рис. 5. Структура ПЛИС Virtex-4LX
Элементы цепей
синхронизации
(BUFGMUX, BUFIO,
BUFR)
CLB
Ячейка
управления
синхронизацией
CMT (Clock
Management Tile)
IOBs
DSP48
BlockRAM
Рис. 6. Структура ПЛИС Virtex-5LX
1.2
Конфигурируемые логические блоки
1.2.1 КЛБ Virtex
Базовым элементом КЛБ является логическая ячейка (Logic Cell – LC).
Логическая ячейка состоит из 4-входового функционального генератора,
логики ускоренного переноса и запоминающего элемента. Выход каждого
функционального генератора каждой логической ячейки подсоединен к выходу
КЛБ и к D-входу триггера. Каждый КЛБ серии Virtex содержит 4 логические
ячейки, организованные в виде двух одинаковых секций (Slices, рис. 7). На
рис. 8 представлено детальное изображение одной секции [3]. В дополнение к
четырем базовым логическим ячейкам КЛБ серии Virtex содержит логику,
8
которая позволяет комбинировать ресурсы функциональных генераторов для
реализации функций от пяти или шести переменных.
Логика
ускоренного
переноса и
контроля
Логика
ускоренного
переноса и
контроля
Логика
ускоренного
переноса и
контроля
Логика
ускоренного
переноса и
контроля
Рис. 7. Двухсекционный КЛБ Virtex
Функциональные генераторы реализованы в виде 4-входовых таблиц
преобразования (Look-Up Table – LUT). Каждый элемент LUT КЛБ Virtex
может
быть
сконфигурирован
в
одном
из
следующих
вариантов
функциональных устройств:
– как логическая функция 4 переменных (собственно LUT);
– как синхронное оперативное запоминающее устройство (ОЗУ) размерностью
16x1 бит. Из двух LUT одной секции можно реализовать синхронное ОЗУ
размерностью 16x2 бита или 32x1 бит, либо двухпортовое синхронное ОЗУ
размерностью 16x1 бит
– как 16-битовый сдвиговый регистр, который идеально подходит для захвата
высокоскоростных или пакетных потоков данных. Этот режим может также
использоваться для запоминания данных в приложениях цифровой
обработки сигналов.
9
Рис. 8. Детальный вид секции Virtex
Запоминающие
элементы
в
каждой
секции
КЛБ
Virtex
могут
конфигурироваться как динамические триггеры (чувствительные к фронту
сигнала) D-типа либо как триггеры-защелки, чувствительные к уровню сигнала.
D-вход триггера может управляться либо от функционального генератора в
рамках той же секции КЛБ, либо непосредственно от входов данной секции
КЛБ, минуя функциональные генераторы.
Дополнительно к сигналам синхронизации (Clock) и разрешения
синхронизации (СЕ) в каждой секции КЛБ есть сигналы синхронной установки
(Set) и сброса (Reset). Обозначение этих сигналов – SR и BY соответственно.
Сигнал SR переводит запоминающий элемент в состояние, определенное для
него в конфигурационных данных, а сигнал BY – в противоположное
состояние. Эти же сигналы могут быть использованы также в качестве
асинхронной предустановки (Preset) и очистки (Clear). Все сигналы управления
10
могут быть независимо проинвертированы. Они заведены на оба триггера в
рамках одной секции КЛБ.
Дополнительная логика, входящая в каждый КЛБ, представлена двумя
мультиплексорами: F5 и F6.
На
вход
мультиплексора
F5
заведены
сигналы
с
выходов
функциональных генераторов данной секции КЛБ. Этот узел может работать
как функциональный генератор, реализующий любую 5-входовую функцию,
либо как мультиплексор 4:1, либо как некоторая функция от девяти входных
переменных.
Аналогично мультиплексор F6 объединяет выходы всех четырех
функциональных генераторов КЛБ, используя один из выходов мультиплексора
F5. Это позволяет реализовать либо любую 6-входовую функцию, либо
мультиплексор 8:1, либо некоторую функцию до 19 переменных.
Каждый КЛБ имеет 4 сквозные линии – по одной на каждую логическую
ячейку. Эти линии используются как дополнительные входы данных либо как
дополнительные трассировочные ресурсы, не расходующие логические
ресурсы.
Каждая логическая ячейка содержит специальную логику ускоренного
переноса, которая обеспечивает наилучшую реализацию на ПЛИС различных
арифметических функций. КЛБ содержит две отдельные цепи переноса – по
одной на каждую секцию. Размерность цепи переноса – 2 бита на КЛБ.
Арифметическая логика включает в себя элемент, реализующий функцию
исключающего ИЛИ, который позволяет реализовать 1-битовый сумматор в
одной логической ячейке.
В каждой логической ячейке имеется элемент, реализующий функцию И
(AND),
который
предназначен
для
построения
быстродействующих
умножителей.
Специальные трассы
логики ускоренного переноса могут также
использоваться для каскадного включения функциональных генераторов при
11
необходимости
создания
функций
с
большим
количеством
Spartan-3
является,
во-первых,
входных
переменных.
1.2.2 КЛБ Spartan-3
Отличительной
количество
чертой
секций
в
каждом
КЛБ
и,
во-вторых,
возросшее
неодинаковая
функциональность этих секций: каждый КЛБ состоит из четырех секций
(SLICE), сгруппированных в пары (SLICEM и SLICEL), с независимой цепью
переноса в каждой паре (рис. 9) [4].
Все 4 секции содержат:
– два функциональных генератора;
– два элемента памяти;
– мультиплексоры, применяемые для создания функций пяти и более
переменных;
– логику ускоренного переноса;
– логические вентили, предназначенные для реализации арифметических
функций.
Секция SLICEM
(логика, распределенная
память или сдвиговые
регистры)
Секция SLICEL
(только логика)
Переключающая матрица
Линии связи с соседними КЛБ
КЛБ
Рис. 9. Расположение секций внутри КЛБ FPGA Spartan-3
12
Все секции способны реализовать логическую или арифметическую
функцию, а также ПЗУ. Кроме того, секции SLICEM, расположенные на рис. 9
слева, могут реализовать ОЗУ и 16-битовые сдвиговые регистры. Блок-схема
этой секции представлена на рис. 10 (символ i в имени мультиплексора FiMUX
может равняться 6, 7 или 8, в зависимости от секции), секция SLICEL имеет
аналогичный набор элементов и линий связи.
Функциональные генераторы реализованы в виде четырехвходовых
таблиц преобразования LUT. Кроме использования в качестве функциональных
генераторов, каждый LUT-элемент, расположенный в секции SLICEM, может
быть также использован как синхронное ОЗУ размерностью 16x1 бит или 16битовый сдвиговый регистр. Более того, из двух LUT-элементов в рамках
одной секции можно реализовать синхронное ОЗУ размерностью 16x2 бита или
32x1 бит либо двухпортовое синхронное ОЗУ размерностью 16x1 бит.
13
Верхняя
часть секции
Общая логика
секции
Нижняя
часть секции
Логические функции
Распределенное ОЗУ и регистры сдвига
Рис. 10. Упрощенная блок-схема секции SLISEM FPGA Spartan-3
14
Запоминающие элементы в КЛБ могут конфигурироваться в виде
динамических триггеров D-типа, чувствительных к фронту сигнала, или в виде
триггеров-защелок, чувствительных к уровню сигнала.
Каждый КЛБ имеет внутренние быстродействующие линии связи и
соединен с переключающей матрицей, осуществляющей доступ к глобальным
трассировочным ресурсам.
1.3
Встроенные блоки памяти
Все ПЛИС семейств Virtex и Spartan содержат специальные блоки памяти
(Block RAM, BRAM), предназначенные для хранения данных с большей
эффективностью, чем это обеспечивает распределенная память на LUT.
Функциональность блоков памяти при смене поколений ПЛИС практически не
изменялась. Основное отличие «старых» и «новых» BRAM в том, что
последние имеют большую емкость, а первые не поддерживают некоторых
режимов записи. Например, емкость блока BRAM в Virtex и Spartan-II
составляет 4096 бита, в Virtex-4 и Spartan-3 – 18432 бита (18к бит), а в Virtex-5 –
уже 36к бит [5, 7].
Блочную память можно использовать как по прямому назначению, т. е.
как статическое ОЗУ, так и для реализации ПЗУ и табличных функциональных
преобразователей повышенной размерности. По сравнению с типовыми
логическими блоками BRAM дают более эффективные решения для реализации
сложных функций. Пример – один блок памяти при организации 256x8
реализует умножитель 4x4, тогда как построение такого же умножителя на
логических элементах потребовало бы занять втрое больше площади кристалла
и заставило бы снизить частоту работы перемножителя в 2-3 раза.
Блоки встроенной памяти, как правило, ориентированы также на
организацию буферов FIFO, построение двухпортовой памяти, ассоциативной
памяти, преобразователей разрядности данных и т. д. Несколько блоков можно
объединять для создания более емкой памяти. Так как блоки памяти
15
расположены на том же кристалле, что и логическая часть схемы, работа с
памятью отличается высоким быстродействием.
Блок встроенной памяти может быть сконфигурирован как двухпортовый
(Dual-Port), рис. 11, а, либо как однопортовый (Single-Port), рис. 11, б блок ОЗУ.
Двухпортовый блок имеет два независимых порта доступа (А и В), структурно
идентичных и выполняющих операции чтения и записи. Оба порта
двухпортовой памяти тактируются своими синхросигналами (CLKA и CLKB) и
имеют свои сигналы разрешения работы (ENA и ENB) и разрешения записи
(WEA и WEB). Кроме того, порты имеют входные сигналы SSRA и SSRB
(синхронные сигналы сброса/установки, действующие на регистры-защелки
выходных данных), адресные шины ADDRA и ADDRB, шины входных данных
DIA и DIB, шины для битов паритета DIPA и DIPB, а также выходы данных
DOA и DOB и битов паритета DOPA и DOPB. Для управляющих сигналов
предусматривается выбор их полярностей. Разрядности шин данных, адресов и
тракта битов паритета задаются конфигурированием схемы. В блоках с
емкостью
18к
бит
FPGA
Spartan-3,
в
частности,
предусматриваются
разрядности 1, 2, 4, 8, 9 (8 – для данных плюс 1 – для бита паритета), 18
(16 + 2), 36 (32 + 4) и 72 (только для однопортовой организации). Разрядности
шин
адреса
изменяются
согласно
принятой
разрядности
данных
и,
следовательно, числу хранимых в блоке слов. Схемы адресации в двух портах
могут быть различными в связи с разными разрядностями хранимых данных.
16
BRAM 18k
BRAM 18k
а
б
Рис. 11. Двухпортовая (а) и однопортовая (б) память FPGA Spartan-3
Однопортовый блок идентичен каждому из портов двухпортового блока и
оперирует с теми же сигналами WE, EN, SSR, CLK, ADDR, DI, DIP, DOP и DO.
Оба порта двухпортового ОЗУ осуществляют доступ к одному и тому же
содержимому памяти, но могут иметь различные схемы адресации, зависящие
от разрядностей данных порта. При этом реализуются следующие способы
прохождения данных через блок ОЗУ (рис. 12):
– операции 1 (2). Порт А (В) ведет себя как независимый порт ОЗУ,
выполняющий операции чтения и записи с использованием одного набора
адресных линий;
– операции 3 (4). Порт А (В) является портом записи с отдельным адресом
записи, а порт В (А) – портом чтения с отдельным адресом чтения.
Разрядность данных для портов может быть различной.
Чтение
Запись
Запись
1
Двухпортовая
память
Чтение
Порт В
Чтение
Порт А
4
Запись
3
Запись
Чтение
2
Рис. 12. Операции и потоки данных в двухпортовом блоке памяти
17
Записи соответствует наличие разрешения WE, а при его отсутствии
выполняется чтение. Однако существуют режимы, в которых запись
сопровождается некоторыми возможностями одновременного чтения. С
помощью атрибутов системы проектирования можно задавать блокам памяти
различные варианты поведения, определяющие информацию в адресованной
ячейке памяти и регистре-защелке на выходе блока. В зависимости от
поведения выходной защелки при записи данных различают варианты:
WRITE_FIRST, READ_FIRST и NO_CHANGE (рис. 13).
DI,DIP
DO,DOP
DI,DIP
DO,DOP
DI,DIP
WE
WE
WE
EN
EN
EN
CLK
CLK
CLK
ADDR
Ячейка
памяти
а
ADDR
Ячейка
памяти
ADDR
DO,DOP
Ячейка
памяти
в
б
Рис. 13. Варианты поведения двухпортового блока памяти при записи данных; режимы
WRITE_FIRST (a), READ_FIRST(б) и NO_CHANGE (в)
В варианте WRITE_FIRST (режим прозрачности, стандартный режим)
данные с входов DI, DIP записываются в выбранную ячейку и одновременно
появляются на выходах DO, DOP. Выходные данные другого порта становятся
недействительными.
В случае READ_FIRST (Read-before-Write, не поддерживается в FPGA
Virtex и Spartan-II) данные, хранившиеся в ячейке по адресу записи, появляются
в выходном регистре-защелке (на выходах DO, DOP) в то время как данные с
входов DI, DIP записываются в адресованную ячейку. На выходах DO, DOP
другого порта тоже появляются данные из выбранной ячейки. Этот режим
считается наиболее эффективным для увеличения полосы пропускания памяти
и полезен для большинства применений памяти в проектах. Он поддерживает
одновременность операций чтения и записи по одному и тому же адресу и не
18
создает трудностей согласования задержек в цепях устройств. Режим хорошо
соответствует
задачам
построения
многоразрядных
регистров
сдвига,
кольцевых буферов, фильтров с конечной импульсной характеристикой и т. д.
Режим NO_CHANGE (также не поддерживается в FPGA Virtex и
Spartan-II) предусматривает запрещение изменения состояния выходной
защелки порта при записи данных. Данные на выходе другого порта становятся
недействительными. Содержимое памяти может быть обновлено без влияния на
выходы схемы. Режим полезен для применений, в которых память хранит
функциональные таблицы, формы генерируемых колебаний и т. п.
1.4
Встроенные блоки умножителей
Каждое последующее поколение микросхем с архитектурой FPGA, как
правило, содержит новые блоки, отсутствовавшие в ПЛИС предыдущего
поколения. Некоторые из этих блоков в том или ином виде повторяются в
следующих разработках и их присутствие в структуре FPGA становится
фактически стандартом. Это утверждение, по-видимому, можно отнести к
блокам встроенных умножителей, которые в качестве самостоятельных
устройств появились в FPGA Virtex-II, а в структуру Virtex-4 и Virtex-5 вошли в
составе функционально более сложных блоков DSP48.
Рассмотрим умножители на примере FPGA Spartan-3. Умножитель
позволяет произвести умножение двух 18-битовых слов и на выходе получить
36-битовое произведение. Входные данные для блока могут быть в одном из
двух форматов: либо 18 бит со знаком, либо 17 бит без знака. Несколько блоков
могут каскадироваться и выполнять умножение чисел большей разрядности, а
также выполнять умножение более чем двух чисел.
В кристалле блок умножителя и блок памяти расположены рядом
(см. рис. 4). Блок умножителя оптимизирован на выполнение операций с
содержимым одного порта блока памяти, но может использоваться и
независимо. Такое расположение блоков умножения позволяет эффективно
19
реализовывать на ПЛИС операции считывания, умножения, суммирования и
цифровой фильтрации.
Умножитель может быть сконфигурирован для работы в асинхронном
(MULT18X18, рис. 13, а) и синхронном режиме с регистровыми выходами
(MULT18X18S, рис. 13, б). Входы A и B – 18-битовые множители, выход P –
результат произведения AB. Входы CLK – сигнал синхронизации, СЕ – сигнал
разрешения тактирования и RST – синхронный сброс, – функционируют только
в синхронном режиме.
а
б
Рис. 14. Встроенные умножители: a) асинхронная версия,
б) умножитель с регистровыми выходами
1.5
Система синхронизации FPGA
1.5.1 Основные элементы системы синхронизации FPGA
Сигналы
тактирования
(синхросигналы)
задаются
в
системе
размножением (распределением) импульсов, формируемых одним (опорным)
генератором. Для получения синхросигналов, подключаемых к каждому
тактируемому элементу памяти, между выходом опорного генератора и
элементами памяти включается обычно древовидная схема размножения
синхроимпульсов, состоящая из буферных каскадов. В разных областях
кристалла или печатной платы вследствие разных путей прохождения к ним
синхроимпульсов их фазы не совпадают. Значительный сдвиг синхросигналов
относительно
их
предполагаемого
положения
ведет
к
неправильному
восприятию информации элементами памяти и является недопустимым.
Проблема фазовых сдвигов синхросигналов (Clock Skew) особенно актуальна
20
для современных систем, работающих на частотах в сотни мегагерц или более,
т. к. при этом возрастает влияние многочисленных паразитных реактивностей
схемы (индуктивностей и емкостей) и задержек в буферных каскадах системы
распределения
импульсов.
Для
поддержания
синфазности
и
других
преобразований синхросигналов в ПЛИС вводят специальные средства: DLL,
PLL, DCM, CMT.
Основная идея построения следящих систем автоподстройки фазы PLL
(Phase Locked Loop), иллюстрируется рис. 15. Характерная часть PLL –
управляемый напряжением генератор импульсов VCO (Voltage Controlled
Oscillator).
управления
Входные
с
(опорные)
синхросигналами
синхросигналы
обратной
сравниваются
связи.
блоком
Несовпадение
фаз
синхросигналов создает напряжение, управляющее генератором VCO так,
чтобы минимизировать фазовый сдвиг. Поскольку для обратной связи
используется сигнал с выхода системы распределения синхроимпульсов, они
«привязываются» по фазе к опорным, что и требуется от PLL.
Схема
распределения
синхросигналов
VCO
Входной
синхросигнал
Схема
управления
Синхросигнал
обратной связи
В систему
Рис. 15. Укрупненная структура блока PLL
Основная идея построения следящих систем автоподстройки задержек
DLL (Delay Locked Loop) иллюстрируется рис. 16. Основа DLL – элемент
(линия) с управляемой задержкой. Схема управления сравнивает входные
синхросигналы
с
сигналами,
формируемыми
системой
распределения,
поступающими на элементы памяти данной области синхронизации и на вход
обратной
связи
формированию
блока
блоком
управления.
управления
Рассогласование
сигнала,
21
фаз
приводит
регулирующего
к
задержку.
Физически линия с управляемой задержкой представляет собой группу
элементов с дискретными задержками, из которых выбирается тот или иной
элемент. DLL вводит задержку между входными синхросигналами и сигналами
обратной связи, пока положение активных фронтов обеих последовательностей
не сравняется (расфазирование сигналов не достигнет 360°, что и будет
означать совпадение фаз в смысле правильного положения фронтов обеих
синхропоследовательностей).
Линия
переменной
задержки
Входной
синхросигнал
Схема
распределения
синхросигналов
Синхросигнал
обратной связи
Схема
управления
В систему
Рис. 16. Укрупненная структура блока DLL
Цифровой блок управления синхронизацией DCM (Digital Clock Manager)
и ячейка управления синхронизацией CMT (Clock Management Tile) –
«укрупненные» элементы системы синхронизации, которые включают, помимо
DLL
и
PLL,
другие
модули
и
обеспечивают
дополнительную
функциональность. Все современные ПЛИС содержат какой-либо из блоков
DLL, PLL, DCM или CMT. Блоки DLL самостоятельно или в составе DCM или
CMT присутствуют в большинстве ПЛИС Xilinx от Spartan-II до Virtex-5.
DCM – основные элементы синхронизации Virtex-II, Virtex-4 и Spartan-3. PLL,
DCM и CMT используются в Virtex-5. Количество размещенных на кристалле
блоков синхронизации зависит от величины кристалла. ПЛИС младших серий
обычно содержат от 2 до 4 блоков, у сложных ПЛИС их число превышает 10.
1.5.2 Блок DLL
Рассмотрим структуру блока DLL на примере FPGA Spartan-3 (рис. 17).
Схема имеет два входа для синхросигналов – эталонного CLKIN и обратной
связи CLKFB. На выходе формируются семь сигналов, два из которых (CLK0
22
или CLK2Х) могут участвовать в формировании сигналов обратной связи.
Выход CLK0 формирует сигналы, аналогичные входным по частоте и фазе, а
выход CLK2Х генерирует сигналы удвоенной частоты. На выходе CLKDV
формируются сигналы пониженной частоты. Сигнал обратной связи с помощью
схемы управления и цепочки из n элементов задержки приводится к
эталонному.
Функция устранения сдвига фаз (Clock Skew) между эталонными
синхросигналами и сигналами тактирования элементов памяти в данной
области синхронизации реализуется следующим образом. Сигнал CLK0
проходит через схемы распределения тактирующих импульсов данной области
синхронизации и возвращается к DLL как сигнал обратной связи. Схема
управления оценивает фазовую погрешность между входами детектора и
активизирует такoe число элементов задержки, которое дает устранение этой
погрешности. Сфазировав оба сигнала, DLL устанавливает выход Locked,
показывая этим «замкнутость» рабочего сигнала на эталонный.
CLKIN
Задержка
1
Задержка
2
Задержка
n–1
Задержка
n
RST
CLK90
CLK180
CLK270
CLK2X
CLK2X180
CLKDV
LOCKED
Управляющая логика
CLKFB
Выходная секция
CLK0
Фазовый
детектор
Рис. 17. Упрощенная блок-схема модуля DLL Spartan-3
23
Выходы
CLK90,
CLK180
и
CLK270
придают
дополнительную
функциональность DLL, позволяя применять в схемах сигналы, сдвинутые по
фазе относительно эталонного сигнала на 90°, 180° и 270° соответственно (в
некоторых режимах эти выходы могут не работать, например, в Spartan-3 они
отключаются при переводе ПЛИС на максимальную рабочую частоту).
Модуль DLL предоставляет также возможность выполнения базовых
функций умножения и деления частоты. На выходе CLK2X сигнал имеет в 2
раза большую частоту и такую же фазу, как и на входе CLKIN. Выход
CLK2X180 так же удваивает частоту, но при этом сдвигает фазу на 180°. На
выходе CLKDV формируется сигнал с частотой, меньшей CLKIN в KCLKDV раз,
где коэффициент деления частоты KCLKDV может быть выбран из набора чисел
1,5; 2; 2,5; 3; 3,5; 4; 4,5; 5; 5,5; 6; 6,5; 7; 7,5; 8; 9; 10; 11; 12; 13; 14; 15 или 16.
В функциональном отношении DLL Spartan-3 не отличается от DLL
других FPGA. Основное отличие FPGA старших поколений состоит в
ограниченном наборе поддерживаемых коэффициентов деления на выходе
CLKDV. Например, в FPGA Virtex и Spartan-II допускается использовать
только коэффициенты 1,5; 2; 2,5; 3; 4; 5; 8 или 16, а набор коэффициентов
Virtex-4, Virtex-5 совпадает с KCLKDV Spartan-3.
1.5.3 Варианты применения DLL для синхронизации схем
Модуль DLL может быть использован для синхронизации как схем на
кристалле, так и схем, внешних по отношению к микросхеме ПЛИС. Основные
варианты подключения DLL показаны на рис. 18.
Внешний тактовый сигнал заводится в ПЛИС через входной глобальный
тактовый буфер IBUFG, который напрямую подключается к сети глобальных
тактовых линий или к входному буферу (IBUF). Тактовые сигналы,
сгенерированные внутри ПЛИС, получают доступ к глобальным тактовым
линиям связи через мультиплексор BUFGMUX. Глобальная тактовая линия
подключается к входу CLKIN напрямую. Подключение внутреннего и
внешнего тактового сигнала к DLL показано на рис. 18, а и в соответственно.
24
Способ подключения тактовых выходов и обратной связи DLL
выбирается в зависимости от того, какой тип синхронизации осуществляется в
проекте: внутрикристальный или внешней (по отношению к ПЛИС) схемы.
В случае внутрикристальной синхронизации выходы тактовых сигналов
DLL можно подключить к внутренним регистрам ПЛИС через глобальную
тактовую сеть. Доступ к глобальной сети осуществляется через глобальный
тактовый буфер (BUFG) или через BUFGMUX. Петля обратной связи
образуется подключением CLK0 (рис. 18, а) или CLK2X (рис. 18, б) к
глобальной тактовой сети, которая, в свою очередь, нагружена на CLKFB.
В случае синхронизации внешней схемы (рис. 18, в и рис. 18, г), CLK0
(или CLK2X) плюс любой другой выходной сигнал DLL выводится из ПЛИС
через выходной буфер (OBUF) и управляет внешней тактовой сетью. Петля
обратной связи образуется, если завести цепь CLKO (рис. 18, в) или CLK2X
(рис. 18, г) обратно в ПЛИС через IBUFG, который предоставляет доступ к
внутренней глобальной тактовой сети, либо через IBUF. Затем глобальная
линия напрямую подключается к входу CLKFB.
25
Задержка
распространения
сигнала
Задержка
распространения
сигнала
б
DLL
DLL
Задержка
распространения
сигнала
а
DLL
Задержка
распространения
сигнала
в
DLL
г
Рис. 18. Типичные схемы включения DLL в проект: а – внутри кристалла, с обратной связью
по CLK0; б – внутри кристалла, с обратной связью по CLK2X; в – вне кристалла, с обратной
связью по CLK0; г – вне кристалла, с обратной связью по CLK2X
26
1.5.4 Блок DCM
Блок DCM состоит из четырех функциональных модулей (рис. 19):
– модуля автоподстройки задержки DLL;
– цифрового синтезатора частот DFS (Digital Frequency Synthesizer);
– модуля фазового сдвига Phase Shifter;
– модуля состояний блока Status Logic.
Модуль DLL рассмотрен выше.
Цифровой модуль синтеза частот DFS генерирует тактовый сигнал, по
частоте равный произведению частоты входного сигнала на дробный
коэффициент. Числителем и знаменателем этого коэффициента являются целые
числа, задаваемые разработчиком. Из-за большого диапазона возможных частот
выходного сигнала, определяемого таким коэффициентом, DFS предоставляет
более гибкие возможности для синтеза частот, чем модуль DLL. DFS имеет два
выхода – CLKFX и CLKFX180. Сигнал на выходе CLKFX180 является
инверсией сигнала CLKFX. Эти два сигнала всегда имеют скважность 50 %,
Задержка
распространения
сигнала
Выходной какскад
Какскад задержек
Входной какскад
даже если входной сигнал CLKIN другой скважности.
Рис. 19. Функциональные модули DCM
27
Коэффициент умножения частоты задается с помощью двух параметров
(атрибутов) – CLKFX_MULTIPLY и CLKFX_DIVIDE (эти параметры и другие
встречающиеся далее в тексте атрибуты функциональных элементов ПЛИС
используются для настроек программными средствами автоматического
проектирования схем на ПЛИС, например, Xilinx ISE Foundation [6]).
Выходная частота fCLKFX является функцией входной частоты fCLKIN и
определяется по формуле
fCLKFX = fCLKIN · (CLKFX_MULTIPLY / CLKFX_DIVIDE).
Параметр CLKFX_MULTIPLY может принимать целые значения от 2 до 32, а
параметр CLKFX_DIVIDE – целые значения от 1 до 32 включительно.
Например, если CLKFX_MULTIPLY = 5 и CLKFX_DIVIDE = 3, то
частота выходного сигнала будет равна 5/3 частоты входного сигнала.
DFS может работать как с DLL, так и без нее. Без DLL DFS синтезирует
частоту в соответствии со значениями атрибутов CLKFX_MULTIPLY и
CLKFX_DIVIDE. Входной тактовой частотой при этом служит сигнал со входа
CLKIN блока DCM (он же является входным и для модуля DLL). Так как DLL
не задействована, то коррекции задержки распространения в этом случае не
производится.
С DLL DFS работает также, но с дополнительным преимуществом.
Преимущество
заключается
в
устранении
модулем
DLL
задержки
распространения тактового сигнала. В этом случае в проекте должна быть
организована петля обратной связи с выхода CLK0 на вход CLKFB.
Модули DLL и DFS, работая вместе, достигают устранения расфазировки
тактовых сигналов следующим образом. В зависимости от значений атрибутов
CLKFX_MULTIPLY и CLKFX_DIVIDE DLL подбирает элемент задержки так,
чтобы фронты выходного и входного сигналов совпадали там, где это
математически
возможно.
Например,
для
CLKFX_MULTIPLY = 5
и
CLKFX_DIVIDE = 3 фронты сигналов будут совпадать каждый третий такт
28
входного сигнала, что эквивалентно по времени каждому пятому такту
выходного сигнала.
Меньшие значения атрибутов CLKFX_MULTIPLY и CLKFX_DIVIDE
позволяют быстрее устранить расфазировки. Выравнивание происходит на
каждом n-м такте, где n равно значению атрибута CLKFX_DIVIDE. Поэтому
лучше использовать значения атрибутов, например, CLKFX_MULTIPLY = 3 и
CLKFX_DIVIDE = 2, а не CLKFX_MULTIPLY = 9 и CLKFX_DIVIDE = 6.
Модуль фазового сдвига Phase Shifter.
В DCM реализовано два метода управления фазой тактовых выходов
DCM относительно входного сигнала CLKIN. Первый, реализованный в модуле
DLL, осуществляет «грубый» сдвиг фазы на 90, 180 или 270°. Второй метод
реализован в модуле фазового сдвига и позволяет более точно настроить фазы
тактовых сигналов. Модуль Phase Shifter может сдвигать фронт выходного
сигнала на время (TPS), кратное 1/256 периода CLKIN или кратное задержке
одного элемента в каскаде задержек DCM, в зависимости от того, какая из двух
величин больше. Производится сдвиг всех девяти выходных сигналов.
Задействуется Phase Shifter на этапе проектирования схемы. Для этого в
средах
автоматизированного
проектирования
используется
атрибут
CLKOUT_PHASE_SHIFT, который может принимать значения NONE, FIXED
или VARIABLE. Когда присвоено значение NONE, Phase Shifter не
задействован и его входы (PSEN, PSCLK, PSINCDEC) должны быть
подключены
к
земле.
Присвоением
атрибуту
CLKOUT_PHASE_SHIFT
значений FIXED или VARIABLE модуль переводится в фиксированный или
регулируемый режим. Описание этих режимов дано ниже.
Задать значение для времени TPS относительного сдвига фронтов
входного тактового сигнала и выходного можно с помощью атрибута
PHASE_SHIFT. Значение атрибута - целое число из диапазона от –255 до +255
включительно. Величину TPS можно вычислить по формуле
TPS = (PHASE_SHIFT / 256) · TCLKIN,
29
(1)
где TCLKIN – период тактового синхросигнала. Данная формула применима для
обоих режимов функционирования (FIXED и VARIABLE).
Если значение атрибута PHASE_SHIFT положительное число, то фронт
сигнала на CLKFB запаздывает относительно фронта сигнала на CLKIN. Если
значение атрибута PHASE_SHIFT отрицательное число, то фронт сигнала на
CLKFB опережает фронт сигнала на CLKIN.
В фиксированном режиме желаемый фазовый сдвиг фиксируется на
величине, равной доле TCLKIN в соответствии с формулой (1). В фиксированном
режиме входы PSEN, PSCLK и PSINCDEC не используются и должны быть
подключены к земле.
В регулируемом режиме осуществляется динамическое изменение фазы
через входные контакты PSEN (разрешение PSCLK), PSCLK (тактовый сигнал
синхронизации
регулировки
фазы)
и
PSINCDEC
(сигнал направления
изменения фазы, синхронизован с PSCLK).
Сразу же после конфигурации сдвиг фазы TPS определяется формулой (1)
и значением атрибута PHASE_SHIFT, затем для увеличения или уменьшения
величины TPS нужно использовать три входа модуля Phase Shifter. PSINCDEC
синхронизован с тактовым входом PSCLK, который разрешается сигналом на
входе PSEN. Тактирование Phase Shifter можно осуществлять сигналом CLKIN
или любым другим тактовым сигналов. Коррекция фазы осуществляется
следующим
образом.
На
каждом
разрешенном
такте
PSCLK
при
PSINCDEC = '1' Phase Shifter добавляет к TPS 1 / 256 такта CLKIN. Аналогично,
на каждом разрешенном такте PSCLK при PSINCDEC = '0' модуль Phase Shifter
уменьшает TPS на 1 / 256 такта CLKIN. Настройка фазы может потребовать 100
тактов CLKIN плюс 3 такта PSCLK, после чего PSDONE переходит в состояние
логической единицы и остается в нем на 1 такт PSCLK. Этот импульс
сигнализирует о готовности модуля Phase Shifter к следующей коррекции.
Сброс
фазы
в
состояние,
определяемое
атрибутом
PHASE_SHIFT,
осуществляется активным уровнем сигнала на входе RST блока DCM.
30
Модуль Status Logic выдает информацию о состоянии блока DCM, а
также осуществляет сброс в начальное состояние. На вход модуля поступает
сигнал RST, на выходе формируются сигналы шины STATUS и сигнал
LOCKED.
Сигнал
сброса
RST
сбрасывает
DCM
в
начальное
состояние,
определенное конфигурационным файлом. Устанавливает на выходе LOCKED
логический нуль. Вход является асинхронным. Как правило, сигнал сброса
активируется только в процессе вхождения ПЛИС в штатный режим работы и
при смене частоты на CLKIN. Сброс не влияет на значения атрибутов. Если в
проекте вход RST не задействован, то он должен быть подключен к земле.
Выходные сигналы 8-разрядной шины STATUS информируют о текущем
состоянии модулей DLL и Phase Shifter:
– бит 0 «Переполнение». Значение '1' показывает, что произошла одна из двух
ситуаций: 1) увеличение или уменьшение TPS превышает 255 / 256 периода;
2) DLL осуществляет фазовый сдвиг на максимально возможную величину;
– бит 1 «Активность CLKIN». Значение '1' показывает, что сигнал на CLKIN
не переключается; значение '0' показывает наличие периодического сигнала
на входе CLKIN. Бит функционирует, только если в проекте используется
петля обратной связи на вход CLKFB;
– биты 2–7 зарезервированы.
Логическая единица на выходе LOCKED показывает, что сигналы CLKIN
и CLKFB находятся в фазе. Логический нуль показывает, что сигналы CLKIN и
CLKFB находятся не в фазе.
Существует возможность задержать окончание процесса конфигурации
ПЛИС до момента достижения модулем DLL синхронизации тактовых
сигналов, используя атрибут STARTUP_ WAIT. Значение атрибута может быть
TRUE или FALSE.
1.5.5 Блок CMT
Основной элемент системы синхронизации ПЛИС Virtex-5 – ячейка
управления синхронизацией CMT, включающий два модуля DCM, модуль PLL
31
и специализированные локальные цепи, соединяющие компоненты CMT друг с
другом (рис. 20) [6]. Каждый модуль внутри CMT может функционировать
самостоятельно, но существование специализированных локальных связей, с
одной стороны, накладывает некоторые ограничения на возможные соединения
модулей. С другой стороны, внутренние цепи освобождают глобальные
трассировочные ресурсы для других элементов схемы и улучшают временные
характеристики схемы за счет снижения вероятности шумовой связи между
соседними
ячейками
ПЛИС
(большинство
цепей
оказываются
локализованными внутри одной ячейки CMT).
К мультиплексору
BUFG любого вида
От IBUFG
любого вида
К мультиплексору
BUFG любого вида
К мультиплексору
BUFG любого вида
От BUFG
любого вида
Рис. 20. Блок-схема ячейки CMT ПЛИС Virtex-5
На рис. 20 схематично показано использование локальных цепей для
выбора различных источников входных синхросигналов и подключения
выходов DCM к входам PLL и выходов PLL к входам DCM. Сигналы шести
выходных счетчиков PLL мультиплексируются в один тактовый сигнал,
используемый в качестве эталонного для DCM. Всего два выходных сигнала
32
PLL могут передаваться на DCM. Оба 100 % независимы. Выход счетчика 0
PLL может подключаться к DCM1, а выход счетчика 1 – к DCM2. Каждый
выход
DCM
может
быть
мультиплексирован
в
один
синхросигнал,
используемый в качестве эталонного для PLL. Только один DCM может быть
использован в качестве генератора синхросигнала в каждый момент времени.
DCM не может быть включен в петлю обратной связи PLL. Любой из модулей
DCM или PLL каждого блока CMT могут быть использованы как
самостоятельные
устройства.
Выходной
сигнал
PLL
не
является
широкополосным.
Блоки DCM детально описаны в п. 1.5.4. Рассмотрим подробнее
принципы работы и особенности применения PLL.
Основная область применения PLL – работа в качестве синтезатора
частот с широким диапазоном синтезируемых частот и в качестве фильтра
дрожания (jitter filter) как внешних, так и внутренних сигналов синхронизации
совместно с DCM того же блока CMT.
Упрощенная
блок-схема
блока
PLL
показана
детализированная – на рис. 22.
Контакт
синхросигнала
Рис. 21. Упрощенная блок-схема PLL Virtex-5
33
на
рис. 21,
Общие
цепи
Схема
переключения
синхросигналов
Схема
контроля
синхронизации
8 фаз
сигнала
Выбор фазы сигнала
для цепи обратной
связи
Рис. 22. Детализированная блок-схема PLL Virtex-5
Входные мультиплексоры выбирают эталонный синхросигнал и сигнал
обратной связи с выхода любого из источников: IBUF, BUFG, общие цепи,
либо один из модулей DCM. Каждый вход синхросигнала содержит
программируемый счетчик D. Фазо-частотный детектор PFD (Phase-Frequency
Detector) сравнивает частоту и фазу входного (эталонного) синхросигнала и
сигнала обратной связи. Принимается во внимание только нарастающий фронт,
поскольку в этом случае скважность импульсов не имеет значения. PFD
формирует управляющий сигнал, пропорциональный разнице фаз и частот
входных тактовых сигналов, который поступает на генератор подкачки заряда
CP (Charge Pump) и фильтр LF (Loop Filter), формирующий опорное
напряжение генератора VCO (Voltage Controlled Oscillator – генератор,
управляемый напряжением). Управляющий сигнал на выходе PFD позволяет
как поднимать, так и понижать частоту генерации VCO. Когда VCO работает на
слишком высокой частоте, PFD формирует сигнал, вызывающий снижение
управляющего напряжения на входе VCO и снижения частоты генерации. Если
частота сигнала VCO слишком низкая, PFD обеспечивает повышение
управляющего напряжения.
34
Генератор VCO формирует восемь сдвинутых друг относительно друга
по фазе синхросигналов, каждый из которых может быть выбран в качестве
эталонного для выходных счетчиков (рис. 22). Каждый счетчик независимо
программируется в соответствии с требованиями проекта. В цепь обратной
связи включен счетчик M, обеспечивающий широкий диапазон генерируемых
частот.
1.5.6 Основы применения модулей PLL
Модуль PLL предназначен для решения задач снижения дрожания
фронтов синхроимпульсов, частотного синтеза и компенсации задержек
распространения синхросигналов в цепях схемы.
Фильтрация эффекта дрожания фронтов синхроимпульсов (Jitter)
Системы автоматической подстройки фазы всегда уменьшают присущий
эталонным синхросигналам эффект дрожания фронтов импульсов. В качестве
специального фильтра дрожания модуль PLL Virtex-5 может быть использован
только для внешнего тактового сигнала перед тем, как передать его на вход
другого блока (включая DCM). При этом обычно предполагается, что PLL
действует как буфер и восстанавливает входную частоту на выходе (например,
FIN = 100 МГц, FOUT = 100
МГц). Обычно
возможно повысить
степень
фильтрации эффекта дрожания, задав в среде проектирования атрибуту
BANDWIDTH значения Low. Установка BANDWIDTH в Low может привести к
росту статического сдвига в PLL.
Частотный синтез
Модуль PLL может быть использован для качественного синтеза частот.
В этом случае PLL не может применяться для компенсации задержек сигналов
в цепях схемы, а только генерирует тактовый синхросигнал для других блоков.
В режиме синтезатора петля обратной связи должна быть замкнута локально,
поскольку в этом случае дрожание фронтов (jitter) минимально. На рис. 23
показан пример реализации синтезатора частоты на PLL.
35
Эталонный
синхросигнал
33 МГц
На ядро PowerPC
На интерфейс с
Power PC
На логику/КЛБ
На интерфейс с
памятью
На PCI 66
На PCI 33
Рис. 23. Пример реализации синтезатора частоты на PLL
Частоту генератора VCO и частоту сигнала на выходе синтезатора можно
вычислить по формулам
FVCO  FCLKIN 
M
D,
FOUT  FCLKIN 
M
DO ,
где M, D и O – коэффициенты деления соответствующих счетчиков (рис. 22).
Шесть счетчиков O могут быть запрограммированы независимо. На примере
рис. 23 входной эталонный синхросигнал имеет частоту 33 МГц. Установка
коэффициента деления счетчика M = 16 задает частоту генерации VCO, равную
533 МГц
(33,333 МГц  16).
формирования
тактовой
Шесть
частоты
выходов
запрограммированы
процессора
PowerPC
для
533 МГц,
синхросигналов интерфейса с PowerPC 266 МГц, логики 178 МГЦ, подсистемы
памяти 133 МГц, шины PCI66 66 МГц и PCI33 – 33 МГц. В данном примере не
требуется поддержка фазовых соотношений между эталонным синхросигналом
и выходными сигналами, но требуется фазовая синхронизация выходных
сигналов.
Большое значение при разработке схем синхронизации на базе PLL имеет
подбор таких параметров M, D и O модуля, которые бы гарантировали
36
стабильность и эффективность реализации схемы. Выбор начинается с
определения требуемых характеристик входных и выходных сигналов:
– период эталонного синхросигнала;
– частоты выходных сигналов (до шести);
– скважность выходных сигналов (по умолчанию – 2);
– сдвиг фазы выходного сигнала в количестве периодов выходного сигнала
максимальной частоты;
– желательная ширина полосы пропускания PLL (по умолчанию ширина
полосы
пропускания
определяется
программными
средствами
проектирования);
– режим
компенсации
(автоматически
определяется
программными
средствами проектирования);
– дрожание фазы эталонного синхросигнала (в процентах от периода
эталонного синхросигнала).
На первом шаге следует определить входную частоту. Этот шаг
предполагает определение всех возможных выходных частот, которые могут
быть получены для всего диапазона входных частот от минимальной частоты
до максимальной, определяющего диапазон значений D, рабочего диапазона
генератора VCO, определяющего диапазон значений M, и всего диапазона
коэффициента деления выходных счетчиков O. Набор частот может оказаться
очень большим. В наихудшем случае возможны 52  64  128 = 425984
комбинации. В действительности, общее количество синтезируемых частот
меньше вследствие того, что не весь диапазон M или D может быть реализован
и существует перекрытие по частоте между различными установками.
Предположим, например, что FIN = 100 МГц. Если минимальная рабочая
частота детектора PFD равна 20 МГц, D может изменяться только от 1 до 5. Для
D = 1 M может принимать значения от 4 до 11. Если D = 2, M может иметь
значения от 8 до 22. При этом комбинация D = 1, M = 4 дает тот же результат,
что и D = 2, M = 8, вследствие чего вариант D = 1, M = 4 может быть отброшен.
37
Для дальнейшего анализа можно оставить только D = 3, 4 и 5, поскольку
возможности вариантов D = 1 и 2 перекрываются указанным набором.
Перекрывающиеся частоты существенно уменьшают общее количество
возможных выходных частот. Для каждой из полученных выходных частот
проверяется возможность получения желаемой выходной частоты PLL. После
определения первой подходящей выходной частоты на значения M и D
накладываются дополнительные ограничения, которые могут в большей
степени понизить количество возможных частот для выбора второй выходной
частоты. Этот процесс продолжается до тех пор, пока не будут выбраны все
выходные частоты. Ограничения на величины M и D вычисляются по
следующим формулам:
DMIN 
DMAX 
M MIN 
M MAX 
f IN
f PFDMAX ,
f IN
f PFDMIN ,
fVCOMIN
f IN ,
DMIN  fVCOMAX
f IN
,
где fPDFMIN, fPDFMAX – минимальная и максимальная рабочие частоты детектора
PDF, fVCOMIN, fVCOMAX – минимальная и максимальная частоты генерации VCO.
Эти значения могут быть получены из технической документации на ПЛИС,
например [8].
Задание входной частоты может привести к получению нескольких
вариантов M и D. На следующем шаге нужно найти оптимальные значения M и
D. Сначала определяется начальное значение M. Оно рассчитывается для
идеальной рабочей частоты VCO:
38
M IDEAL 
DMIN  fVCOMAX
f IN
.
Задача состоит в том, чтобы найти значение M, наиболее близкое к
идеальной рабочей точке VCO. Поиск начинается с минимального D. Цель
поиска – найти такие D и M, которые были бы минимальны при сохранении
частоты ƒVCO максимально возможной.
Для получения расширенного диапазона синтезируемых частот модули
PLL могут быть соединены каскадно (рис. 24). Результирующая частота
рассчитывается по формуле
f OUTPLL2  f OUTPLL1
M PLL 2
M PLL1
M PLL 2


DPLL 2  OPLL 2 DPLL1  OPLL1 DPLL 2  OPLL 2 .
Ограничения на диапазон синтезируемых частот остается в силе.
Соотношение фаз входного сигнала и сигнала, формируемого вторым модулем
PLL, не определено.
К логике
Рис. 24. Каскадное соединение двух PLL
Компенсация задержек синхросигналов в цепях схемы
Для компенсации задержек синхросигналов в цепях схемы выходной
сигнал PLL, частота которого совпадает с частотой эталонного синхросигнала
CLKIN (обычно это O0), соединяется с BUFG, а сигнал обратной связи
39
подается на вход CLKFB модуля PLL. Остальные выходы могут быть
использованы для получения дополнительных выходных частот делением
частоты CLKIN. В этом случае поддерживается определенное фазовое
соотношение эталонного входного и всех выходных сигналов PLL.
Варианты реализации схем компенсации задержек показаны на рис. 25 –
рис. 28. Схема на рис. 25 может использоваться для задания постоянного
сдвига фаз (например, 90°) между эталонным и выходным синхросигналами
PLL. Сигнал с выхода одного из счетчиков O используется для синхронизации
логики и блоков ввода/вывода. Сигнал обратной связи для обеспечения
нужного сдвига фаз снимается с выхода специализированного счетчика
обратной связи (на рис. 21 и рис. 22 не показан). Достоинство схемы в ее
гибкости, однако, она требует использования двух блоков BUFG.
К логике
Рис. 25. Схема компенсации задержек на двух BUFG
Другое принципиальное ограничение схемы рис. 25 вызвано тем, что для
формирования
сигнала
обратной
связи
использован
выход
счетчика
CLKFBOUT. Ограничение состоит в том, что входные частоты детектора PFD
должны совпадать. Следовательно, частота сигнала обратной связи fFB,
коэффициенты деления M и D должны удовлетворять следующему условию:
f IN
f
 f FB  VCO
D
M .
40
Например, если ƒIN = 166 МГц, D = 1, M = 3 и O = 1, выходная частота и
частота генератора VCO равны 498 МГц. Поскольку значение M в цепи
обратной связи равно 3, частота на обоих входах PFD равна 166 МГц. Более
сложный пример: ƒIN = 66,66 МГц, D = 2, M = 15 и O = 2. Частота VCO в этом
случае 500 МГц, частота на выходе O – 250 МГц. Следовательно, частота
сигнала обратной связи на входе PFD – 500/15 или 33,33 МГц, что совпадает с
тактовой частотой 66,66 МГц/2 на другом входе PFD.
На рис. 26 показана реализация буфера с нулевой задержкой. Схема
может быть полезна в приложениях с высокой степенью разветвления
синхросигнала, используемого для синхронизации внешних по отношению к
ПЛИС устройств. PLL здесь используется для компенсации внутренних (на
кристалле) и внешних (на внешней плате) задержек распространения сигналов.
Необходимо учитывать наличие ограничений по максимальной задержке,
которую может обеспечить PLL.
Внутри FPGA
К внешним
компонентам
Рис. 26. Буферный элемент с нулевой задержкой
В некоторых случаях точная регулировка невозможна из-за различий
входной емкости внешних компонентов и емкости в цепи обратной связи
ПЛИС. Например, внешние компоненты могут иметь входную емкость от 1 пФ
до 4 пФ, тогда как входы ПЛИС имеют емкость 8 пФ. Может отличаться
41
крутизна фронтов сигналов. Этот эффект необходимо учитывать при
разработке схем синхронизации.
Модуль DCM предоставляет хороший метод формирования точных
сдвинутых по фазе синхросигналов, однако не может уменьшить эффект
дрожания фронтов эталонного сигнала. Для этого может быть использован
модуль PLL, подключенный как показано на рис. 27. PLL на этой схеме не
вносит задержек в синхросигнал. Блоки DCM и PLL должны принадлежать
одной ячейке CMT.
К логике
Совпадаю
т
Рис. 27. DCM нагружен на PLL
Второй метод снижения эффекта дрожания – использование PLL для
очистки сигнала перед передачей его на DCM (рис. 28). Этот прием уменьшает
дрожание фронтов всех выходных сигналов DCM, но дрожание, внесенное
самим блоком DCM, по-прежнему передается внешним схемам. Как DCM, так
и PLL должны находиться в одной ячейке CMT.
42
Совпадают
К логике
К логике
Рис. 28. PLL нагружен на DCM
43
2 ТЕХНОЛОГИЯ ВИЗУАЛЬНОГО ПРОЕКТИРОВАНИЯ СИСТЕМ
ЦИФРОВОЙ ОБРАБОТКИ СИГНАЛОВ НА ПЛИС XILINX
2.1
Краткий обзор технологии визуального проектирования
Xilinx
Традиционное проектирование систем на кристалле (в том числе и систем
цифровой обработки сигналов на FPGA) предполагает использование языков
описания аппаратных средств (Hardware Description Language, HDL), среди
которых наибольшее распространение получили VHDL и Verilog. Однако
применение этой технологии к проектированию систем ЦОС (цифровой
обработки сигналов) предъявляет повышенные требования к квалификации
разработчиков: помимо знаний в области теории обработки сигналов и опыта
проектирования систем они должны иметь высокую квалификацию и как HDLпрограммисты. Рассматриваемая технология существенно снижает требования
к разработчикам, поскольку требует только начальных знаний в области HDLпрограммирования; для решения большинства задач квалификации системных
проектировщиков оказывается достаточно.
Технология визуального проектирования Xilinx основана на объединении
функциональных возможностей двух программных пакетов – MATLAB и
стандартной среды проектирования для ПЛИС Xilinx – Xilinx ISE Design Suite.
Программное обеспечение MATLAB компании MathWorks предоставляет
среду, которая способствует ускоренному исследованию математических
решений системных проблем. Возможности исследований в MATLAB
обеспечиваются
обширными
библиотеками
математических
функций,
генераторов сигналов, функций цифровой обработки сигналов, статистической
обработки и др. Есть в наличии также большой набор функций визуализации
результатов исследований в виде графиков и схем. Однако наибольший вклад в
решение задачи аппаратной реализации программных алгоритмов вносит
программа Simulink.
44
Simulink — средство визуального проектирования MATLAB. Simulink
предоставляет графическую среду проектирования для разработки и оценки
характеристик
отображается
динамических
в
привычном
систем,
для
в
которой
проектировщика
структура
виде:
системы
большинство
аппаратных проектов начинаются с описания систем в виде блок-схем, очень
близких по отображению к моделям Simulink (рис. 29). Simulink может
моделировать параллельную работу различных частей системы. Несмотря на
последовательную суть программного кода, работа моделей Simulink выглядит
так, как будто все части модели работают одновременно (т.е. параллельно). Это
представление принципиально важно для создания высокопроизводительных
аппаратных реализаций – такая параллельная модель близка моделям,
реализуемым на языках описания аппаратных средств (VHDL и Verilog).
Рис. 29. Пример simulink-модели динамической системы
Важнейшая часть среды Simulink – навигатор по библиотеке (Library
Browser).
Для
ПО
Simulink
разработана
обширная
библиотека
параметризированных (т.е. имеющих набор изменяемых параметров) функцийблоков. Часть разделов библиотеки включена в состав Simulink «по
умолчанию»,
часть
необходимо
заказывать
дополнительно.
При
проектировании систем ЦОС для FPGA обычно используются следующие
библиотеки:
45
– библиотека блоков Simulink: базовая библиотека математических функций,
источников сигналов (sources) и приемников данных (sinks)
– библиотеки Signal Processing Blockset и Signal Toolbox: функции фильтрации
сигналов, преобразования, статистической обработки и т.п.
– библиотека Fixed-Point Toolbox – библиотека функций, необходимых для
работы программного обеспечения Xilinx.
Из всех перечисленных библиотек только Simulink поставляется в составе ПО
Simulink «по умолчанию», остальные необходимо заказывать дополнительно.
Библиотека
расширяемая:
любой
пользователь
может
добавить
собственную библиотеку блоков. На этом свойстве библиотеки основан
принцип включения программы Xilinx System Generator в среду Simulink.
System Generator – индустриальная среда разработки (IDE) проектов для
FPGA уровня системы. Реализована в виде дополнительного программного
модуля (plug-in) для среды Simulink, добавляющего к существующей
библиотеке собственную библиотеку блоков Xilinx blockset. Программа System
Generator (далее, для краткости – SysGen) призвана заполнить «зазор» между
проектированием на системном уровне в Simulink и средствами аппаратной
реализации системы на FPGA. Для Simulink она предоставляет функции,
позволяющие производить моделирование FPGA-реализации с точностью до
такта и бита, с учетом эффектов квантования и переполнения данных.
Последнее утверждение означает, что для каждого набора данных, полученных
моделью System Generator через входной блок (блок Gateway In из библиотеки
блоков Xilinx blockset) и извлеченных из модели System Generator через
выходной блок (Gateway Out), биты на входных/выходных блоках совпадают с
соответствующими битами реализованного на FPGA устройства в моменты
времени, заданные средой Simulink.
Для средств реализации System Generator является генератором HDL-кода
(поддерживаются языки VHDL и Verilog). Особенность этого генератора – в
46
широком использовании IP-блоков1: из приблизительно 70 блоков Xilinx
blockset, которые могут быть аппаратно реализованы на FPGA (всего в
библиотеке около 100 блоков) более 50 основываются на параметризированных
IP-ядрах LogiCORE™. Такой подход, с одной стороны, упрощает генератор
(что,
соответственно,
повышает
его
надежность
как
генератора
работоспособного HDL-кода), с другой – делает FPGA-реализацию более
эффективной как в плане производительности, так и в плане использования
ресурсов кристалла (IP-блоки обычно оптимизированы для работы на более
высоких тактовых частотах, либо на «экономное» использование структурных
блоков FPGA).
Процесс
разработки
с
помощью
System
Generator
можно
проиллюстрировать диаграммой на рис. 30. Но прежде чем подробнее
рассмотреть каждый из этапов, необходимо ознакомиться с терминологией,
принятой в документации Xilinx и применяемой далее в тексте (в том числе
использованной
в
диаграмме).
Ниже
приводится
список
некоторых
распространенных терминов с кратким описанием их значения.
– RTL – уровень регистровых передач (от словосочетания register transfer
level) – описание структуры устройства через описание передачи данных от
регистра к регистру через комбинаторную логику.
– Testbench – HDL-файл (VHDL или Verilog), содержащий проверочный код.
– Design flow – устоявшийся термин при разработке микросхем, обозначает:
1) технологический процесс разработки; совокупность этапов разработки
микросхемы от концепции до готового изделия;
2) набор программных средств синтеза, преобразования и трассировки при
изготовлении интегральных схем; для FPGA обозначает процесс/набор
средств преобразования HDL-описания в загрузочный bit-файл.
1
IP-блоки (IP-ядра) – готовые блоки для построения систем-на-кристалле; в документации
Xilinx используется термин «IP cores». Аббревиатура IP произошла от Intellectual Property –
интеллектуальный продукт.
47
Разработка
математической
модели в Simulink
System
Generator
Xilinx Blockset
Xilinx CoreGen
Разработка модели
из блоков
Xilinx Blockset
Автоматическая
генерация
HDL-кода
Уровень RTL
Генерация файла с
проверочным кодом
(testbench)
Верификация
средствами ISim или
ModelSim
Процесс реализации
устройства на FPGA
средствами Xilinx
Загрузочный
двоичный файл
(bitstream)
Загрузка в FPGA
Рис. 30. Процесс разработки с использованием System Generator
– Реализация (Implementation в документации Xilinx) – этап процесса
проектирования, включающий отображение логических элементов схемы на
структурные элементы конкретного кристалла
FPGA (mapping), их
размещение на кристалле (placement) и трассировку соединений (routing). В
частности, словосочетание «Процесс реализации устройства на FPGA
средствами Xilinx» на диаграмме рис. 30 – перевод часто используемого в
документации Xilinx словосочетания «Xilinx Implementation Flow».
– Netlist – список соединений – файл, содержащий текстовое описание схемы,
включающее список элементов схемы и соединения между ними
В соответствии с рис. 30 процесс разработки с помощью System Generator
можно разбить на следующие этапы:
1) разработка математической модели устройства средствами Simulink;
2) разработка аппаратурной реализации устройства на FPGA, используя
компоненты библиотеки блоков Xilinx Blockset;
48
3) моделирование аппаратурной реализации средствами Simulink, ISim или
ModelSim. Уточнение аппаратной реализации с помощью System Generator;
4) генерация HDL-кода;
5) реализация устройства средствами ПО Xilinx;
6) загрузка bit-файла на FPGA и аппаратное тестирование устройства.
Модель, использующую средства System Generator’а, можно разделить на
несколько различных частей. «Аппаратно-реализуемая» часть имеет синий цвет
с логотипом «X» (рис. 31). Эта часть впоследствии загружается в FPGA.
Блоки желтого цвета изображают шлюзы «в» и «из» блоков Xilinx. Блоки
Xilinx работают только с данными, представленными числами с фиксированной
точкой. Шлюзы при моделировании (только при моделировании) преобразуют
числа с плавающей точкой (стандартные для Simulink) в различные форматы
чисел с фиксированной точкой, «понятные» блокам System Generator’а. Шлюзы
также «изображают» входы и выходы логического объекта VHDL (entity)
верхнего уровня (контакты микросхемы FPGA-устройства).
«Бесцветные» блоки обычно являются стандартными блоками Simulink.
Наиболее частое исключение из этого правила – включение блоков SysGen в
«подсистему». Блоки подсистем в этом случае выглядят как стандартные блоки
Simulink (см. блок Fibonacci на рис. 31).
Блок
«System
Generator»
–
обязательный
блок
любой
модели,
«ориентированной» на FPGA. Все модели Simulink, использующие блоки
System Generator, должны содержать этот блок. В некоторых случаях может
быть использовано несколько блоков «System Generator», что позволяет
создавать и тестировать устройства, например, с несколькими тактовыми
генераторами. Основное назначение блока – задание глобальных параметров
проекта. На заключительном этапе моделирования блок используется для
генерации HDL-кода.
49
Канал обработки данных и
вспомогательные блоки Sys.Generator’а
Источники ПО
Simulink
Приемники
ПО Simulink
Интерфейсные блоки для соединения
блоков Simulink’а и блоков SysGen’а
(Gateway blocks)
Все модели Simulink
с блоками SysGen
должны содержать
этот блок
Рис. 31. Пример модели канала обработки данных с использованием System Generator
Контроль работоспособности в Simulink может быть выполнен:
1) собственными средствами ПО Simulimk и System Generator («программная»
верификация моделей в Simulimk);
2) моделированием с привлечением сторонних симуляторов HDL-кода (HDLмоделирование);
3) моделированием
с
загрузкой
разработанного
устройства
на
FPGA
(аппаратное моделирование).
Программная верификация применяется, если в модели используются
только «стандартные» блоки System Generator, т.е. отсутствуют какие-либо
блоки, определяемые пользователем («Black box»). По окончании программной
верификации System Generator генерирует HDL-код, который затем реализуeтся
на FPGA стандартными для Xilinx средствами (программой Project Navigator).
Это самый быстрый путь разработки систем.
50
HDL-моделирование
используется,
если
в
модели
совместно
с
«обычными» блоками из библиотеки System Generator используются блоки
«Black Box» – «черные ящики». Эти блоки позволяют включать в модель
собственный HDL-код и произвольные IP-ядра. Так же как и в первом варианте,
SysGen используется только для генерации синтезируемого проекта, который
затем реализуется в программе Project Navigator. Отличие заключается в том,
что для моделирования содержимого «черных ящиков» используются
«сторонние» программы, не входящие в состав программы System Generator –
Xilinx ISE Simulator (ISim) или ModelSim компании Mentor Graphics. Для
использования программы ModelSim в модель должен быть включен
вспомогательный блок «ModelSim». Результат моделирования «сторонних»
программ передается обратно среде Simulink и может быть отображен на
экране средствами Simulink.
Аппаратное моделирование. В документации Xilinx для этой технологии
используется термин «hardware co-simulation». В модели могут быть
использованы как «стандартные» блоки из библиотеки SysGen, так и «черные
ящики» с собственным HDL-кодом или IP-ядрами. При подготовке к
аппаратному
моделированию
запускается
командный
файл,
который
генерирует HDL-код, выполняет реализацию (implementation) проекта для
выбранного кристалла FPGA, создает конфигурационный bit-файл и новую
simulink-библиотеку, в которую помещает специализированный библиотечный
блок для аппаратного моделирования в составе simulink-модели. После
добавления этого блока в simulink-модель можно начинать моделирование. При
запуске моделирования ПО Simulink обнаруживает интерфейсный кабель и
загружает в FPGA сгенерированный bit-файл. По окончании загрузки по
интерфейсному кабелю начинают передаваться в FPGA входные сигналы.
Выходные сигналы также по кабелю принимаются из FPGA и отображаются на
экране средствами Simulink. Следует отметить:
1) на модели одновременно может выполняться как аппаратное, так и
«обычное» программное, либо HDL-моделирование;
51
2) аппаратное моделирование может быть настроено на любую отладочную
плату, на которой распаяны микросхемы FPGA Xilinx, подключенные к
интерфейсу JTAG.
Как и любая технология, предложенная Xilinx технология визуального
проектирования, имеет сильные и слабые стороны. К преимуществам
использования System Generator относится:
1) существенное упрощение и ускорение процесса разработки сложных
цифровых систем: SysGen позволяет сократить промежуток времени между
выработкой концепции цифрового устройства и реализацией его отлаженной
версии на FPGA в несколько раз или даже на порядок, если сравнивать с
традиционной технологией программирования на одном из языков HDL;
2) снижение
требований
к
квалификации
HDL-программистов:
SysGen
позволяет проектировщикам систем самостоятельно выполнять весь цикл
работ, связанный с проектированием «систем на кристалле» – разработка
математической модели, реализация системы на FPGA и ее отладка;
квалификации
системных
проектировщиков
в
большинстве
случаев
оказывается для этого достаточно.
Отмеченные преимущества снижают затраты на разработку цифровых систем.
В качестве недостатков System Generator можно отметить следующее.
1) System Generator опирается на MatLab и Simulink, следовательно, требуется
закупка дополнительного программного обеспечения. В частности, для
запуска SysGen в составе MatLab, требуются следующие пакеты:
– MatLab;
– Simulink;
– Fixed-Point Toolbox;
– Если предполагается разработка цифровых фильтров, то также требуется
пакет Signal Toolbox.
2) System Generator поддерживает 2–3 последние версии MatLab; с выходом
следующей
версии
программного
обеспечения
Xilinx
поддержка
«устаревших» версий MatLab прекращается. На практике это означает, что
52
для
поддержания
цифровой
системы
(разработанной
в
SysGen)
в
«актуальном» состоянии, исправлении ошибок, внесении улучшений есть
два пути:
– оставить на ПК ту комбинацию ПО Xilinx ISE/MatLab, в которой была
разработана система;
– перенести старую разработку на новую версию Xilinx и MatLab с
последующим обязательным тестированием обновленной системы.
Оба пути приводят к дополнительным затратам: либо растут требования к
объему внешней памяти ПК, достаточной для хранения всех комбинаций
ПО Xilinx ISE/MatLab, с одновременным снижением удобства работы на
такой системе, либо растут затраты времени на проект, связанные с
необходимостью дополнительного тестирования системы.
3) IP-ядра, которые использует System Generator, имеют конечный «жизненный
цикл»: старые версии постепенно замещаются новыми. Связано это, вопервых, с выпуском новых семейств кристаллов FPGA, поддержка которых
включается в новые версии IP-ядер. Во-вторых, разрабатываются ядра с
расширенной функциональностью. Соответственно меняется набор блоков
System Generator, требующих поддержки со стороны IP-ядер. Обычно при
переходе на программное обеспечение новой
версии
производится
автоматическое обновление существующих simulink-моделей (выполняется
при загрузке модели в среду simulink), но в некоторых случаях может
потребоваться ручная коррекция. Независимо от метода коррекции моделей
при смене версий рекомендуется обязательное их тестирование с новыми IPядрами.
Следовательно, можно констатировать, что применение ПО SysGen усложняет
(и, возможно, удорожает) поддержку цифровых систем в актуальном
состоянии.
53
2.2
Основы работы в Simulink
Приведенные ниже сведения не охватывают всех возможностей ПО
Simulink и предназначены в первую очередь для ознакомления со средой:
дается краткое описание принципа работы Simulink, приводятся инструкции по
запуску и настройке моделей для работы с SysGen, описываются некоторые
полезные приемы работы. Изложенных сведений достаточно для начала
полноценной работы с System Generator. Более подробную информацию по
программам можно найти в [9] (Simulink) и [10, 11] (System Generator).
2.2.1 Первая SysGen-модель в Simulink
создаются
Simulink-модели
и
работают
в
среде
запущенного
программного обеспечения MatLab и Simulink. Для запуска MatLab необходимо
либо дважды щелкнув на иконке
на рабочем столе (иконка автоматически
создается установщиком ПО MatLab), либо выбрать MatLab через меню Пуск.
Далее все приводимые примеры основаны на «связке» MatLab версии R2009b и
System Generator версии 13. Соответственно вызов MatLab из меню Пуск
выполняется командой Пуск → Все программы → MATLAB → R2009b →
MATLAB R2009b.
Далее необходимо сменить текущий каталог. Путь к новому текущему
каталогу указывается в поле Current Directory главного окна MatLab. Можно
воспользоваться обозревателем, который вызывается кнопкой
, либо
выполнить команду смены каталога в командном окне MatLab, например:
>> cd
В
качестве
загрузочный
C:\MATLAB\work
текущего
файл
целесообразно
(файл
с
указывать
расширением
.mdl)
каталог,
модели,
содержащий
с
которой
предполагается работать. В некоторых случаях это позволит избежать ошибок,
возникающих при старте моделирования. Второе ограничение, которое
необходимо принимать во внимание при работе с MatLab и SysGen – их
54
ограниченная совместимость с кириллическими символами. Соответственно
имена каталогам и моделям рекомендуется давать только с применением
латиницы. Эти же рекомендации относятся к названиям блоков, комментариям,
переменным, используемым в самой модели.
Для запуска Simulink в командном окне MatLab выполнить команду
>> simulink
или нажать соответствующую кнопку в панели инструментов MatLab
(рис. 32, а). В открывшемся навигаторе Simulink Library Browser создать новую
модель (рис. 32, б).
а
б
Вызов настроек решающей программы
в
Рис. 32. Создание и настройка simulink-модели: а) кнопка запуска Simulink из MatLab; б)
кнопка для создания новой simulink-модели; в) окно созданной simulink-модели – вызов
настроек решающей программы
Прежде чем приступить к настройке модели необходимо рассмотреть
особенности реализации процесса моделирования в Simulink, а также
интерпретацию понятия «период дискретизации» программным обеспечением.
55
Программное
обеспечение
Simulink
работает
путем
установки
взаимодействия между моделируемой системой (блок-схемой) и решающей
программой (программой моделирования). Решающая программа (solver)
рассчитывает значения сигналов на выходе блоков, затем
обновляет
дискретные состояния и принимает решение о следующем моменте времени,
для которого выполнить расчет. Программное обеспечение Simulink занимается
передачей необходимой информации:
– от системы (блок-схемы) к решающей программе: параметры и уравнения,
– от решающей программы к системе: рассчитанные состояния, входные
данные, время.
Период дискретизации для любого блока в Simulink означает, как часто
решающая программа выполняется функцию этого блока и, соответственно, как
часто на его выходе появляется результат. Например, период дискретизации
1 / 44100 сек. означает, что функция блока будет выполняться каждую 1 / 44100
секунды (имеется в виду модельное, а не реальное время).
Основные
параметры
решающей
программы
задаются
в
окне
Configuration Parameters, которое вызывается из меню окна модели командой
Simulation → Configuration Parameters (рис. 32, в). В открывшемся диалоговом
окне выбрать закладку Solver (обычно она уже выбрана «по умолчанию»). Для
работы System Generator необходимо задать следующие параметры (рис. 33):
– Type: Fixed-step
– Solver: Discrete (no continuous states)
Simulink предоставляет выбор из нескольких вариантов решающих
программ, причем можно выбирать из «решателей» с переменным либо
фиксированным
шагом.
Однако,
System
Generator
ориентирован
исключительно на дискретное время с постоянным периодом дискретизации.
– Fixed-step size – величина периода дискретизации – минимальный период,
гарантирующий, что ни одно событие не будет пропущено в ходе
моделирования. При выборе периода дискретизации следует помнить о
теореме Котельникова (Найквиста – Nyquist), согласно которой частота
56
дискретизации Fs ≥ 2fmax, где fmax – верхняя частота спектра самого
высокочастотного сигнала в модели. Можно оставить значение AUTO, в
этом случае System Generator сам определит требуемый шаг, исходя из
параметров блоков модели.
– Tasking mode for periodic sample times: Single tasking.
Режим MultiTasking отличается от SingleTasking тем, что при ошибочном
соединении блоков с различной тактовой частотой (т.н. «многочастотные»
системы) генерируется ошибка. В реальных системах такое соединение
«разночастотных» блоков может привести к потере данных и режим
MultiTasking помогает находить такие ошибки. В режиме SingleTasking
такая ошибка не генерируется. System Generator поддерживает только
режим SingleTasking.
Для остальных полей можно оставить значения «по умолчанию».
Рис. 33. Типичные настройки для работы программы System Generator
Знакомство с принципами создания simulink-моделей целесообразно
начинать с блоков, которые практически всегда присутствуют в модели. Это
блоки источников и приемником сигналов. В окне навигатора Simulink Library
Browser они располагаются в подразделах Sources и Sinks раздела библиотеки
Simulink (рис. 34).
57
Рис. 34. Состав библиотек Sources (верхний рисунок) и Sinks (нижний рисунок)
В библиотеке Sources следует обратить внимание на блоки Random
Number, Chirp Signal, Constant, Counter Free-Running и Count Limited, From File,
Ramp, в библиотеке Sinks – на блоки Display, Scope, To File, To Workspace.
Некоторые блоки далее будут рассмотрены более подробно, для остальных
ниже приводится краткое описание.
Блок Random Number генерирует случайные нормально распределенные
числа с заданным математическим ожиданием и дисперсией. Блок Chirp Signal
формирует синусоиду с линейно изменяющейся частотой (линейная частотная
модуляция – ЛЧМ), которую можно использовать при спектральном анализе
нелинейных систем. Блок Constant генерирует одно число, вектор или матрицу
комплексных
чисел.
Как
частный
случай,
генерирует
постоянную
вещественную константу. Блоки Counter Free-Running и Count Limited считают
в прямом направлении до максимально возможного значения, которое для
блока Counter Free-Running равно (2Nbits – 1), где Nbits – параметр «Number of
58
Bits» блока, а для блока Count Limited – задано значением параметра «Upper
limit». Блок From File читает данные из MAT-файла, имя которого
отображается на иконке блока. Блок Ramp генерирует линейно растущий
сигнал, скорость роста которого, начальное значение и момент старта задаются
параметрами блока.
Блок Display из библиотеки Sinks показывает числовое значение сигнала,
присутствующего на его входе. Формат числа задается параметрами блока.
Блок Scope графически отображает зависимость входного сигнала от
модельного времени. Блок может иметь несколько входов (портов), в этом
случае отображается несколько графиков – по одному графику на вход. Все
графики имеют одну ось времени, но независимые оси для сигналов каждого
входного порта. Графики легко масштабируются, что позволяет рассматривать
тонкую структуру сигнала.
Блок To File записывает входные данные в матрицу в MAT-файле. На
каждом шаге дискретизации записывается один столбец матрицы, в котором
первая строка содержит отчет текущего модельного времени, остальные
строки – значения элементов входного вектора данных. Аналогичную
операцию выполняет блок To Workspace, но данные записываются не в файл, а
в переменную в рабочем пространстве MatLab. Имя переменной задается в
параметрах блока. Данные могут сохраняться в переменной в виде массива или
в виде структуры, что также задается параметрами блока.
Основное внимание далее уделяется блокам System Generator. Блоки
программы SysGen находятся в разделах:
– Xilinx Blockset,
– Xilinx Reference Blockset,
– Xilinx XtremeDSP Kit.
Наиболее часто используемые блоки сведены в подраздел Basic Elements
раздела Xilinx Blockset. Первоначальное знакомство с библиотекой можно
начать с простейшей модели, показанной на рис. 35. Блоки перенести мышкой
59
из библиотеки в окно созданной simulink-модели, настроить и соединить в
соответствии с рисунком.
Окно настроек вызывается двойным щелчком мыши на блоке. Для блока
Sine Wave задать значение частоты 2π / 50, для этого ввести в поле параметра
Frequency (rad/sek) строку 2*pi/50. Дважды щелкнуть на блоке Scope и
настроить окно в соответствии с рис. 36.
Пуск моделирования
Длительность моделирования
Рис. 35. Простейшая SysGen-модель
Закладка для указания
количества отсчетов,
отображаемых в окне Scope
Кнопка параметров Scope
Количество
осей в окне
Scope
Рис. 36. Настройка окна блока Scope
60
Соединить блоки. Для этого навести курсор мыши на входной порт
соединяемого блока (значок «>»), нажать левую кнопку и подвести курсор к
выходному порту другого блока или к соединительной линии. Как только
курсор мыши изменит вид с одинарного на двойной крест, отпустить кнопку
мыши. Для указания формата чисел отметить строку меню Format →
Port/Signal Displays → Port Data Types.
Задать
длительность
моделирования
1000
секунд
и
запустить
моделирование (рис. 35). Результат работы можно наблюдать в окне Scope.
Предусмотрены следующие возможности управления отображением
графиков:
– масштабирование по оси X,
– масштабирование по оси Y,
– автоматическое масштабирование,
– ручная установка пределов отображения по оси Y (рис. 37).
Включение режима
масштабирования
по оси X
Отображается отрезок
графика, отмеченный мышью.
Включение режима
масштабирования
по оси Y
Автоматическое масштабирование
(Autoscale)
Щелкнув правой кнопкой мыши на
оси Y, можно вручную установить
пределы отображения
Рис. 37. Элементы настройки отображения графиков в окне Scope
61
Используя кнопки масштабирования, можно отметить отличия в
изображении сигналов в непрерывном (верхний график) и дискретном (нижний
график) времени.
На рис. 38 показана несколько более сложная модель, иллюстрирующая
использование блоков MUX и Spectrum Scope для контроля частотной
характеристика фильтра нижних частот, реализуемого блоком FIR Compile.
Блоки FIR Compile и Scale находятся в библиотеке Xilinx Blockset, подразделах
DSP и Math соответственно; блок MUX – в подразделе Signal Routing
библиотеки Simulink, Spectrum Scope – в подразделе Signal Processing Sinks
библиотеки Signal Processing Blockset.
Рис. 38. Контроль частотной характеристики фильтра
Полученный на рис. 38 результат достигается при следующих параметрах
блоков:
– Random Number: параметр Sample Time = 1,
– FIR Compile: оставить значения по умолчанию,
– Scale: параметр Scale factor = –8,
– Spectrum Scope: отметить Buffer Input, Buffer Size = 256, Number of spectral
averages = 10.
По окончании моделирования выполнить из меню окна Spectrum Scope
команды:
– Channels → Ch 1 → Color → Red,
– Channels → Ch 2 → Color → Blue,
62
– Axes → Autoscale.
Рассмотренная модель показывает типичное применение блоков MUX и
Spectrum Scope для отображения результатов моделирования. Аналогично MUX
можно использовать совместно с блоком Scope. «Работа» MUX заключается в
объединении нескольких входных сигналов в вектор, который затем
обрабатывается программным обеспечением Simulink как один сигнал. Однако
блоки Xilinx не поддерживают генерацию HDL-кода для векторов. Поэтому
вектора и массивы в Simulink-моделях можно использовать только «вне»
SysGen-модели.
Блок Spectrum Scope используется для анализа частотного отклика
систем. При этом желательно использовать достаточно длинные выборки
данных. Для совместимости блоков SysGen и блока Spectrum Scope, в
настройках
надо
включить
буферизацию.
Размер
буфера
определяет
разрешающую способность быстрого преобразования Фурье (FFT). Для того
чтобы сгладить разрывность данных, обусловленных конечностью выборки,
рекомендуется работа с перекрытием (buffer overlap).
Если требуется выполнить точный анализ импульсной реакции фильтра,
возможно, лучшим решением будет сохранение данных в рабочей области
MatLab и последующий анализ средствами MatLab. Связано это с применением
в данном блоке оконной функции и операции нормализации. По умолчанию
выбирается окно Ханна (Hann). Однако в списке окон присутствует
прямоугольное окно. В параметрах блока Spectrum Scope оно называется
Boxcar. Применение этого окна даст спектр, совпадающий по форме с
традиционным преобразованием Фурье. В качестве альтернативы можно
создать собственный измеритель на базе блоков Buffer, FFT и Vector Scope. Все
указанные блоки находятся в подразделах библиотеки Signal Processing
Blockset.
2.2.2 Подсистемы и документирование модели
Большие проекты обычно имеют иерархическую структуру: модули
верхнего уровня содержат модули низкого уровня, те, в свою очередь, состоят
63
из модулей еще более низкого уровня и т.д. Такая структура облегчает
управление проектом, упрощает последующую поддержку и модернизацию
системы. System Generator поддерживает иерархию через блоки подсистем.
Для создания подсистемы необходимо выделить блоки, из которых
должна состоять подсистема (щелкнуть мышью и охватить все требуемые
блоки; можно также щелкнуть мышью на блоке одновременно с нажатой
клавишей Shift) и выбрать в меню окна команду Edit → Create Subsystem (или
нажать Ctrl+G) – рис. 39. Другой способ создания подсистем – использовать
блок пустой подсистемы из библиотеки Simulink / Ports and Subsystems,
открыть его и добавить необходимые блоки.
Открывается подсистема двойным щелчком мыши. Можно также
использовать окно Model Browser, открывающееся по команде View → Model
Browser Options → Model Browser.
Ввести комментарий
Рис. 39. Создание подсистемы
64
Подсистемы
влияют
на
структуру
VHDL-кода,
сгенерированного
программным обеспечением SysGen: подсистемы напрямую контролируют
иерархию в VHDL. Более того, имена подсистем добавляются к именам блоков
и сигналов при анализе проектов средствами реализации Xilinx. Так, в
редакторе FPGA компонент FIR_compiler подсистемы subsystem из модели на
рис. 39 может иметь имя, близкое к subsystem_FIR_compiler.
Общепринятым правилом при создании сложных систем, помимо
иерархичности проекта, считается подробное документирование системы.
Simulink поддерживает документирование через создание маскированных
подсистем и включением комментариев (подписей) непосредственно в окно
модели. Для создания комментария дважды щелкнуть на свободном
пространстве. В открывшемся текстовом окне ввести текст. Для смены формата
щелкнуть на комментарии правой кнопкой мыши, для перемещения текста –
левой. Основное назначение комментариев (подписей) – краткое описание
назначения блоков, особенностей, ограничений применения, максимального,
минимального значений сигналов и т.п. Последнее особенно важно при анализе
роста разрядности вычислений.
Другим способом повышения «удобочитаемости» модели считается
задание значимых названий подсистемам и портам. Порты – стандартные блоки
Simulink,
обеспечивающие
передачу
сигнала
между
подсистемой
и
родительской системой, находятся в библиотеке Simulink / Sinks (выходные
порты) и Simulink / Sources (входные порты). Когда Simulink автоматически
создает подсистему (как на рис. 39) входные и выходные блоки добавляются
автоматически
и
им
присваиваются
стандартные
имена:
In<номер>,
Out<номер>. Входные блоки вызывают появление входных портов подсистемы,
выходные – соответственно выходных. Имена блоков отображаются на блоке
подсистемы как имена портов. Соответственно коррекция имени блока
приведет к коррекции имени порта подсистемы (рис. 40).
65
Рекомендуется явное
использование блоков
Terminator
Рис. 40. Порты подсистемы
Если подсистема создается «с нуля» с помощью «пустого» блока
подсистемы из библиотеки Simulink, входные и выходные блоки должны
добавляться вручную (из библиотек Simulink / Sources или Sinks). Если, при
автоматическом
создании
подсистемы,
Simulink
генерирует
«лишние»
выходные порты (например, порты Out2 и Out3 на рис. 39), соответствующие
этим портам блоки рекомендуется заменить на блоки Terminator из библиотеки
Simulink / Sinks (рис. 40).
2.2.3 Маскированные подсистемы
Simulink содержит удобное средство создания параметризованных
блоков, которое можно использовать как для целей ускорения разработки
моделей
(например,
для
быстрого
подбора
параметров),
так
и
для
окончательного оформления готовой системы в один универсальный блок с
настраиваемыми параметрами. Маскирование позволяет решить следующие
задачи:
– создать специализированный блок с собственной пиктограммой,
66
– создать диалоговое окно для ввода параметров блока,
– создать справку для блока,
– скрыть внутреннюю сложность блока,
– защитить содержимое блока от случайного изменения.
Для создания маскированной подсистемы нужно щелкнуть правой
кнопкой мыши на подсистеме и выбрать Mask Subsystem (Ctrl+M), либо
выполнить команду меню Edit → Mask Subsystem и в открывшемся редакторе
маски Mask Editor задать параметры маскированной системы. Если подсистема
уже замаскирована и требуется коррекция параметров, редактор маски
вызывается командой Edit → Edit Mask. При необходимости маскирование
можно отменить, нажав кнопку Unmask в окне редактора.
Редактор маски имеет четыре вкладки:
– Icon & Ports (пиктограммы, порты),
– Parameters (параметры),
– Initialization (инициализация),
– Documentation (документирование).
Вкладка Icon & Ports контролирует вид блока. Область окна Options
позволяет задать следующие характеристики отображения блока:
– Block Frame – определяет, будет ли видимым прямоугольник вокруг иконки
блока;
– Icon Transparency – определяет, будет ли изображение непрозрачным или
прозрачным (в последнем случае входные и выходные порты блока будут
видимы);
– Icon
Rotation
–
определяет
ориентацию
изображения,
если
блок
поворачивается;
– Icon Units – задает систему координат, используемую командами рисования
plot и text.
Текстовое окно Icon Drawing commands предназначено для ввода команд
MATLAB, управляющих изображением блока. Команды выполняются в том
порядке, который задан в окне. Команды имеют доступ ко всем переменным из
67
маскированной рабочей области (в том числе к переменным, перечисленным в
окне Parameters). Для вывода графиков используется команда plot. Хотя
большинство команд MATLAB не могут быть использованы напрямую, они
могут быть аргументами команды plot. Команды disp или text служат для
вывода текста. Изображения выводятся с помощью команды image, при этом
большинство форматов изображений читаются командой imread. Примеры:
plot(peaks);
disp(‘\n My Icon’);
image(imread(‘xilinx.jpg’));
Если задать только отображение блока, он не становится маскированным.
При двойном щелчке на блоке по-прежнему отображается его содержимое, и
по-прежнему используются параметры из рабочей области MATLAB, а не
маскированной подсистемы. Маскирование начинается с создания переменных
во вкладке Parameters. Вкладка Parameters содержит следующие элементы:
– Dialog parameters – выбор и изменение главных свойств параметров маски;
– Options for selected parameter – дополнительные свойства параметров,
выбранных на панели Dialog Parameters;
– кнопки с левой стороны вкладки Parameters – позволяют добавлять (верхняя
кнопка), удалять (вторая кнопка) или изменять (3-я и 4-я кнопки) порядок
следования параметров в диалоговом окне маскированной подсистемы.
Панель Dialog parameters имеет следующие поля:
– Prompt – текст, идентифицирующий параметр в диалоговом окне
маскированной подсистемы;
– Variable – имя переменной в рабочей области маскированной подсистемы
для хранения значения параметра. Эта переменная может использоваться в
диалоговых окнах блоков, из которых состоит маскированная подсистема;
– Type – тип поля в диалоговом окне: edit/checkbox/popup;
68
– Evaluate – если поле отмечено, заставляет Simulink вычислять выражение,
введенное пользователем. В противном случае выражение трактуется как
строка и без изменений передается переменной;
– Tunable – выбор этой опции позволяет изменять значение параметра в ходе
моделирования системы.
Для создания переменной необходимо:
1) добавить параметр, нажав кнопку
вкладки Parameters;
2) указать подсказку (Prompt);
3) задать имя переменной для хранения параметра;
4) выбрать тип переменной;
5) выбрать свойство вычисляемости (Evaluate);
6) выбрать свойство перестраиваемости (Tunable).
Вкладка Initialization позволяет ввести команды инициализации. Команды
выполняются всякий раз, когда Simulink:
– загружает модель;
– запускает моделирование;
– обновляет блок-схему;
– поворачивает маскированный блок;
– перерисовывает иконку блока (если команды рисования иконки зависят от
переменных, определенных командами инициализации).
Команды инициализации не могут использовать переменные из базовой
рабочей
области
MATLAB.
Для
подавления
нежелательного
вывода
результатов выполнения команд инициализации в окно MATLAB, они должны
заканчиваться точкой с запятой. В качестве примера в закладке инициализации
можно ввести команды
t=[0:0.5:2*pi];
x=cos(t);
y=sin(t);
69
а в закладке Icon ввести:
plot(t,x,t,y)
и закрыть окно редактора маски.
Вкладка Documentation содержит три поля (рис. 41):
– Mask type (тип маски);
– Mask description (описание блока);
– Mask help (справка).
Тип маски – классификатор блока, используемый только для целей
документирования. В качестве типа маски может быть задана любая строка.
Она появляется в верхней левой части диалогового окна блока.
Поле Mask Description содержит текст, появляющийся в диалоговом окне
сразу под строкой типа маски. Если разрабатывается система для «внешнего»
использования, поле Mask Description – лучшее место для описания назначения
или функционирования блока.
Рис. 41. Документирование маскируемой подсистемы
70
Поле Mask Help служит для создания справки по маскируемой
подсистеме, которая вызывается при нажатии кнопки Help диалогового окна
подсистемы. Поле Mask Help может содержать:
– адрес URL (строка, начинающаяся с http, www, file, ftp или mailto);
– команду web (запускает браузер);
– команду eval (вычисляет выражение, заданное строкой);
– статический текст (может быть записан на HTML); отображается в браузере.
2.3
Основы применения технологии Xilinx
2.3.1 Типы данных в System Generator, интерфейс с Simulink
Среда Simulink оперирует при моделировании с числами двойной
точности. На блок-схеме эти числа обозначаются словом double. «Double»
означает 64-битовое число с плавающей точкой в дополнительном коде,
позволяющее представить любое число в диапазоне ±9,223 · 1018 с разрешением
1,08 · 10–19. Числа с плавающей точкой могут быть использованы в FPGA
(операции с ними выполняются с помощью IP-ядер), но требуют значительных
аппаратных ресурсов. Но ресурсы FPGA весьма дороги, следовательно, чем
меньше их использовано для решения задачи, тем дешевле решение. Поэтому в
FPGA основной тип данных – числа с фиксированной точкой. Понимание
двоичных чисел очень важно при разработке систем с использованием блоков
System Generator, поэтому для блок-схем рекомендуется включать режим
отображения типов данных Format → Port/Signal Displays → Port Data Types.
Эта информация бывает очень полезна для анализа роста разрядности в системе
в ходе преобразований.
System Generator поддерживает следующие типы данных.
– Данные со знаком в дополнительном коде (Signed 2’s comp) – на блок-схеме
при включенном режиме Format → Port/Signal Displays → Port Data Types
они обозначаются Fix_N_M.
71
– Данные без знака (Unsigned). На блок-схеме обозначаются Ufix_N_M. Здесь
N – разрядность данных (Number of bits), M – позиция точки относительно
самого младшего разряда (Binary point).
– Логический тип (Boolean). Это вариант всегда определенного 1-разрядного
беззнакового числа, (имеет значение High или Low). Одноразрядное число
без знака (не типа Boolean) может оказаться недействительным, а число типа
Boolean – нет. Этот тип должен использоваться для всех управляющих
портов (таких как CE и RESET) и логических операций. Тип Boolean
является выходным типом данных некоторых блоков, таких как операторы
отношения (сравнения) и логических вентилей.
– Тип DSP48. Специальный тип константы, предназначенной для управления
входом OPMODE блока DSP48.
Преобразование данных между Simulink и System Generator выполняют
блоки Gateway In и Gateway Out. Блок Gateway In имеет следующие функции.
1) Преобразует в ходе моделирования типы данных Simulink, такие как integer,
double, fixed-point в типы данных программы System Generator. Тип,
разрядность чисел и позиция точки задаются параметрами Output type,
Number of bits и Binary point закладки Basic окна настроек блока (рис. 42).
2) Предоставляет варианты поведения при округлении чисел и переполнении
разрядной сетки (параметры Quantization и Overflow на рис. 42).
3) Задает входные порты верхнего уровня в HDL-коде, сгенерированном
программой System Generator.
4) Именует соответствующие порты в HDL-объекте верхнего уровня.
5) Определяет входные тестовые сигналы, если включена опция Create
Testbench в блоке System Generator. В этом случае в ходе генерации HDLкода выполняется дополнительный цикл моделирования и все отсчеты
сигнала, появляющиеся на входе блока, сохраняются в файле данных. При
HDL-моделировании программа моделирования извлекает эти данные из
файла и подает на вход моделируемой системы.
72
Рис. 42. Настройки блока Gateway In (задан тип данных Fix_16_14)
Выбор параметров блока Gateway In должен иметь хорошее обоснование,
поскольку недостаточная разрядность данных (или ошибочное положение
точки) приведет к ошибкам в работе системы, а большой запас по
разрядности – к ее необоснованному удорожанию. Для решения этого вопроса
необходимо представлять, какие диапазон чисел и точность может обеспечить
тот или иной формат числа. Если есть инженерный калькулятор, работающий с
двоичными числами произвольной разрядности с фиксированной точкой,
задача решается достаточно просто. Если такого калькулятора нет, помогает
опыт «ручного» преобразования данных из двоичной в десятичную систему
счисления. Ниже приводится пошаговый пример преобразования двоичного
12-разрядного числа в дополнительном коде типа Fix_12_7 в десятичную
систему счисления.
Исходное число: 1
0
0
1
0
1
1
0
1
1-й шаг. Рассматриваем число как целое в дополнительном коде:
73
0
1
1
100101101011
2-й шаг. Поскольку число отрицательное (в старшем разряде – 1), переводим
его в прямой код:
011010010100
+1
011010010101
3-й шаг. Переводим число в десятичную систему счисления (это позволяет
сделать практически любой инженерный калькулятор):
0110100101012 = 168510
4-й шаг. Делим результат на 2M, где M – позиция точки в исходном числе
(M = 7). В результате учитываем знак:
11010.11010112 = –13.164062510
Блок Gateway Out имеет следующие функции.
1) Преобразует данные с фиксированной с выхода блоков System Generator’а в
тип данных double ПО Simulink.
2) Задает выходные порты верхнего уровня в HDL-коде, сгенерированном
программой System Generator.
3) Именует порты в HDL-объекте верхнего уровня – при условии, если
включена соответствующая опция.
4) Сохраняет выходные сигналы системы, если включена опция Create
Testbench в блоке System Generator. Для каждого блока Gateway Out
сохраняется свой собственный вектор данных. При HDL-моделировании с
этими данными сравниваются выходные сигналы системы, полученные
HDL-моделированием.
2.3.2 Блок System Generator
Все модели Simulink, использующие библиотеку Xilinx blockset, должны
содержать блок System Generator. В некоторых случаях может быть
использовано несколько блоков System Generator (это позволяет создавать и
тестировать устройства, например, с несколькими тактовыми генераторами).
74
Блок System Generator, находящийся в области видимости другого блока
System Generator, называется подчиненным (slave). В противном случае, он
называется основным (master). Большинство системных параметров может
быть задано только в основном блоке. ПО System Generator автоматически
синхронизирует параметры подчиненных и основных блоков, используя
данные основных. Использование нескольких основных блоков в модели
Simulink также возможно.
Поскольку системные параметры, заданные в блоке System Generator,
могут влиять на поведение ПО Simulink, аппаратную реализацию или на
взаимосвязь между двумя любыми блоками из библиотеки Xilinx blockset,
любой элемент из этой библиотеки должен находиться в области видимости
блока System Generator. Соответственно, любая модель Simulink, содержащая
любой блок из этой библиотеки, должна также содержать, по крайней мере,
один блок System Generator.
Основное назначение блока – задание глобальных параметров проекта,
обеспечивающих корректное моделирование и генерацию HDL-кода системы.
Для корректного моделирования необходимо правильно установить системный
период дискретизации Simulink (параметр Simulink system period). Это значение
означает наименьший шаг квантования по времени, при котором должна
работать система; все остальные периоды дискретизации в проекте могут быть
получены из этого минимального периода умножением на целое число.
При реализации на FPGA системный период дискретизации Simulink
приравнивается к периоду системного тактирующего генератора, который в ns
задается в окне параметров блока System Generator (параметр FPGA clock
period) и передается в файл ограничений. В свою очередь, файл ограничений
используется трассировщиком для генерации проекта, удовлетворяющего
заданным временным характеристикам.
После того как проект системы создан и промоделирован, блок System
Generator используется для генерации HDL-кода. Для этого нужно дважды
75
щелкнуть на блоке System Generator, находящемся на верхнем уровне иерархии
модели, и в открывшемся окне параметров задать:
– метод компиляции; «по умолчанию» предлагается метод HDL Netlist – в
этом случае создается проект для последующей реализации системы в
программе Xilinx Project Navigator;
– тип микросхемы FPGA;
– пакет синтеза схем (synthesis tool ); «по умолчанию» выбирается XST (Xilinx
Synthesis Technology);
– язык HDL; поддерживаются языки VHDL и Verilog;
– можно указать необходимость создания файла testbench; для этого надо
отметить поле Create testbench. Необходимо, однако, помнить, что
включение опции Create testbench может привести к значительному
увеличению времени генерации HDL-кода, так как будет запущен процесс
моделирования, в ходе которого запишется файл данных (DAT) и файл с
проверочным кодом (testbench);
– в поле Simulink System Period нужно ввести значение системного периода,
которое обеспечило бы получение всех тактовых частот, с которыми
работают блоки проекта;
– в поле FPGA clock period задать период системной тактовой частоты в
наносекундах, фактически используемой на FPGA. Это значение будет
записано во временных ограничениях в файле UCF и затем учтено
программой PAR при трассировке проекта.
Для запуска процесса генерации HDL-кода нажать кнопку Generate.
2.3.3 Общие параметры блоков
Каждый блок библиотеки Xilinx Blockset имеет некоторый набор
конфигурируемых параметров, доступных через диалоговое окно настроек.
Диалоговое окно настроек вызывается двойным щелчком мыши на иконке
блока или командой Mask Parameters. Многие параметры специфичны для
каждого блока, однако также существуют параметры, общие бля большинства
76
блоков библиотеки. Некоторые общие параметры описаны ниже. Все
параметры могут быть смоделированы, но не все реализуются на FPGA.
Precision – точность результата. Фундаментальный принцип работы
блоков из библиотеки Xilinx заключается в том, что допускается использовать
арифметику
чисел
с
фиксированной
точкой
произвольной
точности.
Большинство блоков допускают управление точностью, т.е. можно задавать
количество битов и позицию точки. По умолчанию, установлен режим полной
точности (Full), т.е. достаточное количество битов для представления
результата без ошибок. Пользовательский режим (User defined) позволяет явно
задать общее количество битов и битов дробной части.
Output Type – тип выходных данных. Может быть беззнаковым
(unsigned) или в дополнительном коде (signed, 2s comp)/
Number of Bits – общее количество битов. Максимальное количество
битов, которое можно задать – 4096.
Binary point – количество битов дробной части; должно принимать
значения между нулем и общим количеством битов.
Overflow – поведение при переполнении. Если точность вычислений
задается пользователем, возможно появление ошибок переполнения и
квантования. Переполнение возникает, когда значение результата лежит за
пределами диапазона представимых чисел (на представление результата
требуется больше битов целой части числа, чем задано пользователем). В
случае переполнения можно выбрать из трех вариантов: отбрасывать старшие
биты (wrap), ограничивать результат на максимальном или минимальном
уровне (Saturate) или остановить моделирование по ошибке (Flag as error).
Quantization – метод квантования. Ошибки квантования возникают,
когда для точного представления результата не хватает битов дробной части
числа. В случае ошибок квантования есть возможность выбрать округление до
ближайшего представимого значения (Round) или отбросить «лишние»
младшие биты (т.е. биты, находящиеся правее самого правого бита, заданного
пользователем) – Truncate.
77
Latency – задержка данных внутри блока. Параметр задает количество
периодов дискретизации входного сигнала, требуемых для того, чтобы отсчеты
входного сигнала блока начали влиять на сигнал на выходе блока. Необходимо
помнить, один период дискретизации может соответствовать нескольким
периодам тактовой частоты при реализации на FPGA многочастотных систем,
или при использовании опции Oversampling некоторых блоков. Обычно
дополнительная задержка реализуется в виде сдвигового регистра на выходе
блока. Некоторые блоки могут иметь достаточно большую задержку в силу
своей внутренней организации (например, FIR-фильтры).
Provide synchronous reset port / Provide enable port – выбор опции
Provide synchronous reset port активирует порт синхронного сброса блока (rst).
Когда на входе блока устанавливается сигнал сброса, блок переходит в
исходное состояние. Выбор опции Provide enable port активирует порт
разрешения блока (en). Если сигнал enable на входе блока не установлен, блок
удерживается в текущем состоянии до тех пор, пока сигнал enable снова не
установится, либо не появится сигнал сброса. Сигнал сброса имеет приоритет
над сигналом разрешения. Сигналы сброса и разрешения должны иметь тип
Boolean.
Sample period – период дискретизации. Поток данных обрабатывается
любой цифровой системой на определенной частоте дискретизации. Обычно
каждый блок определяет частоту дискретизации входного сигнала и формирует
выходные отсчеты на той же частоте. Блоки Up Sample и Down Sample дают
возможность поднять или уменьшить частоту дискретизации. Если включить
опцию
Specify
Explicit
Sample
Period,
можно
явно
указать
частоту
дискретизации сигнала на выходе блока. В некоторых случаях это бывает
полезно, например, при проектировании систем с обратными связями. Если
задать значение –1, период дискретизации будет определяться параметрами
входного сигнала.
78
Use behavioral HDL – задает стиль генерации HDL-кода ПО SysGen.
Если поле Use behavioral HDL отмечено, генерируется поведенческий код, если
не отмечено – структурный на основе IP-ядер.
Use Core Placement Information – если эта опция выбрана, в
сгенерированное
расположении
IP-ядро
включается
элементов
ядра.
информация
Обычно
это
об
относительном
приводит
к
более
быстродействующей реализации блока на FPGA, однако может затруднять
работу
программы
трассировки,
поскольку
ей
приходится
учитывать
дополнительные ограничения.
FPGA Area Estimation / Define FPGA area for resource estimation –
вручную заполняемое поле, характеризующее ресурсоемкость блока. Если в
модели используется блок Resource Estimator (этот блок предназначен для
оценки ресурсоемкости проекта «в целом»), можно запретить ему использовать
автоматически рассчитанную ресурсоемкость блока, отметив опцию Define
FPGA area for resource estimation. Все оценки в этом случае будут взяты из поля
FPGA Area Estimation. Формат заполнения поля: [n1,n2,n3,n4,n5,n6,n7], где
n1 – количество секций FPGA (Slices),
n2 – количество регистров (FFs),
n3 – количество блоков памяти (BRAMs),
n4 – количество таблиц логических функций (LUTs),
n5 – количество блоков ввода/вывода (IOBs ),
n6 – количество аппаратных умножителей (Emb. mults),
n7 – количество буферов с тремя состояниями (TBUFs).
Здесь же можно отметить одно общее свойство всех диалоговых окон
Simulink и SysGen: в поле значения параметра можно записать MATLABвыражение. Это помогает в расчетах и упрощает понимание причин выбора
того или иного значения параметра. Выражения вычисляются в начале
моделирования.
Полезные операторы ПО MATLAB:
+ сложение,
79
– вычитание,
* умножение,
/ деление,
^ возведение в степень,
pi π (3.1415926535897…),
exp(x) – функция: экспонента(выражение).
Выражения полезны, например, для задания частоты синусоиды: вместо
значения в радианах можно просто написать: 2*pi*f. Можно даже определить f
как переменную и задать ее значение в рабочей области MATLAB.
2.3.4 Особенности преобразования типов данных
Большинство блоков Xilinx blocks предоставляют возможность задать
точность своих выходных данных. По умолчанию установлена полная
точность, определяемая из условия наиболее неблагоприятного сочетания
входных данных. При ручном задании точности (этот режим становится
доступен, если выбрать опцию User Defined) может произойти квантование
или
переполнение
результата.
Некоторые
скрытые
эффекты
такого
преобразования показаны ниже.
Квантование происходит, если количества дробных битов не хватает для
представления дробной части результата. Можно:
– отсечь (Truncate): отбросить биты правее самого младшего бита,
– округлить (Round): округлить до ближайшего представимого значения или
до значения, наиболее удаленного от нуля, если результат находится на
одинаковом удалении от обоих представимых значений.
Пример:
Полная точность
1
0
0
1
0
1
FIX_8_5
1
0
0
1
0
1
80
1
1
0
0
1
0
0
Truncate: –3.3125
0
FIX_8_5
1
0
0
1
0
1
1
0
Round: –3.3125
В данном примере число с полной точностью отрицательное, следовательно,
округление выполняется в меньшую сторону (по абсолютной шкале) и
результаты совпадают. В следующем примере результат отсечения и
округления различный:
Полная точность
0
0
1
1
0
1
1
0
1
0
0
0
Полная точность: 1.703125
FIX_8_5
0
0
1
1
0
1
1
0
Truncate: 1.6875
FIX_8_5
0
0
1
1
0
1
1
1
Round: 1.71875
Следует быть осторожным при работе с очень маленькими числами: операция
отсечения
для
положительных
и
отрицательных
чисел
приводит
к
несимметричному относительно нуля результату, операция округления – к
симметричному. Отсечение всегда уменьшает число по абсолютной шкале.
Пример для числа из первого примера, но имеющего тип Unsigned – без
знака: операция отсечения и округления приводит к различным результатам.
Полная точность
1
0
0
1
0
1
1
0
1
0
0
0
Полная точность: 4.703125
UFIX_8_5
1
0
0
1
0
1
1
0
Truncate: 4.6875
UFIX_8_5
1
0
0
1
0
1
1
1
Round: 4.71875
Округление вверх или вниз, в зависимости от значения числа полной
точности, обычно дает более точный результат по сравнению с отсечением. Но
следует
помнить,
что
операция
округления
аппаратных ресурсов.
81
требует
дополнительных
Переполнение происходит, если значение числа лежит вне диапазона
представимых данным форматом чисел. Можно:
– ограничить (saturate) число до максимального положительного или
отрицательного (по абсолютной величине) значения,
– отбросить все значащие биты левее самого старшего бита (Wrap),
– установить признак ошибки по переполнению при моделировании Simulinkмодели (Flag as error).
Пример:
1
1
0
1
1
0
1
Полная точность
Saturate: 3.9375
0
1
1
1
1
1
1
FIX_7_4
Wrap: –1.1875
1
1
0
1
1
0
1
FIX_7_4
что
неправильная
14.8125
Этот
0
пример
1
показывает,
установка
режима
переполнения может привести к серьезным результатам. Режим ограничения
(Saturate) фиксирует максимально возможное число 3.9375 (в числах со знаком
старший бит – знаковый).
В режиме Wrap все лишние старшие биты числа полной точности просто
отбрасываются. Результат становится равным –1.1875.
Можно также установить признак ошибки по переполнению Flag as Error.
В этом случае переполнение приведет к завершению моделирования с
ошибкой. Эта установка влияет только на процесс моделирования.
2.3.5 Блоки преобразования типов данных
В ходе разработки цифровых устройств часто возникает задача
согласования по разрядности и типу данных входов и выходов блоков и
подсистем. В SysGen эту задачу можно решить с помощью блоков
82
преобразования типов данных Reinterpret, Convert, Concat, Slice, BitBasher
(рис. 43).
Рис. 43. Блоки преобразования типов данных
Блок Reinterpret устанавливает тип данных на выходе безотносительно к
тому, какой тип данных имеет сигнал на входе. Общее количество битов и
двоичное представление данных на входе и на выходе блока не изменяется.
Блок позволяет:
– беззнаковые данные интерпретировать как данные со знаком и наоборот,
– масштабировать данные изменением позиции точки.
Блок не использует IP-ядра и аппаратные ресурсы.
Пример:
интерпретация числа типа FIX_9_4 как числа типа FIX_9_0
2.5:
0
0
1
0
1
0
0
0
0
FIX_9_4
80:
0
0
1
0
1
0
0
0
0
FIX_9_0
Блок полезен при объединении его с блоками Slice или Concat.
Рассмотрим ситуацию: дано два сигнала, один переносит данные со знаком,
другой представляет собой целое беззнаковое число из двух битов. Требуется
объединить два сигнала так, чтобы два бита второго сигнала подсоединились к
младшим битам первого.
Задачу можно решить, использовав два блока Reinterpret и блок Concat.
Первый блок Reinterpret преобразует число со знаком в беззнаковое число с
позицией точки в нуле. Далее блок Concat объединяет два беззнаковых числа в
одно. И наконец, второй блок Reinterpret интерпретирует результат как число
со знаком (с правильной позицией точки).
83
Хотя в примере использовано три блока, аппаратная реализация
заключается всего лишь в объединении шин данных, что не требует
дополнительных аппаратных ресурсов.
Блок Convert преобразует каждый входной отсчет в число требуемого
типа с сохранением, если возможно, его величины. Тип исходного числа может
быть преобразован в знаковый (в дополнительном коде), беззнаковый или
логический. Общее количество битов и позиция точки задается пользователем.
Могут быть заданы режимы переполнения и квантования. Блок не использует
IP-ядер LogiCORE, но может требовать дополнительных аппаратных ресурсов в
зависимости от выбора режима переполнения и квантования: логика
округления и ограничения использует ресурсы FPGA, в остальных случаях
ресурсы FPGA не требуются.
Алгоритм работы блока:
– пользователь задает общее количество битов, положение двоичной точки и
арифметический тип (signed/unsigned),
– блок выравнивает позицию двоичной точки входного и выходного портов,
– к числу применяются заданные пользователем настройки по количеству
битов и позиции точки, при необходимости выполняется заданная операция
переполнения и квантования и формируется выходное число.
Пример. Число на выходе блока имеет то же значение, что и число на
входе, но другое количество битов и позицию точки:
FIX_10_7:
FIX_8_3:
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
0
Сначала блок принимает число в формате FIX_10_7. Затем, выравниваются
форматы чисел входного и выходного портов относительно точки и к
выходному числу применяется новый формат FIX_8_3. В результате новое
число имеет пять целых и три дробных разряда. Наконец, если новый формат
84
не имеет достаточно битов для представления исходного числа, выполняются
операции квантования и переполнения. Также, если требуется, выполняется
расширение знака.
Пример преобразования числа типа FIX_10_7 в тип FIX_5_0 с
получением различных результатов:
FIX_10_7:
+2.5
0
1
0
1
0
0
0
0
0
FIX_5_0: +2
0
0
0
1
0
Truncate (отбрасывание битов)
FIX_5_0: +3
0
0
0
1
1
Round
0
(округление)
Блок Concat Выполняет объединение нескольких чисел в одно число.
Все входные данные должны быть беззнаковыми целыми (т.е. беззнаковыми
числами с позицией двоичной точки в нуле). Количество входов может быть от
2 до 1024. Крайние верхний и нижний входные порты обозначаются метками hi
и lo, остальные порты меток не имеют. Числа, поступающие на порт hi,
представляют
самые
старшие
биты
результирующего
числа.
Числа,
поступающие на порт lo, становятся самыми младшими биты результирующего
числа.
Тип результирующего числа – беззнаковое целое. Для преобразования
знаковый → беззнаковый можно использовать блок Reinterpret. Блок не
использует IP-ядер LogiCORE и аппаратных ресурсов.
Блок Slice позволяет вырезать последовательность битов из входного
числа и передать их на выход. Выходные данные имеют беззнаковый тип с
позицией двоичной точки в нуле. Выходные данные могут также иметь тип
Boolean, если размер выходного числа – один бит.
Блок предоставляет несколько механизмов указания положения и
количества извлекаемых из входного числа битов. Если тип входных данных
совершенно
точно
известен,
многообразие
механизмов
не
добавляет
функциональности блоку. Другое дело, если разрабатываемая система
85
постоянно корректируется при поиске оптимального решения. В этом случае
разнообразие вариантов выбора становится очень полезным для разработчика.
Например, блок может быть сконфигурирован для выбора только самого
старшего бита, только целых битов или только первых трех дробных битов.
Пример. Из числа типа FIX_9_5 требуется вырезать четыре бита, причем
младший бит вырезаемой секции смещен на 4 бита относительно LSB (least
significant bit, самый младший бит):
2.5:
5:
0
0
1
0
1
0
1
0
1
0
0
0
0
Вариант решения 1. Выбрать Width of slice: 4; Offset of top bit: –1;
отметить Upper-bit location + width и MSB of input (MSB – самый старший
бит).
Вариант решения 2 . Выбрать Two-bit locations; Offset of top bit: –1; MSB
of input; Offset of bottom bit: 5 ; LSB of input
Блок BitBasher позволяет выполнять Манипуляции с битами с помощью
текстовых выражений, основанных на синтаксисе языка Verilog. Во многих
отношениях блок BitBasher является комбинацией блоков Slice и Concat.
Поддерживаются операции сцепления (Concatenation), вырезания (Slicing) и
повторения битов. Допускается объединение с двоичными, десятичными,
восьмеричными или шестнадцатеричными константами. В выражении должен
присутствовать хотя бы один входной порт. Поддерживается до четырех
выходных портов. Количество выходных портов определяется количеством
выражений в закладке Basic – каждый следующий выходной порт описывается
выражением на новой строке. Тип выходных данных и позиция точки задается
в закладке Output Type (рис. 44). Блок не потребляет ресурсов FPGA.
86
Рис. 44. Настройки блока BitBasher
Примеры выражений блока BitBasher:
Объединение входов b, d, e, f:
a = {b,d,e,f}
Вход b образовывает старшие биты (MSB) выхода a, а f – LSB.
Вырезание битов:
a = {b[17:7]}
Биты нумеруются от 0 (LSB) до [общее_количество_битов – 1] (MSB).
Изменение порядка битов на обратный:
a = {b[0:7]}
Предполагается, что вход b – 8-разрядный.
Повторение:
a = {4{b,d}}
4 – коэффициент повторения для выражения в скобках {b,d}; 4{b,d}
эквивалентно {b,d,b,d,b,d,b,d}.
Использование констант:
a={4'o14,4'hf,3'b110,5'd22,b}
4’o14 представляет восьмеричную константу (4’o14) длиной 4 бита (4’o14) и
значением 14 в восьмеричном коде (4’o14). Символы b, d и h представляют
двоичные, десятичные и шестнадцатеричные числа соответственно.
2.3.6 Блоки программного управления данными Expression и MCode
В библиотеку блоков программы System Generator включены блоки,
обеспечивающие аппаратную реализацию некоторых функций при помощи
конструкций языка программирования. Это блоки Expression и MCode.
87
Блок
Expression
производит
побитовые
логические
операции.
Выражение задается операторами:
&
– И (высший приоритет),
|
– ИЛИ,
~
– НЕ,
^
– Исключающее ИЛИ (низший приоритет).
Приоритет выполнения операций может быть изменен применением скобок.
Блок имеет следующие параметры:
Expression: побитовое логическое выражение. Количество и метки
входных портов блока выводятся из этого выражения.
Align Binary Point: указывает блоку автоматически выравнивать входные
данные по позиции двоичной точки. Выходные числа имеют тот же размер и
тип, что и входные данные. Если тип входных данных различается и выбрана
опция Align Binary Point, выравнивание выполняется автоматически, а тип
результата определяется выравниванием. Если на входе присутствуют знаковые
и беззнаковые данные, выход будет знаковым. Если опция Align Binary Point не
отмечена, положение двоичной точки
для всех входных чисел должно
совпадать.
Блок Expression реализуется с помощью LUT (Lookup Table) в FPGA.
Пример выражения:
~((A1 | A2) & (B1 ^ B2))
Блок с таким выражением будет иметь четыре входных порта с именами A1, A2,
B1 и B2.
Блок MCode позволяет использовать программы, написанные на языке
MATLAB, для моделирования управляющих структур аппаратного уровня.
Программа MATLAB транслируется в VHDL при генерации VHDL-кода. Блок
MCode имеет особенности, которые следует учитывать при его применении.
Полное
описание
блока,
ограничения
языка,
список
разрешенных
к
применению в блоке функций MATLAB можно найти в справке SysGen
88
(справка открывается нажатием кнопки HELP диалогового окна блока MCode)
или в [12]. Ниже приведены базовые сведения.
Основные ограничения MCode:
– все входы и выходы должны иметь разрешенный в программе System
Generator тип с фиксированной точкой;
– блок должен иметь не менее одного входного и одного выходного порта;
– блок поддерживает ограниченный набор операторов.
Ниже перечислены конструкции, разрешенные к применению в MCode.
Операторы:
if, if/else, if/elseif, switch/case, = (присвоения);
арифметические операторы – только сложение и вычитание;
операторы отношения: < (меньше), <= (меньше или равно), > (больше), >=
(больше или равно), == (равно), ~= (не равно);
логические операторы: & (И), | (ИЛИ), ~ (НЕ);
Типы данных:
– с фиксированной точкой – беззнаковый и со знаком; логический (Boolean);
– все значения должны быть скалярными, массивы не поддерживаются.
Тип integer автоматически конвертируется в тип с фиксированной точкой
подходящей длины с позицией точки в нуле. Предопределенные типы
MATLAB true и false автоматически преобразуются в логический – Boolean.
Для преобразования плавающей точки необходимо воспользоваться функцией
xfix(). Вызов функции xfix() имеет следующий формат:
xfix(precision, value).
Параметр precision задается с помощью специального типа матрицы, Cell Array
(в MATLAB элементы матрицы этого типа заключены в фигурные скобки).
Матрица может содержать один, три или пять элементов. Полное определение
точности требует пяти элементов:
89
precision := {тип данных, количество разрядов, разрядов дробной части, метод
квантования, метод ограничения}
Тип данных может быть: xlSigned, xlUnsigned, xlBoolean (соответствует
знаковому, беззнаковому и логическому типам в System Generator. Если задан
тип данных xlBoolean, следующие четыре параметра (количество разрядов
общее,
количество
разрядов
дробной
части;
методы
квантования
и
ограничения) должны отсутствовать. Если заданы типы xlSigned или
xlUnsigned, можно опустить параметры метод квантования и метод
ограничения. В этом случае в качестве метода квантования будет выбран
xlTruncate, а метода ограничения – xlWrap (см. ниже).
Метод квантования: xlTruncate, xlRound и xlRoundBanker. Метод xlTruncate
задает режим отбрасывания, xlRound – округление «к большему от нуля»,
xlRoundBanker –округление к ближайшему четному («банковское» округление).
Метод ограничения: xlWrap, xlSaturate (отбрасывание и ограничение) и
xlThrowOverflow. Если задан метод xlThrowOverflow, переполнение при
моделировании приведет к ошибке с остановкой моделирования.
Пример: вызов функции
xfix({xlSigned, 20, 16, xlRound, xlWrap}, 3.1415926)
возвращает аппроксимацию π следующего типа: число со знаком, занимает 20
битов, 16 битов дробная часть, квантование выполнено округлением,
переполнение – отбрасыванием старших битов.
Блок MCode поддерживает специализированный тип данных xl_state,
предназначенный для создания переменных состояния конечных автоматов
(finite state machine – FSM), модулей оперативной (random access memory –
RAM) и постоянной (read-only memory – ROM) памяти. Статическая
переменная, с помощью которой предполагается реализовать любой элемент
90
памяти, должна быть объявлена ключевым словом MATLAB persistent и
должна быть проинициализирована вызовом функции xl_state.
Формат вызова функции xl_state:
v = xl_state(init, precision),
где v – инициализируемая статическая переменная, init – начальное значение
переменной v, precision – ее точность. Параметр precision имеет формат,
совпадающий с одноименным параметром функции xfix(). В качестве precision
может быть использована любая переменная разрешенного в System Generator
типа (например, любая переменная, инициализированная функцией xfix).
Переменная v может быть вектором или скаляром. При аппаратной
реализации на FPGA вектор синтезируется как блок памяти RAM (если
переменной v присваиваются какие-либо значения) или ROM (если переменная
v только читается), скаляры реализуются в виде регистров. Размерность v
зависит от размерности init (в MATLAB размерность массива можно получить с
помощью функции length). Если length(init) > 1, v – вектор, иначе – скаляр.
Пример создания вектора s из 8 элементов, инициализированных нулем:
persistent s, s = xl_state(zeros(1, 4),{xlSigned, 4, 0});
Для явного задания размерности вектора можно использовать вызов
функции xl_state с тремя параметрами:
v = xl_state(init, precision, maxlen).
В этом случае размерность вектора v задается параметром maxlen и может не
совпадать с размерностью init. Например, возможен вызов
v = xl_state([], precision, 8),
91
в результате которого будет создан «пустой» вектор v с максимальной
размерностью 8.
Если v – вектор типа xl_state, для него определены дополнительные
функции
(«методы»
в
терминологии
объектно-ориентированного
программирования). Ниже перечислены некоторые из них.
al = v(idx); –
возвращает значение элемента вектора v по адресу idx.
v(idx) = val; –
присваивает элементу вектора v по адресу idx значение val.
v.push_front(val);–
вставляет val в начало вектора, затем длина вектора
увеличивается на единицу. Если вектор заполнен, генерируется ошибка.
v.pop_back;
–
извлекает один элемент из конца вектора, затем
уменьшает длину вектора на единицу. Обращение к «пустому» вектору
приводит к ошибке.
b = v.back; –
возвращает значение элемента из конца вектора. Обращение к
«пустому» вектору приводит к ошибке.
Функции
v.push_front,
v.pop_back
и
v.back
можно
использовать
для
организации очереди типа FIFO (первый вошел – первый вышел).
v.push_front_pop_back(val); – реализует операцию сдвига: вставляет val в
начало очереди и извлекает один элемент из конца очереди. Длина очереди
остается постоянной. Очередь не может быть пустой.
В качестве примера программы для блока MCode рассмотрим функцию,
реализующую аккумулятор на FPGA:
function q = accum(din, rst)
init = 0;
persistent s, s = xl_state(init, {xlSigned, 4, 0});
q = s;
if rst
s = init;
else
92
s = s + din;
end
В ходе моделирования, при первом вызове функции accum() будет создана
статическая скалярная 4-разрядная переменная s со знаком, позицией точки в
нуле и нулевым начальным значением. При последующих входах в accum()
функция xl_state() не вызывается, а в арифметических операциях используется
то значение s, которое эта переменная получила раньше (в предыдущих
вызовах accum).
При конфигурировании блока MCode в параметре «MATLAB Function»
диалогового окна необходимо указать имя m-файла, содержащего определение
функции блока. Имя m-файла должно совпадать с именем функции, а сам файл
должен существовать где-либо в стандартных путях MATLAB или в том же
каталоге, что и файл модели. На рис. 2.17 показан пример конфигурирования
функции, реализующей на FPGA цепочку сумматоров (adder chain).
Сдвиговый регистр
Реализация на
FPGA
x0
x1
+
x2
x3
Рис. 45. Конфигурирование блока MCode
93
+
+
Количество и имена портов блока определяются параметрами функции:
по одному входному порту на каждый параметр функции и по одному
выходному порту на каждое значение, возвращаемое функцией. Существует
возможность уменьшить количество входных и выходных портов блока,
получая при этом различную функциональность одной MATLAB-функции
(m-функции) при использовании ее в различных блоках MCode. Это
достигается привязыванием входных аргументов к конкретному значению и
подавлением выходов. Диалог контроля портов находится в закладке Interface
окна параметров блока (рис. 2.18).
Без коррекции
портов
После присвоения входному
порту конкретного значения
и подавления выхода
Рис. 46. Конфигурирование портов блока MCode
После связывания входного параметра с конкретным значением (Bind to
value) этот параметр уже не отображается в качестве входного порта блока.
Выходные порты подавляются выбором опции Suppress output этого же окна
параметров.
94
2.4
Многочастотные системы
2.4.1 Принципы создания многочастотных систем в System Generator
Ключевая
особенность
значительного
количества
систем
ЦОС
заключается в том, что в них используется преобразование частоты вверх или
вниз, и обычно это приводит к появлению нескольких различных частот
дискретизации. Следовательно, необходимо поддерживать не только различные
частоты дискретизации, но и передачу данных между зонами с различными
частотами.
В Simulink (как и в блоках программы System Generator) понятие «период
дискретизации» определяет частоту, с которой блок «пробуждается» для
выполнения своей функции и передачи на выход результата. Соответственно,
любой сигнал simulink-модели дискретизирован: изменения сигнала происходят
через равные промежутки времени, называемые временем выборки.
Период дискретизации блока обычно определяется временем выборки
входного сигнала. Некоторые блоки позволяют явно задать необходимость
наследования параметров входного сигнала с помощью обозначения в
диалоговом окне: Sample time = –1. Период дискретизации должен быть
установлен явно в блоках:
– Gateway In,
– в блоках без входов (например, блок Constant)
Наименьший период дискретизации модели должен быть указан в блоке System
Generator в качестве системного периода.
Многочастотная Simulink-модель содержит блоки, работающие с
различными
периодами
дискретизации.
Преобразование
дискретизации могут вызывать следующие блоки:
– Up Sample, Down Sample,
– Assert,
– Time Division Multiplexer, Time Division Demultiplexer,
– Serial to Parallel, Parallel to Serial,
– Dual-Port Memory, Register, Addressable Shift Register,
95
частоты
– FIR Filter (режимы с изменением частоты дискретизации).
Up Sample и Down Sample – наиболее часто используемые блоки в
многочастотных моделях. Они напрямую повышают или понижают частоту
дискретизации данных. Однако их применение (как и любое изменение частоты
дискретизации сигналов в любых цифровых системах) приводит к побочному
эффекту, связанному с изменением спектра сигналов. Характер изменений
спектра иллюстрируется графиками на рисунках 47 и 48.
Исходный сигнал
Cигнал на выходе Up Sample в
режиме вставки нулей между
отсчетами
Cигнал на выходе Up Sample в
режиме повторения отсчетов
Рис. 47. Спектр сигнала на входе и выходе блока Up Sample в режимах вставки нулей и
повторения последнего значения отсчета; частота дискретизации на входе блока fд1 = 25 Гц,
на выходе – fд2 = 100 Гц; сигнал – синусоида с частотой fс = 0,8 Гц,
На рис. 47 показаны спектры сигналов на входе и выходе блока Up
Sample, повышающего частоту дискретизации в четыре раза. Графики
получены моделированием в MATLAB синусоидального сигнала с частотой
96
fс = 0,8 Гц, частотой дискретизации на входе и выходе блока Up Sample
fд1 = 25 Гц и fд2 = 100 Гц и для двух режимов работы блока:
– с вставкой нулей между отсчетами «старого» сигнала,
– с повторением значений отсчетов «старого» сигнала.
Повышение частоты дискретизации приводит к появлению копий спектра
исходного сигнала на кратных частотах. Для ослабления этих копий обычно
после блока повышения частоты дискретизации ставится ФНЧ. В англоязычной
литературе такие фильтры обычно называют «фильтр защиты от наложения
спектров» – antialiasing filter. На основании графиков можно также сделать
вывод о преимуществах режима «с повторением значений»: спектр сигнала на
выходе такого блока имеет подавленные гармоники, что позволяет упростить
характеристики ФНЧ. Из недостатков этого режима – некоторое искажение
исходного спектра сигнала.
Понижение частоты может привести к наложению спектра, если спектр
не ограничен по полосе. Следовательно, перед блоком понижения частоты
также
часто
желателен
ФНЧ,
ослабляющий
высшие
спектральные
составляющие исходного сигнала.
Исходный сигнал
Cигнал на выходе Down Sample
Рис. 48. Спектр сигнала на входе и выходе блока Down Sample; частота дискретизации на
входе блока fд1 = 25 Гц, на выходе – fд3 = 6,25 Гц; сигнал – синусоида с частотой fс = 0,8 Гц,
97
Блоки Parallel to Serial и Serial to Parallel преобразуют параллельный код
в последовательный и наоборот и могут быть полезны при взаимодействии с
последовательными АЦП и ЦАП. Частота на выходе блока Parallel to Serial
выше (блока Serial to Parallel, соответственно, ниже) входной частоты в M раз,
где M – ширина входных (выходных) данных в битах.
Блок Time Division Multiplexer уплотняет данные входных портов в один
выходной поток, имеющий более высокую частоту дискретизации. Степень
повышения частоты определяется количеством входных портов. Блок может
иметь от 2 до 32 входных порта и 1 выходной порт. Все входные порты должны
иметь одинаковый тип данных, точность и частоту дискретизации. Выходной
порт имеет тот же арифметический тип и точность, что и входные порты.
Выходная частота дискретизации определяется как произведение n · r, где n –
число входных портов, r – их общая частота дискретизации.
Блок Time Division Demultiplexer принимает последовательные входные
данные и распределяет их на выходные порты на меньшей частоте. Блок имеет
один входной порт и несколько выходных (от 1до 32). Тип данных на выходе
совпадает с типом данных на входе. Поведение блока и степень понижения
частоты определяется типом его реализации, длиной и количеством единиц в
векторе параметров Frame sampling pattern диалогового окна блока.
Возможны две реализации блока: одноканальная и многоканальная. При
одноканальной реализации блок имеет 1 входной, 1 выходной порт и работает
как элемент прореживания входных данных. Длина вектора Frame sampling
pattern устанавливает длину входного кадра данных. Позиция единиц в векторе
задает входные данные, которые должны передаваться на выход, а количество
единиц определяет коэффициент понижения частоты k = n / n1. Здесь n – размер
входного кадра, а n1 – количество единиц в векторе Frame sampling pattern.
Поскольку System Generator допускает только кратное изменение частоты
дискретизации, k должно быть целым.
При многоканальной реализации блок также имеет 1 вход. Количество
выходных портов равно количеству единиц в векторе frame sampling pattern.
98
Длина вектора параметров устанавливает длину входного кадра. Позиция
единиц в векторе задает входные данные, которые должны быть переданы на
соответствующий выходной порт. Коэффициент понижения частоты блока
равен размеру входного кадра.
2.4.2 Проектирование фильтров
Цифровые фильтры – элементы, наиболее часто встречающиеся в
системах цифровой обработки сигналов. Библиотека System Generator содержит
специализированные блоки, применяемые для цифровой фильтрации (раздел
библиотеки DSP), в частности:
– FIR Compiler,
– FDATool.
Блок FIR Compiler предназначен для реализации фильтра с конечной
импульсной реакцией (FIR – finite impulse response). Блок использует IP-ядро
LogiCORE «FIR Compiler» и может создавать фильтры с применением как
специализированных
ресурсов
FPGA
(например,
фильтр
реализуется
каскадным соединением секций DSP48), так и стандартной логики. Фильтр на
базе стандартной логики не использует умножители и блоки DSP48 и может
применяться на FPGA, не имеющих аппаратных блоков умножения, либо если
необходимое количество секций DSP48 недоступно. В терминологии Xilinx
этот вид фильтра называется фильтром с архитектурой распределенных
вычислений – distributed arithmetic architecture, или DA-фильтром.
Параметры блока FIR Compile распределены по трем закладкам
диалогового окна: Filter Specification – спецификации фильтра, Implementation –
реализация и Detailed Implementation – детали реализации (рис. 49).
Закладка Filter Specification определяет коэффициенты, тип, количество
каналов и степень передискретизации фильтра.
Вектор коэффициентов задается в поле «Coefficient Vector» как векторстрока в формате языка программирования MATLAB. Порядок фильтра
(количество выводов в структуре фильтра) выводится из длины этого вектора.
Реализована поддержка блока FDATool (см. ниже).
99
В поле «Number of Coefficient Sets» задается количество различных
наборов
коэффициентов.
Значение
больше
1
приводит
к
генерации
перестраиваемого фильтра.
В поле «Filter Type» возможен выбор следующих типов фильтров.
– Single_Rate: частота дискретизации данных на входе и выходе одинакова.
– Interpolation: частота дискретизации данных на выходе выше входной
частоты в количество раз, заданное параметром Interpolation rate value.
– Decimation: частота дискретизации данных на выходе ниже входной, степень
изменения задается параметром Decimation rate value.
– Interpolated: структура фильтра совпадает со структурой традиционного FIRфильтра, но оператор единичной задержки заменяется (k – 1) элементами
задержки.
– Polyphase_Filter_Bank_Transmitter: режим фильтрации предназначен для
работы совместно с ядром быстрого преобразования Фурье (БПФ – FFT) –
фильтрует данные с выхода блока БПФ.
– Polyphase_Filter_Bank_Receiver: режим фильтрации также предназначен для
работы совместно с ядром БПФ – фильтрует данные на входе БПФ.
а
б
в
Рис. 49. Диалог настройки блока FIR Compile, закладки Filter Specification (а), Implementation
(б) и Detailed Implementation (в)
100
В поле «Rate Change Type» задается тип коэффициента изменения
частоты: целый/дробный.
В поле «Number of Channels» задается количество каналов данных,
обрабатываемых блоком (поддерживается до 64 каналов)
Параметр
«Hardware
Oversampling
Specification»
задает
степень
передискретизации фильтра kпередискр – отношение между частотой поступления
входных данных fs (или частотой формирования выходных данных – смотря
какая выше) и внутренней тактовой частотой ядра fвнутр. Для одноканального
FIR-фильтра
kпередискр = fвнутр / fs.
Степень
передискретизации
определяет
количество коэффициентов фильтра, обрабатываемых одной секцией DSP48.
Например, если порядок фильтра (для FIR-фильтра его порядок на единицу
меньше количества коэффициентов) меньше степени передискретизации,
фильтр может быть реализован на
одной секции DSP48. Если же
передискретизация отсутствует (fвнутр = fs, kпередискр = 1) для реализации фильтра
потребуется столько же секций DSP48, сколько коэффициентов имеет фильтр
(исключение – учет симметричности структуры коэффициентов приводит к
снижению необходимого количества DSP48 в два раза). Если нет специальных
требований к фильтру, рекомендуется выбирать максимально возможную
степень передискретизации, выбирая для параметра «Hardware Oversampling
Specification» значение «Maximum_Possible».
Закладка Implementation определяет структуру и точность фильтра.
Параметр «Filter Architecture» позволяет задать следующие варианты
реализщации:
– Systolic_Multiply_Accumulate: фильтр прямой реализации первого типа
(Direct Form Type I) с конвейерной структурой на основе цепочки секций
DSP48. Эта архитектура позволяет учесть симметричность коэффициентов
фильтра и уменьшить необходимое количество секций DSP48 в два раза.
– Transpose_Multiply_Accumulate:
транспонированный
FIR-фильтр
(называемый также Direct Form Type II) на основе цепочки секций DSP48.
101
– Distributed_Arithmetic: фильтр, реализованный помощью стандартной логики
FPGA (без применения секций DSP).
Параметр «Use reloadable coefficients» добавляет к блоку фильтра входной
порт для загрузки коэффициентов.
Параметр «Coefficient Structure» становиться доступен, если выбрана
архитектура «Systolic_Multiply_Accumulate». Варианты выбора:
– Inferred (определяется автоматически),
– Non_Symmetric (несимметричная),
– Symmetric (симметричная),
– Negative_Symmetric (отрицательная симметрия),
– Half_band (коэффициенты полуполосного фильтра),
– Hilbert (коэффициенты фильтра для преобразования Гильберта).
В зависимости от структуры IP-ядро реализует тот или иной метод
оптимизации фильтра. Структура коэффициентов должна совпадать с выбором.
Исключение – Inferred, – в этом случае программа настройки фильтра сама
анализирует структуру коэффициентов.
Параметры «Coefficient type», «Quantization» и «Coefficient width» задают
тип и точность представления коэффициентов фильтра, а «Output rounding
mode» и «Output width» – точность результата. В качестве «Output rounding
mode» целесообразно оставить значение «по умолчанию» – Full_Precision,
обеспечивающее полную точность результата.
Закладка Detailed Implementation.
Параметр «Optimization Goal» задает предпочтение при реализации
фильтра – должно ли ядро занимать меньшую площадь (отмечена позиция
Area) или максимальную скорость (отмечена позиция Speed)
Параметр
«Control
Options»
позволяет
включить
необязательные
управляющие сигналы, которые могут быть нужны для работы остальной части
системы.
Параметр
«Memory
Options»:
тип
памяти
для
хранения
входных / выходных данных может задаваться пользователем, а может
102
выбираться
автоматически.
В
большинстве
случаев
рекомендуется
автоматический выбор.
«DSP Slice Column Options» – поддержка реализации фильтров на FPGA с
несколькими столбцами DSP.
Блок FDATool предоставляет интерфейс к программе FDATool (Filter
Design and Analysis Tool – программа проектирования и анализа фильтров),
программного обеспечения MATLAB. Блок предназначен для расчета и
сохранения данных о фильтре в составе модели программы SysGen и не
использует аппаратных ресурсов FPGA. Для того чтобы блок работал в составе
Simulink-модели, на ПК должен быть установлен пакет Signal Processing
Toolbox.
Программа FDATool может быть вызвана двумя способами: с помощью
блока FDATool из библиотеки Xilinx Blockset, либо напрямую из консольного
окна
MATLAB.
Первый
способ
вызова
предоставляет
возможность
автоматического импорта спроектированного фильтра в блок FIR Compile. Для
того чтобы использовать эту возможность следует:
1) скопировать блок в подсистему, содержащую разрабатываемые фильтры;
2) запустить графический интерфейс программы FDATool, дважды щелкнув на
изображении блока в Simulink-модели;
3) задать параметры фильтра (закладка «Design Filter» в нижней части окна
программы – рис. 50, частотные характеристики и порядок фильтра
контролируются в верхней части окна), нажать кнопку «Design Filter».
Спроектированный фильтр сохраняется во встроенных структурах данных
блока FDATool. Коэффициенты фильтра могут быть извлечены из блока с
помощью вспомогательных MATLAB-функций xlfda_numerator(‘FDATool’)
и xlfda_denominator(‘FDATool’). Первая функция возвращает числитель,
вторая – знаменатель фильтра, сгенерированного блоком с именем
«FDATool»;
103
4) в
поле
«Coefficient
блока
Vector»
FIR
Compile
ввести
xlfda_numerator(‘BlockName’). Вместо BlockName необходимо указать имя
того блока, который использовался для проектирования фильтра (simulinkмодель может содержать несколько блоков FDATool, имена блоков не
должны совпадать).
Область
контроля
характеристик
фильтра
Закладка
«Design Filter»
Рис. 50. Графический интерфейс программы FDATool
при запуске с помощью блока Xilinx FDATool
При вызове программы FDATool из командной строки MATLAB (второй
способ вызова) появляется возможность исследовать эффекты квантования
входных данных и коэффициентов на частотный отклик фильтра. Для этого:
– выполнить команду FDATool в командном окне MATLAB;
– создать или импортировать в программу эталонный (неквантованный)
фильтр;
– перейти в закладку Set Quantization Parameters (рис. 51);
– задать арифметику фильтра Fixed-point;
– задать параметры квантования для коэффициентов, входных/выходных
данных, внутренней реализации
104
– щелкнуть кнопку Apply и оценить частотный отклик квантованного
фильтра. На графике отображаются обе частотные характеристики –
эталонного (пунктирная линия) и квантованного фильтра (сплошная линия).
Область
контроля
характеристик
фильтра
Закладка «Set
quantization
parameters»
Рис. 51. Графический интерфейс программы FDATool
при запуске с помощью блока Xilinx FDATool
2.4.3 Отладка многочастотных систем
В сложных многочастотных проектах бывает полезно отслеживать зоны с
различными частотами дискретизации. System Generator предоставляет для
этого следующие возможности:
– включение одного из режимов показа частот дискретизации в иконке блока;
– цветовая кодировка зон с различными частотами дискретизации;
– использование специализированных блоков (например, блока Sample Time из
библиотеки Xilinx Blockset → Tools).
Режимы изображения иконок блоков библиотеки Xilinx Blockset задаются
в меню Block Icon Display в параметрах блока System Generator. При выборе
одного из режимов после компиляции модели (которая происходит при
105
генерации, моделировании или после нажатия<Ctrl+D>), на иконке блока
может отображаться следующая информация:
– Default: имена портов (выбор «по умолчанию»);
– Sample periods: нормализованные периоды дискретизации (отношение
периода дискретизации сигнала на входе или выходе блока к системному
периоду, заданному параметром «Simulink system period» блока System
Generator);
– Sample frequencies: частоты дискретизации в МГц;
– Pipeline stages: количество стадий конвейера;
– HDL port names: HDL-имена портов;
– Input data types: типы данных каждого входного порта;
– Output data types: типы данных каждого выходного порта.
Для отображения частот подходят вторая и третья позиции меню.
Цветовая кодировка включается в меню Format → Sample Time Display →
Colors. При этом цвет обозначает следующие частотные зоны:
– черный непрерывные блоки (нет дискретизации);
– пурпурный
константы;
– желтый гибридные блоки (блоки с несколькими частотами, например,
подсистемы);
– красный максимальная частота дискретизации;
– зеленый ниже максимальной частоты дискретизации на ступень;
– синий
частота дискретизации ниже максимальной на 2 ступени;
– светло-синий частота дискретизации ниже максимальной на 3 ступени;
– темный зеленый
частота дискретизации ниже максимальной на 4
ступени;
– оранжевый
частота дискретизации ниже максимальной на 5 ступеней;
– голубой блоки в синхронизируемых (triggered) подсистемах.
На рис. 52 показан пример цифрового преобразователя в GSM-приложениях с
включенным цветовым кодированием. На этой же схеме показан пример
106
применения блока Sample Time, результат работы которого отображается
блоками Display из библиотеки Simulink.
Рис. 52. Модель цифрового преобразователя с включенным цветовым кодированием зон с
различными частотами дискретизации
При работе с включенным цветовым кодированием необходимо помнить,
что Simulink не перерисовывает автоматически модель при изменении частоты
дискретизации того или иного блока. Поэтому после коррекции модели для
отображения результата необходимо явно задать команду перерисовки: Edit →
Update Diagram (Ctrl-D).
2.4.4 Аппаратная реализация многочастотности
Блок System Generator позволяет выбрать один из трех методов
реализации много частотности:
– Clock enables (установлен по умолчанию);
– Hybrid DCM-CE;
– Expose clock ports.
В режиме Clock enables на все блоки модели поступает одна и та же
системная тактовая частота, самая высокая в проекте. Однако блок
задействуется (на один период тактовой частоты) с помощью сигнала CE (Clock
Enable) только на своей собственной частоте дискретизации.
Если FPGA-кристалл, на котором предполагается реализовать модель,
имеет аппаратный блок Digital Clock Manager (DCM), можно выбрать вариант
Hybrid DCM-CE. В этом случае часть частот дискретизации формируется с
помощью блока DCM. DCM может помочь, если модель при реализации на
FPGA не достигает требуемого быстродействия (например, из-за высокого
107
коэффициента разветвления по сигналу CE). Для этого режима существуют
ограничения, в частности, на DCM можно получить до трех частот
дискретизации. Остальные частоты, если модель их использует, будут
реализованы с помощью сигнала CE.
Режим Expose clock ports делает видимыми порты синхросигналов. В
этом режиме, в отличие от двух предыдущих, необходимо самостоятельно
создавать генераторы тактовых сигналов.
По умолчанию установлен режим Clock enables. В этом режиме System
Generator автоматически генерирует схему синхронизации (default_click_driver),
которая
периодически
устанавливает
сигнал
CE
(на
один
период
синхросигнала) для каждого из коэффициентов кратности. В качестве примера
на рис. 53 показан фрагмент схемы модели, имеющей четыре частоты
дискретизации
(для
получения
схемы
simulink-модель
сгенерирована
программой System Generator в режиме Clock enables, запущена программа
Project Navigator из состава пакета Xilinx ISE Design Suite и выполнен процесс
View RTL Schematic). Как следует из рисунка, схема синхронизации для
каждой частоты формирует два сигнала – clk_m и ce_m, где m – значение
нормализованного периода дискретизации (отношение периода дискретизации
сигнала к системному периоду, заданному параметром «Simulink system period»
блока System Generator). Однако фактически все сигналы clk_m представляют
собой копии системного синхросигнала clk, поступающего на вход модели (это
утверждение справедливо только для режима Clock enables). Информация о
дискретизации содержится в сигналах ce_1 – ce_6, причем сигнал ce_1,
соответствующий самой высокой частоте дискретизации, всегда равен единице.
Описанный принцип можно проиллюстрировать временной диаграммой на
рис. 54. На рисунке показан пример многочастотной simulink-модели и
временные диаграммы сигналов на выходе блоков этой модели. Самый
высокочастотный элемент схемы – блок Register. Сигнал ce_1 на его входе
имеет постоянный высокий уровень. Сигналы ce_2 и ce_6 задают пониженную
частоту
дискретизации
сигнала
на
выходе
108
блоков
Down Sample 1
и
Down Sample 2, устанавливаясь в единицу каждый 2-й и 6-й период системной
тактовой частоты.
Сигнал
sysce
всегда 1
Схема
синхронизации
Сгенерированная
simulink-модель
Рис. 53. Фрагмент RTL-схемы из проекта программы Project Navigator для simulink-модели,
имеющей четыре частоты дискретизации
а)
Системная частота
Выход блока Register
Сигнал ce_1 блока
Register
Выход блока
Down Sample 1
Сигнал ce_2 блока
Down Sample 1
Выход блока
Down Sample 2
Сигнал ce_6 блока
Down Sample 2
0101=5
0111=7
0110=6
1111 =-1
0111=7
0101 = +5
0000=0
1011 = –5
0111=7
1110=-2
0001=1
0111=7
0000 = 0
б)
Рис. 54. Пример многочастотной simulink-модели (а) и временные диаграммы сигналов на
выходе блоков этой модели (б)
109
Главные элементы схемы синхронизации – счетчик и логика сравнения.
System Generator по умолчанию никак не использует DCM и другие
специализированные блоки синхронизации FPGA (BUFG, CMT, PLL), что
может
оказать
существенное
реализованной
на
синхросигнала
в
FPGA
разных
влияние
модели
на
скоростные
(например,
частях
за
кристалла).
характеристики
счет
Для
расфазировки
сохранения
производительности синхросигнал перед подачей на вход clk модели
рекомендуется пропускать через блоки синхронизации FPGA (элементы
синхронизации FPGA подробно рассмотрены в главе 1). Однако эта операция
требует ручного кодирования на языке VHDL или использования схемного
редактора ПО Xilinx.
110
3 БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Кузелин М.О., Кнышев Д.А., Зотов В.Ю. Современные семейства ПЛИС
фирмы Xilinx. Справочное пособие. – М. : Горячая линия – Телеком, 2004. –
440 с.: ил.
2. Грушвицкий Р. И., Мурсаев А. Х., Угрюмов Е. П. Проектирование систем на
микросхемах с программируемой структурой. – 2-у изд., перераб. и доп. –
СПб. : БХВ-Петербург, 2006. – 736 с. : ил.
3. Virtex™ 2.5 V FPGA Complete Data Sheet, v2.5 : Product Specification
[Электронный ресурс] / Xilinx, Inc. – Электрон. дан. – [Б. м.], 2001. – Режим
доступа:
http://www.xilinx.com/support/documentation/data_sheets/ds003.pdf,
свободный. – Загл. с экрана.
4. Spartan-3 FPGA Family Data Sheet, v2.4 : Product Specification [Электронный
ресурс] / Xilinx, Inc. – Электрон. дан. – [Б. м.], 2008. – Режим доступа:
http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf,
свободный. – Загл. с экрана.
5. Virtex-4 FPGA User Guide, v2.6 [Электронный ресурс] / Xilinx, Inc. –
Электрон. дан. – [Б. м.], 2008. – Режим доступа: http://www.xilinx.com/
support/documentation/user_guides/ug070.pdf, свободный. – Загл. с экрана.
6. Зотов В.Ю. Проектирование цифровых устройств на основе ПЛИС фирмы
XILINX в САПР WebPACK ISE. – М. : Горячая линия-Телеком, 2003. –
624 с., ил.
7. Virtex-5 FPGA User Guide, v5.3 [Электронный ресурс] / Xilinx, Inc. –
Электрон. дан. – [Б. м.], 2010. – Режим доступа: http://www.xilinx.com/
support/documentation/user_guides/ug190.pdf, свободный. – Загл. с экрана.
8. Virtex-5 Data Sheet: DC and Switching Characteristics, v3.0 : Advance Product
Specification [Электронный ресурс] / Xilinx, Inc. – Электрон. дан. – [Б. м.],
2008.
–
Режим
доступа:
http://www.xilinx.com/support/documentation/
data_sheets/ds202.pdf, свободный. – Загл. с экрана.
111
9. Черных. И.В. Simulink: Инструмент моделирования динамических систем
[Электронный ресурс] / Softline Co – Электрон. дан. – [Б. м.], 2011. – Режим
доступа: http://matlab.exponenta.ru/simulink/book1/index.php, свободный. –
Загл. с экрана.
10.System Generator for DSP Getting Started Guide, v13.1 [Электронный ресурс] /
Xilinx, Inc. – Электрон. дан. – [Б. м.], 2011. – Режим доступа:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/sysgen_gs.
pdf, свободный. – Загл. с экрана.
11.System Generator for DSP User Guide, v13.1 [Электронный ресурс] / Xilinx,
Inc.
–
Электрон.
дан.
–
[Б.
м.],
2011.
–
Режим
доступа:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/sysgen_us
er.pdf, свободный. – Загл. с экрана.
12.System Generator for DSP Reference Guide, v13.1 [Электронный ресурс] /
Xilinx, Inc. – Электрон. дан. – [Б. м.], 2011. – Режим доступа:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/sysgen_ref
.pdf, свободный. – Загл. с экрана.
112
Электронный образовательный ресурс УрФУ
Составитель:
Долматов Андрей Геннадьевич
ЦИФРОВАЯ ОБРАБОТКА СИГНАЛОВ НА ПЛИС XILINX
Редактор
Подготовка к публикации
Рекомендовано Методическим советом
Разрешено к публикации 21.09.2011
Электронный формат - pdf
Объем 5,7 уч.-изд. л.
УрФУ
620002, Екатеринбург, ул. Mиpa, 19
Информационный портал УрФУ
http://www.ustu.ru
Download