Автор работы: Пользователь скрыл имя, 15 Января 2015 в 23:36, курсовая работа
ПЛИС представляет собой микросхему, функциональность которой
определяется при программировании (применительно к ПЛИС обычно
используют термин «конфигурирование»). Пакет LabVIEW FPGA Module
предназначен для работы с постоянно расширяющимся семейством
реконфигурируемых устройств ввода-вывода (reconfigurable input/output,
RIO) компании National Instruments: плат сбора данных R-серии (R-series
DAQ), систем Compact Vision, CompactRIO, и PXI. Полный список
оборудования можно найти на сайте ni.com. Платы R-серии применяются
в сложных системах сбора данных, работающих в режиме реального
времени. Встроенное в систему Compact Vision ядро ПЛИС обеспечивает
поддержку триггеринга и синхронизации. ПЛИС в составе модульной
системы CompactRIO выполняет функции тактирования ввода-вывода,
цифровой обработки сигналов и дискретного управления. Блок
тактирования и синхронизации в системах NI PXI (контроллер второго
слота), отвечает за тактирование, триггеринг и синхронизацию нескольких
систем PXI.
Saturation Arithmetic VIs (функции арифметики с насыщением) |
Функции предназначены для контроля переполнений при арифметических операциях. Вместо стандартной модульной арифметики может быть использована арифметика с насыщением. |
Utilities VIs (дополнительные функции) |
Субпалитра содержит различные функции, например: детектирование изменений состояния логического входа, детектирование пересечений нуля сигналом, добавление фазового сдвига, обрезание сигнала, линейная интерполяция. |
При разработке FPGA VI необходимо учитывать особенности обмена данными с контроллером реального времени. В RT Host VI используются следующие функции для организации передачи данных и управления виртуальным прибором FPGA VI:
Входы и выходы ПЛИС обеспечивают возможность подключения внешних устройств, например датчиков и приводов. Все фиксированные ресурсы ввода-вывода ПЛИС используются для обмена данными с другими компонентами системы. На некоторых устройствах ПЛИС ресурсы ввода- вывода соответствуют линиям на соединительных панелях или терминалах, а на других — внутренним каналам системы. Выделяют два типа ресурсов ввода-вывода — цифровые и аналоговые. Устройство ПЛИС может иметь по несколько ресурсов обоих типов. Более подробную информацию о ресурсах ввода-вывода конкретного устройства ПЛИС можно найти в документации к этому устройству.
В состав пакета LabVIEW FPGA Module входят несколько примеров по работе с узлами ввода вывода. В главном меню выберите Help»Find Examples, затем откройте раздел Toolkits and Modules»FPGA»CompactRIO»Basic IO and Toolkits and Modules»FPGA»CompactRIO»FPGA Fundamentals.
В разделе, посвященном работе с узлами ввода-вывода ПЛИС, будет использоваться следующая терминология:
• Имя (Alias) — уникальный идентификатор канала, заданный разработчиком. Если переназначить канал, соответствующий определенному имени, все узлы ввода-вывода с данным именем будут обновлены.
Виртуальный прибор FPGA VI определяет конфигурацию ПЛИС. В процессе работы сконфигурированная ПЛИС осуществляет заданные операции ввода-вывода на аппаратном уровне. Например, если создать узел ввода-вывода для считывания состояния цифровой линии, в процессе работы ПЛИС будет определять состояние линии и возвращать результат. Таким образом, ПЛИС может реагировать на изменение состояния линии с высокой скоростью и детерминизмом по времени.
Один узел ввода-вывода на блок-диаграмме может содержать несколько входных и выходных терминалов различных типов. При помощи узлов свойств и методов ПЛИС можно получить доступ к специальным возможностям конкретных устройств ПЛИС.
Цифровые ресурсы ввода-вывода могут представляться в виде независимых цифровых линий, либо объединяться в группы (цифровые порты).
Цифровой линии соответствует логический тип данных (Boolean), а цифровому порту — тип «8-битовое беззнаковое целое» (U8), по одному биту на линию. Некоторые устройства поддерживают только одно представление — либо линии, либо порты, но в большинстве устройств ПЛИС одни и те же физические линии могут быть представлены как в виде портов, так и в виде отдельных линий.
Значения каналов аналогового ввода-вывода имеют тип 32-битового (I32) или 16-битового (I16) целого. Если создать узел аналогового ввода на блок- диаграмме, в процессе работы он будет запускать аналогово-цифровое преобразование (АЦП), дожидаться результата и возвращать полученное значение. Особенности преобразования и тип возвращаемого значения зависят от модуля ввода-вывода. В рамках FPGA VI используется только двоичное представление. Значения в двоичном представлении могут быть переданы на контроллер реального времени для преобразования в формат с плавающей точкой, соответствующий принятым единицам измерения.
Если создать узел аналогового вывода на блок-диаграмме, в процессе работы он будет запускать цифро-аналоговое преобразование (ЦАП), которое заканчивается выводом заданного напряжения на терминал. Тип значения, подаваемого на вход узла аналогового вывода, зависит от модуля ввода-вывода. Обычно применяются два подхода к организации аналогового вывода. В рамках первого подхода для преобразования значений в двоичное представление используется RT Host VI, затем значения передаются в FPGA VI. Согласно второму подходу, все вычисления производятся внутри FPGA VI в двоичном представлении, что затрудняет программирование, но избавляет от необходимости передачи данных из RT Host VI. В любом случае, на узел аналогового вывода необходимо подать значение в двоичном представлении.
Поместите узел ввода-вывода на блок-диаграмму, воспользовавшись палитрой функций, или перетащив нужный узел из иерархии проекта, как показано на рис. 4-13.
Рис. 4-13. Добавление узла ввода-вывода на блок-диаграмму
Если вы поместили на блок-диаграмму узел из палитры функций, кликните по нему правой кнопкой мыши, выберите Select FPGA I/O, затем выберите имя узла из списка, как показано на рис. 4-14. В меню Select FPGA I/O перечислены имена узлов ввода-вывода в соответствии с их расположением в иерархии проекта. Более быстрый способ открыть меню — кликнуть левой кнопкой мыши по названию узла на блок-диаграмме.
Рис. 4-14. Настройка узла ввода-вывода
Кликните правой кнопкой мыши по узлу ввода-вывода на блок-диаграмме и выберите Show Error Terminals (показать терминалы ошибок). На узле ввода-вывода будут показаны стандартные терминалы ошибок LabVIEW. Если в процессе выполнения кода ПЛИС произойдет ошибка, входные значения могут оказаться неверными. Проверка состояния кластера ошибок позволяет контролировать достоверность входных данных. Типы ошибок зависят от модуля ввода-вывода. Подробную информацию о типах ошибок для конкретного устройства можно найти в документации к этому устройству. Терминалы ошибок требуют дополнительных ресурсов ПЛИС, а также могут привести к снижению скорости выполнения кода. В общем случае терминалы ошибок рекомендованы к использованию, однако при нехватке ресурсов или скорости они могут быть отключены после тщательного тестирования приложения.
Для некоторых модулей ввода-вывода, например NI 9233, частота оцифровки и количество точек выборки может быть заданы непосредственно, по аналогии с режимом конечной выборки (finite samples) в DAQmx. Другие модули, например NI 9122, работают в поточечном режиме (single sample). Для организации непрерывного сбора данных при помощи таких модулей необходим цикл. Тактирование цикла, а значит и тактирование ввода-вывода, осуществляется при помощи функций субпалитры Timing (тактирование), показанной на рис. 4-15.
Рис. 4-15. Субпалитра Timing
Функция Loop Timer (тактирование цикла) позволяет задавать длительность итерации цикла. На первой итерации цикла функция Loop Timer записывает текущее время. На следующих итерациях она прибавляет заданную длительность к записанному ранее времени и приостанавливает выполнение кода до наступления этого момента. На ПЛИС функция Loop Timer не приостанавливает выполнение на первой итерации цикла. Если вы поместите функцию Loop Timer таким образом, что она будет выполняться в самом начале итерации цикла, то код, расположенный параллельно функции Loop Timer, выполнится два раза, перед тем как сработает первое ожидание. Чтобы избежать этого, необходимо поместить функцию Loop Timer в первый фрейм структуры Sequence (последовательность), а остальной код — в последующие фреймы. На первой итерации цикла функция Loop Timer запишет текущее время, затем без задержки будут выполнены следующие фреймы. На второй итерации функция Loop Timer рассчитает момент окончания ожидания и приостановит выполнение программы до наступления этого момента. Последующие фреймы будут выполнены только после окончания ожидания. Если время выполнения кода превышает заданную длительность итерации, фаза тактирования сдвигается. Поведение функции Loop Timer и функции Wait Until Next ms Multiple в этом случае отличается. Функция Wait Until Next ms Multiple всегда заканчивает ожидание в моменты времени, кратные заданной на входном терминале длительности итерации.
Диалоговое окно функции Loop Timer включает следующие элементы:
Входной терминал функции Loop Timer задает длительность итерации (период) цикла. Выходной терминал возвращает значение счетчика, запущенного одновременно с FPGA VI. Значение счетчика сбрасывается при достижении максимального значения, которое определяется параметром Size of Internal Counter.
Для тактирования цикла можно также использовать функцию Wait (ожидание). Функция Wait приостанавливает выполнение кода ПЛИС на заданный промежуток времени. Функция Wait подходит для задания длительности цифрового импульса, генерируемого на канале цифрового вывода, или для создания задержки между двумя операциями. Отличия между функциями Wait и Loop Timer касаются особенностей их работы в цикле. Функция Wait осуществляет задержку после каждой итерации, а при использовании функции Loop Timer две первые итерации цикла будут выполняться без задержки.
На рис. 4-16 показана функция Loop Timer, помещенная в первый фрейм структуры Sequence. Структура Sequence находится внутри цикла While, обеспечивающего непрерывность выполнения кода. На вход условного терминала цикла подается константа False, так как запуском и остановкой виртуального прибора будет управлять RT Host VI. Во втором фрейме структуры Sequence находятся узлы ввода-вывода и индикаторы, через которые осуществляется передача данных в RT Host VI.
Рис. 4-16. Тактирование цикла
Функция Tick Count (счетчик тактов) возвращает текущее значение счетчика тактов ПЛИС. Данная функция чаще всего используется для измерения времени выполнения кода и реализации собственных таймеров.
На рис. 4-16 показана блок-диаграмма виртуального прибора с тремя индикаторами и одним элементом управления. Используя функции программного доступа к лицевой панели ПЛИС (FPGA Interface Functions), можно производить запись и чтение значений этих элементов из RT Host VI или Windows Host VI. При этом FPGA VI будет выполняться на устройстве ПЛИС, а Host VI — на компьютере или контроллере реального времени. Функции доступа к лицевой панели ПЛИС находятся в субпалитре FPGA Interface, доступной на контроллере реального времени и компьютере с ОС Windows.
Ниже перечислены задачи, для решения которых необходима организация взаимодействия между устройством ПЛИС и контроллером:
• Дополнительная обработка данных, которую нецелесообразно проводить на ПЛИС.
- Операции, которые невозможно реализовать на ПЛИС, например, вычисления с плавающей точкой.
При разработке виртуальных приборов для ПЛИС рекомендуется следовать двум принципам: 1) разбивайте код на отдельные виртуальные приборы (subVI); 2) перед компиляцией проверяйте код в режиме эмуляции. Следуя первому принципу, вы обеспечиваете модульность вашего приложения. Каждый виртуальный прибор может быть протестирован отдельно, что положительно сказывается на надежности всего приложения.
Узлы ввода-вывода рекомендуется помещать на блок-диаграмму основного виртуального прибора, так как при этом генерируется более эффективный код. К тому же, у вас будет возможность проверить работу остальных виртуальных приборов перед компиляцией. В режиме эмуляции доступны все стандартные средства отладки LabVIEW: подсветка выполнения, пробники, точки останова и т. д.
Так как процесс компиляции занимает от нескольких минут до нескольких часов, LabVIEW поддерживает режим эмуляции, позволяющий проверить логику работы виртуального прибора перед компиляцией. В режиме эмуляции код виртуального прибора выполняется на компьютере, при этом обеспечивается доступ к аппаратным ресурсам ввода-вывода. В режиме эмуляции доступны все стандартные средства отладки LabVIEW: подсветка выполнения, пробники, точки останова и т. д.
Если FPGA VI запустить в режиме эмуляции, код блок-диаграммы будет выполняться на компьютере. На узлы ввода будут подаваться либо случайные значения, либо значения с реальных каналов. В последнем случае на ПЛИС загружается специальный заранее скомпилированный виртуальный прибор. LabVIEW обеспечивает передачу данных между ПЛИС и FPGA VI, запущенным в режиме эмуляции. Режим эмуляции поддерживается не для всех устройств ПЛИС. Более подробную информацию о поддержке режима эмуляции конкретным устройством можно найти в документации к этому устройству.