Генерация кодов на языке Си и новые пользовательские библиотеки в SystemView

№ 5’2005
В SystemView имеется возможность генерировать исходный код на языке Си для отдельных элементов схемы, части схемы или полной схемы, используя встроенную утилиту C-Code Generator.

Генератор Си-кода

В SystemView имеется возможность генерировать исходный код на языке Си для отдельных элементов схемы, части схемы или полной схемы, используя встроенную утилиту C-Code Generator. Утилита C-Code Generator может быть использована также с Real-Time DSP Architect (RTDA) (связь с цифровыми сигнальными процессорами Texas Instruments) для обеспечения аппаратно-программного моделирования плат Evaluation Module (EVM) или DSP Starter Kit (DSK).

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

Для создания исходного кода воспользуемся примером узкополосного модулятора GMSK (Gaussian Minimum Shift Keying — Гауссовская манипуляция с минимальным частотным сдвигом), построенного с использованием элементов из библиотеки DSP. С помощью курсора выделим элементы, для которых мы хотим сгенерировать исходный код. После выделения интересующих элементов следует выбрать пункт Code Generator из меню Tools, или просто щелкнуть правой кнопкой мыши и выбрать Code Generator (рис. 1).

Пример узкополосного модулятора GMSK (пунктиром выделены элементы, для которых создаются коды на языке Си) (Рис. 1)

Пример узкополосного модулятора GMSK
Рис. 1. Пример узкополосного модулятора GMSK (пунктиром выделены элементы, для которых создаются коды на языке Си)

После этого появится показанное на рис. 2 диалоговое окно C-Code Generator, отображающее различные опции для создания исходного кода.

Диалоговое окно C-Code Generator (Рис. 2)

Диалоговое окно C-Code Generator
Рис. 2. Диалоговое окно C-Code Generator

Данное диалоговое окно позволяет пользователю произвести организацию процесса генерации кода за 5 шагов:

  1. выбрать заданный процессор;
  2. выбрать тип оболочки для генерируемого кода;
  3. установить размер буфера обработки;
  4. выбрать элементы, исходный код которых следует поместить во внутреннюю часть программы управления;
  5. выбрать директорию для размещения созданного кода.

На первом шаге задается тип процессора, на котором будет использоваться сгенерированный код. Имеются предварительно заданные опции для TI C6x и TI C5x, а также 32-разрядные конструкции Windows. Также обеспечиваются пользовательские настройки, в которых можно задать форматы представления данных для той базовой системы, которая будет использоваться. При использовании пользовательских опций генерация кода может быть выполнена для вычислительной машины практически любой конфигурации.

Если воспользоваться пользовательской опцией (Custom) и щелкнуть по кнопке Define, откроется диалоговое окно, с помощью которого задаются форматы данных, обеспечивающие совместимость с конфигурацией выбранной вычислительной машины (рис. 3).

Диалоговое окно Custom Processor Definition (Рис. 3)

Диалоговое окно Custom Processor Definition
Рис. 3. Диалоговое окно Custom Processor Definition

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

На третьем шаге в процессе генерации кода требуется выбрать минимальный размер буфера для обработки данных в выбранной подсистеме. Число, показанное в нижней части окна редактирования — это минимальное число входных отсчетов, которые могут быть обработаны созданной программой одновременно. Если у выбранного элемента имеется больше, чем один вход, число должно соответствовать размеру наименьшего входного буфера. Размеры других входных буферов будут изменены соответственно. Пользователь может увеличивать масштаб минимального размера буфера, задавая масштабный коэффициент в виде целого числа. Новый размер буфера будет отражен в созданном коде.

На четвертом шаге требуется указать, какие из выбранных элементов, если таковые вообще имеются, должны быть помещены во внутреннюю часть управляющей программы. Если щелкнуть по кнопке Select Inline в диалоговом окне C-Code Generator, откроется окно Inline Code Selection (рис. 4).

Диалоговое окно Inline Code Selection (Рис. 4)

Диалоговое окно Inline Code Selection
Рис. 4. Диалоговое окно Inline Code Selection

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

На пятом шаге в подготовке к созданию исходного кода выбирается директория, в которую он будет помещен. Как только директория будет выбрана, щелкните OK — генератор создаст необходимые файлы и поместит их в эту директорию.

Мы выберем элементы из нашей системы GMSK и создадим код для базовой системы Windows (x86), выбрав SystemView Custom Token как принятый тип оболочки. После выбора директории и щелчка по кнопке OK появится сообщение об успешном завершении процедуры генерации кода (рис. 5).

Сообщение об успешном завершении генерации кодов (Рис. 5)

Сообщение об успешном завершении генерации кодов
Рис. 5. Сообщение об успешном завершении генерации кодов

Информация о состоянии процесса создания программы после каждого шага записывается в системный журнал. Файл журнала помещается в директорию, куда производится запись генерируемого Си-кода, и имеет расширение .log.

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

Перечень файлов, созданных генератором кода (Рис. 6)

Перечень файлов, созданных генератором кода
Рис. 6. Перечень файлов, созданных генератором кода

В процессе генерации кода помимо файлов, содержащих исходный код для элемента (<элемент>.c), будут при необходимости созданы файлы, задающие начальные условия выполнения (<элемент>_init.c) и файлы указателей (<элемент>_ptr.c) для обмена данными, в случае, если данный элемент не был включен в основную управляющую программу.

Главная управляющая программа разделена на семь файлов. Каждый имеет в качестве приставки название моделируемой схемы в SystemView (в нашем примере это «GMSK»). Заголовочные «GMSK» файлы содержат информацию о распределении динамической и постоянной памяти, необходимой для каждого элемента.

Ниже приведен листинг основной управляющей программы GMSK.C.

В продолжение нашего примера, можно создать пользовательский элемент из сгенерированного кода для использования в SystemView. Более подробная информация о построении пользовательских элементов изложена в руководстве [10]. Сначала мы должны создать новый проект Win32 DLL с помощью Microsoft Visual C++. В Visual C++ просто выделите все файлы, созданные генератором кода в назначенной директории, и создайте DLL (динамически подключаемую библиотеку). Для создания пользовательских элементов никакие другие файлы не нужны. Созданная DLL может быть возвращена в SystemView, где будет выполнять совместное моделирование средствами SystemView. Элемент 16 в системе (рис. 7) является пользовательским элементом из библиотеки DLL, созданной с использованием кода, сгенерированного в нашем примере. Когда система моделируется, основной путь (элементы 2–9) моделируется средствами SystemView, в то время как второй путь моделируется при помощи нового пользовательского элемента. Анализаторы данных (12, 15) в реальном масштабе времени показывают эквивалентность созданного пользовательского элемента 16 элементам 2–9.

Сравнительное моделирование исходной схемы и пользовательского элемента, созданного из кодов, которые были получены с помощью утилиты C-Code Generator (Рис. 7)

Сравнительное моделирование исходной схемы и пользовательского элемента, созданного из кодов, которые были получены с помощью утилиты C-Code Generator
Рис. 7. Сравнительное моделирование исходной схемы и пользовательского элемента, созданного из кодов, которые были получены с помощью утилиты C-Code Generator

Пользовательские библиотеки, появившиеся в SystemView 6.0

Папка «C:Program FilesSystemViewExtra Libraries» включает четыре новые пользовательские DLL-библиотеки SystemView 6.0: NTSC32, SoundCard, SpurChartMixer и TextOutputSink.

Папка NTSC (National Television Standart Code) содержит два элемента: Multi Burst и Color Bar для обработки видео.

MB

— источник, создающий сигнал испытательных частотных пакетов. Выходные данные нормированы к 1 В, то есть 1 В = –40 IRE-единиц (Institute of Radio Engineers — Институт радиоинженеров, ИРИ). Для выходных данных в единицах ИРИ устанавливаются Gain = –160 и Bias = 120. Параметры элемента MB приведены в таблице 1.

Таблица 1. Параметры элемента MB
Параметры элемента MB

CB

— стандарт сигнала цветных полос (SMPTE ECR 1-1978, Society of Motion Picture and Television Engineering). Параметры элемента CB приведены в таблице 1. Схема проверки элементов MB и CB, а также выходные сигналы этих элементов приведены на рис. 8.

Схема проверки элементов MB и CB и выходные сигналы этих элементов (Рис. 8)

Схема проверки элементов MB и CB и выходные сигналы этих элементов
Рис. 8. Схема проверки элементов MB и CB и выходные сигналы этих элементов

Библиотека SpurChartMixer содержит один элемент.

Mixer

— смеситель. Этому элементу требуется файл с таблицей интермодуляционных искажений. Параметры элемента Mixer приведены в таблице 2.

Таблица 2. Параметры элемента Mixer
Параметры элемента Mixer

Смеситель имеет два входа: вход высокочастотного сигнала (RF) и сигнал гетеродина (LO), а также один выход сигнала промежуточной частоты (IF).

Пример схемы, использующей элемент Mixer, приведен на рис. 9, а результаты моделирования — на рис. 10.

Пример использования элемента Mixer (Рис. 9)

Пример использования элемента Mixer
Рис. 9. Пример использования элемента Mixer

Результаты моделирования схемы, использующей элемент Mixer (Рис. 10)

Результаты моделирования схемы, использующей элемент Mixer
Рис. 10. Результаты моделирования схемы, использующей элемент Mixer

Библиотека SoundCard (звуковая карта) обеспечивает элементы «источник» и «анализатор данных» для связи с указанными пользовательскими аудиоустройствами.

Библиотека SVUSound включает в себя два элемента: WaveIn — источник и WaveOut — анализатор данных.

WaveIn

— источник (прямой вход из аудиоустройства ПК). Параметры элемента WaveIn приведены в таблице 3.

Таблица 3. Параметры элемента WaveIn
Параметры элемента WaveIn

Элемент WaveIn имеет два выхода: канал 0 и канал 1.

WaveOut

— анализатор данных (прямой выход к аудиоустройству ПК). Параметры элемента WaveOut приведены в таблице 4.

Таблица 4. Параметры элемента WaveOut
Параметры элемента WaveOut

Пример схемы, использующей элементы библиотеки SVUSound, и результаты моделирования приведены на рис. 11.

Пример схемы, использующей элементы библиотеки SVUSound, и результаты ее моделирования (Рис. 11)

Пример схемы, использующей элементы библиотеки SVUSound, и результаты ее моделирования
Рис. 11. Пример схемы, использующей элементы библиотеки SVUSound, и результаты ее моделирования

Библиотека TextOutputSink включает в себя один элемент TextOut.

TextOut

— анализатор данных. Этот элемент обеспечивает вывод выходных данных элементов DSP библиотеки в текстовый файл в десятичном, шестнадцатеричном и двоичном форматах. В шестнадцатеричном и двоичном выходных форматах нулевой бит находится всегда справа. Параметры элемента TextOut приведены в таблице 5.

Таблица 5. Параметры элемента TextOut
Параметры элемента TextOut

Пример схемы вывода результатов моделирования в десятичном формате приведен на рис. 12.

Пример схемы вывода результатов моделирования в десятичном формате (Рис. 12)

Пример схемы вывода результатов моделирования в десятичном формате
Рис. 12. Пример схемы вывода результатов моделирования в десятичном формате

Литература

  1. Разевиг В. Д., Лаврентьев Г. В., Златин И. Л. SystemView — средство системного проектирования радиоэлектронных устройств / Под ред. В. Д. Разевига. М.: Горячая линия-Телеком. 2002.
  2. Златин И. Новые возможности SystemView // Компоненты и технологии. 2003. № 1.
  3. Разевиг В. Д. Златин И. Л. Новые возможности SystemView // EDA Express. 2003. № 7.
  4. Златин И. Пользовательские библиотеки (Custom Library) и многостанционный доступ с кодовым разделением каналов (CDMA) в SystemView // Компоненты и технологии. 2003. № 8.
  5. Златин И. Пользовательская библиотека WNL 80211g в SystemView // Компоненты и технологии. 2003. № 9.
  6. Златин И., Кадышев С. SystemView + Matlab + Simulink // Компоненты и технологии. 2004. № 2.
  7. Златин И. Еще раз о пользовательских библиотеках SystemView // Компоненты и технологии. 2004. № 3.
  8. Златин И. Цифровое телевидение (DVB) и технология беспроводной сверхширокополосной связи (UWB) в SystemView // Компоненты и технологии. 2003. № 9.
  9. Златин И. SystemView + Expressive = HDL Design Studio // Компоненты и технологии. 2004. № 5.
  10. SystemView User’s Guide. Elanix, Inc. 2001.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *