УДК 681.3.049.771.14:681.325.65
РАЗВИТИЕ СИСТЕМЫ СТОХАСТИЧЕСКОГО ТЕСТИРОВАНИЯ МИКРОПРОЦЕССОРОВ INTEG
И.В. Грибков, к.ф.-м..н.; А.В. Захаров; М.А. Коганов; П.П. Кольцов, к.ф.-м..н.; Н.В. Котович; А.А. Кравченко, к.ф.-м..н.; А.С. Куцаев, к.ф.-м..н.; А.С. Осипов, к.ф.-м..н.; И.Ш. Хисамбеев
(НИИСИРАН, г. Москва, [email protected], [email protected])
Случайное тестирование является одним из наиболее мощных средств верификации проектов микропроцессоров. Для упрощения генерации случайных тестов и создания инструмента для тестирования процессоров архитектуры М^64 была создана система INTEG. После ее использования на протяжении нескольких лет проводилась глубокая модернизация INTEG, результатом которой стал программный комплекс INTEG2. В статье рассматриваются основные своиства и компоненты как INTEG, так и INTEG2, описываются их сходство и различие. Также приводятся некоторые направления дальнейшего развития INTEG2.
Ключевые слова: верификация, случайное тестирование, MIPS64, RTL-модель, генерация случайных тестов.
При проектировании современных микропроцессорных систем наиболее сложной и актуальной задачей является функциональная верификация проектов. Среди программных средств верификации, используемых на всех стадиях разработки проекта, особое место занимает стохастическое тестирование. Случайные тесты позволяют организовать проверку функционирования проектируемого устройства, в которой направленное тестирование сочетается с широким покрытием проверяемой области. К настоящему времени создано большое число генераторов случайных тестов - от систем тестирования отдельных компонентов проекта до универсальных систем комплексного тестирования всей архитектуры проекта.
Для использования случайных тестов требуются минимум две модели целевого устройства. Например, в качестве одной из них берется RTL-(Register Transfer Level) модель процессора, написанная на языках VHDL, Verilog и аналогичных описаний [1]. Для оценки правильности выполнения случайного теста его результаты сравниваются с результатами выполнения на эталонной модели с целью выявления и анализа возможных расхождений.
В данной работе в качестве эталонной модели использовалась покомандная модель процессора, написанная на языке С++.
Интегрируемая система INTEG была разработана в НИИСИ РАН для реализации задачи стохастического тестирования микропроцессоров с архитектурой MIPS64 [2, 3]. Используемый в системе INTEG подход к верификации микропроцессорных средств основан на массовом прогоне тестов на различных моделях микропроцессора (в частности, на RTL и эталонной моделях) и сравнении результатов прогона. Необходимые для этого тесты генерируются по шаблонам.
Для создания шаблонов используется специально созданный графический интерфейс пользователя. В шаблоне заложены широкие возможности случайных вариаций структуры кода, после-
довательности инструкций и выбора их аргументов. Эти случайные вариации управляемы и ориентированы на создание ситуаций, представляющих особый интерес. Доля или степень случайности может повышаться по мере развития тестирования для получения более полного набора тестов.
Система INTEG доказала свою полезность при верификации проекта разрабатываемого в НИИСИ РАН микропроцессора архитектуры MIPS64. При этом следует отметить, что в данной системе заложены возможности настройки и на отличные от MIPS64 архитектуры вычислительных систем. В то же время совершенствование моделей разрабатываемых в НИИСИ РАН микропроцессоров, изменения в организации, сценариях и инструментах тестирования вызвали необходимость проведения серьезной модернизации системы и включения в нее новых элементов. Результатом данной модернизации стал программный комплекс INTEG2, вобравший в себя опыт практического применения системы INTEG и объединяющий средства генерации тестов, настройки и управления процессом тестирования, анализа и хранения результатов. В данной работе описывается опыт практического применения системы INTEG и приводится информация об основных компонентах комплекса INTEG2.
Опыт применения INTEG
Исходная версия системы INTEG включала в себя графическую оболочку Integ, графический редактор шаблонов Guiteg, генератор случайных тестов Tergen, симулятор целевого процессора VMIPS (эталонная модель), симулятор RTL-моде-ли, написанной на языке Verilog, программу сравнения результатов симуляторов.
Чтобы иметь представление о составных частях системы и ее работе в целом, остановимся подробнее на управляющей оболочке. Оболочка Integ представляет собой графический пользовательский интерфейс для работы с программами
создания тестов, их выполнения и анализа результатов. Программа оболочки Integ.tcl написана на Tcl/Tk/Tix и должна выполняться на Linux, как и остальные компоненты INTEG (система непосредственно тестировалась на Red Hat Linux 7.3 при установленных пакетах Tcl/Tk - 8.3, Tix - 8.2).
После запуска программы графической оболочки на экране монитора появляется ее главная панель (рис. 1) с кнопками запуска каждой из вышеперечисленных программ, а также с основными параметрами их запуска. Вспомогательные параметры каждой из программ устанавливаются при выборе соответствующих кнопок. Рисунок 1 дает представление о последовательных этапах процесса тестирования, которые изображены на главной панели оболочки Integ сверху вниз (на панель вынесены названия этих этапов и даны разделительные линии между ними).
Вначале запускается графический редактор шаблонов (раздел Editor), результатом его работы является файл template.txt. Данный шаблон подается на вход генератора случайных тестов (раздел Tergen), после запуска которого генерируется тестовый файл template.hex. Здесь же данный файл конвертируется в форматы входных файлов симу-лятора VMIPS и RTL-модели. После этого полученные тестовые файлы template.ram и temp-late.asc запускаются на данных симуляторах (разделы VMIPS и Verilog). В результате получаются файлы протоколов запусков: template_log1.txt и template_log2.txt соответственно, которые сравниваются между собой на заключительном этапе
(раздел Compare). Итоговые файлы сравнения в главном окне не видны, доступ к ним можно осуществить, пользуясь кнопкой Compare/Options.
В программе также предусмотрен пакетный режим работы (раздел Multi Run). При подготовке пакетного запуска перечисляются используемые программы и соответствующие файлы данных. Затем пакетное задание можно запустить.
Программы в составе системы INTEG позволяют указывать достаточно большое количество опций. Задавать их каждый раз вручную неудобно, поэтому в программе оболочки предусмотрены загрузка из настроечного файла и сохранение всего набора используемых параметров. Пользователь может сам создавать свои настроечные файлы путем сохранения опций, заданных им в управляющей оболочке.
При разработке системы INTEG была предусмотрена возможность автономного запуска всех компонентов системы независимо от графической оболочки. По мнению практических пользователей, это является ценным качеством системы.
Данная версия системы INTEG нашла успешное применение в НИИСИ РАН при верификации микропроцессора архитектуры MIPS64. При этом разработка системы стохастического тестирования велась параллельно с разработкой процессора на протяжении нескольких лет. За это время тесты значительно усложнились, что, с одной стороны, стало следствием роста возможностей ядра системы Tergen, а с другой - отвечало процессу разработки процессора (на более поздних этапах проектирования ошибки искать сложнее, следовательно, нужны более сложные тесты).
Рассмотрим шаблон, постоянно запускаемый в течение долгого времени на обновляющемся от запуска к запуску проекте микропроцессора. Естественно предположить, что со временем число найденных шаблоном ошибок будет уменьшаться, при этом время от времени возможен его локальный рост, обусловленный внесением большого количества изменений в тестируемый проект.
При общем запуске системы число найденных ошибок представляет собой сумму по всем шаблонам. Ожидается, что длительное время эта сумма будет поддерживаться на постоянном уровне по трем причинам: во-первых, регулярно начинают применяться новые шаблоны; во-вторых, в проект постоянно вносятся функциональные изменения, каждое из которых добавляет новые ошибки; в-третьих, растет количество используемых для тестирования машинных ресурсов.
На рисунке 2 представлено общее количество ошибок, найденных за два года тестирования. Ошибки разбиты на категории:
1) арифметические (ALU+FPU, ошибки в вычислениях) (категория Arithmetic);
2) подсистемы памяти (команды load/store, cache, TLB) (Memory);
Рис. 1. Главная панель пользовательского интерфейса
3) исключения, прерывания, системного сопроцессора (Coprocessor/Exceptions);
4) последовательности выполнения команд
(Execution sequence).
Очевидно смещение акцента при тестировании в разные периоды. От тестов, исследующих преимущественно исключения, практические пользователи системы INTEG перешли к тестам памяти и лишь на последнем этапе к направленному тестированию последовательности выполнения инструкций.
Приведем два характерных примера ошибок, найденных с помощью системы INTEG.
В одном из случайных тестов была сгенерирована такая комбинация инструкций MIPS64:
^ г1,0(г2)
Шу г3, г1
При ее выполнении процессор останавливал работу. Ошибка возникала из-за конфликта обращения последовательных инструкций к регистру г1, на запись и сразу на чтение.
В другом, более позднем случайном тесте была сгенерирована такая ситуация.
Осуществляется запрос в кэш-память 2-го уровня за следующей инструкцией. Одновременно происходит вызов исключения от одной из предыдущих инструкций. В данной ситуации запрос на инструкцию должен быть отменен на время обработки исключения. Тем не менее, эти события так совпали по времени, что запрос не был корректно отменен. В итоге инструкция загружена неправильно.
Если первую из описанных ситуаций легко было протестировать вручную, то вторая возникла в результате совпадения нескольких факторов, которые невозможно задать напрямую в программе. Написание такого теста вручную потребовало бы
от верификатора на порядок больше усилий и знаний о тонкостях устройства проекта. Возможность массовой генерации подобного рода тестов и является одним из основных достоинств метода стохастического тестирования.
В то же время практическое использование системы выявило и ряд проблем, среди которых недостаточная гибкость системы по отношению к обновлению версий используемых программ (например, симуляторов микропроцессоров) и к настройке операционной среды. Сюда же можно отнести и достаточно жесткую привязанность системы к организации процесса тестирования микропроцессора, сложившейся на момент создания системы. Кроме того, в процессе развития тестирования появились новые требования к функциональным компонентам системы. Эти требования относились как к действующим в первоначальной версии системы компонентам (например, к блоку анализа результатов тестирования), так и к перспективным.
В результате практического применения системы INTEG пользователями были выработаны следующие наиболее существенные пожелания к ее модернизированной версии.
1. Возможность перенастройки системы при модернизации, замене и добавлении новых функциональных компонентов.
2. Работа при разных общих сценариях тестирования и отсутствие жесткой привязки к какому -либо из них. Возможность работы как с созданными ранее, так и с вновь создаваемыми тестами.
3. Повышение удобства в использовании графической оболочки (добавление строки состояния, текстового редактора и т.п.) и ее эргономичности. Создание возможности результативной работы в системе для пользователей различной квалификации.
4. Совершенствование опции пакетной обработки тестов.
5. Автоматизация проверки результатов тестирования с учетом того, что форматы выходных файлов симуляторов микропроцессора могут меняться.
6. Создание БД о ходе и результатах тестирования, тестовых шаблонах и сгенерированных по ним тестах.
7. Более гибкий подход к использованию машинных ресурсов при случайном тестировании. Возможность эффективной работы системы на разных компьютерах.
Все пожелания в той или иной степени были учтены при проектировании и разработке программного комплекса INTEG2.
Управляющая оболочка комплекса INTEG2
Как и в первоначальной версии системы INTEG, управляющая оболочка INTEG2 (в даль-
□ Arithmetic □ Memory
□ Coprocessor & Exceptions □ Execution sequence
Рис. 2. Общее число ошибок, найденных поквартально за два года (по категориям)
нейшем - Integ2) представляет собой графический пользовательский интерфейс (GUI), предназначенный для управления работой программ-клиентов, входящих в состав интегрированного программного комплекса для тестирования микропроцессоров INTEG2. Помимо этого (в отличие от первоначальной версии программы Integ), оболочка Integ2 предоставляет возможность сохранять результаты тестирования в специально созданной БД IntegDB и взаимодействовать с ней.
Стандартные программы-клиенты по сути такие же, как и в исходной версии системы INTEG. При этом для тестирования в INTEG2, как правило, используются последние версии этих программ, а между программой Logan и соответствующими программами сравнения системы INTEG имеются ощутимые качественные различия.
При этом следует отметить, что существенная разница между оболочками Integ и Integ2 в том, что первая из них могла работать лишь с фиксированными версиями клиентов, в то время как вторая - не только с их произвольными версиями, но и вообще с произвольными программами, запускаемыми из командной строки. Например, в качестве программы сравнения может выступать не только программа Logan, но и программы сравнения результатов тестирования из исходной версии INTEG [2].
В состав оболочки Integ2 входят исполняемые файлы Integ2.tcl (основной модуль), IntegRun.tcl (опция пакетного выполнения), Integdb.tcl (программный интерфейс для записи информации о тестах в БД), IntegdbGUI.tcl (программа, реализующая графический интерфейс пользователя для работы с БД), а также файлы настроек интерфейса для каждой из программ создания и выполнения тестов *.txt (они же программы-клиенты). Как и в оболочке Integ, для настройки интерфейса могут также использоваться файлы опций (например obolochka2.opt). Файлы опций создаются при сохранении опций соответствующим выбором меню и могут заменять собой файлы настройки интерфейса. После запуска программы Integ2 пользователь может интерактивно выбирать и изменять любые опции. При сложившемся сценарии тестирования для внесения изменений в этот процесс пользователю удобнее иметь дело с файлами опций. В то же время изменения в сценариях тестирования, как правило, влекут за собой необходимость редактирования файлов настройки интерфейса.
Описание графического интерфейса. После запуска основного исполняемого файла оболочки Integ2.tcl появляется главная панель ее графического интерфейса (рис. 3).
При сравнении данного изображения с главным окном оболочки Integ (рис. 1) заметны несколько отличий. Видно, что главное окно Integ2
File Help
Editor | Tergen | Vmips | Verilog | Compare | Batch |
Input Template File | Browse-Text Editor Run Graph Editor |/usr/bin/guiteg.tcl Browse... Run
Hello, user! tcl_version=8.5
Рис. 3. Главное окно пользовательского интерфейса оболочки Integ2 (панель Editor)
имеет вид пачки закладок, соответствующих настраиваемым панелям программ-клиентов (имеющим заголовки Editor, Tergen, Vmips, Verilog и Compare), при этом одна из закладок является активной. Поскольку процесс тестирования начинается с создания шаблона теста, уместно делать закладку, соответствующую панели редакторов шаблонов, активной по умолчанию (рис. 3). Кроме того, в нижней части окна имеется строка состояния с отображением результата только что выполненного действия (при загрузке по умолчанию выдаются приветствие пользователя и номер используемого ^tcl-интерпретатора).
Итак, основными компонентами описываемого графического интерфейса являются меню, настраиваемые панели отдельных программ-клиентов, панель пакетного выполнения, кнопки выполнения программ, установки их параметров и выбора файлов, окна редактирования имен файлов.
Кнопки запуска каждой из программ-клиентов, а также основные параметры их запуска вынесены на соответствующие им настраиваемые панели. Вспомогательные параметры каждой из программ устанавливаются при выборе соответствующих кнопок.
В программе предусмотрен пакетный режим работы (панель Batch). При подготовке пакетного запуска предусмотрено перечисление используемых программ и соответствующих файлов данных. Затем пакетное задание можно запустить.
Большинство пунктов меню относится к сохранению значений параметров в файлах опций и к установке значений параметров. В меню в разделе Help содержится справочная информация о программе.
Программы выполняются с помощью кнопок Run, расположенных на всех настраиваемых панелях оболочки. Они служат для запуска программ-клиентов системы (включая конверторы в форматы симуляторов VMIPS и RTL-модели), а также всей системы в пакетном режиме (кнопка Run batch на панели пакетного запуска). При выборе
кнопки Run формируется командная строка для выполнения выбранной программы; при формировании командной строки используются активные параметры (они выбираются на соответствующей панели оболочки). После формирования командной строки осуществляется запуск программы.
Как уже отмечалось, каждая составная часть Integ2 имеет свою настроечную панель, состав изображения которой задается в соответствующем файле настроек интерфейса.
Панель может содержать произвольное количество строк с именами и значениями параметров, а также некоторое количество кнопок, открывающих диалоговые окна с описаниями и возможностями установки иных параметров.
В строке каждого параметра могут присутствовать: кнопка check box, показывающая активность данного параметра; надпись с именем параметра; окно редактирования значения параметра; кнопка Browse для запуска диалога выбора имени файла; кнопка Run для запуска программы на выполнение (если параметр является исполняемой программой).
Первые два элемента (кнопка активности и имя параметра) показываются всегда. Окно редактирования значения параметра и кнопка выбора имени файла присутствуют в тех случаях, когда это предусмотрено в соответствующем файле настройки.
Панель Editor (редакторы шаблонов). Как
уже упоминалось, эта панель управляет запуском оболочки Integ2 по умолчанию. Здесь представлены два средства создания и редактирования шаблонов тестов: текстовый и графический редакторы. Заметим, что в исходной версии оболочки Integ было реализовано только управление графическим редактором. В то же время в ходе практического использования оболочки оказалось желательным включение в нее и текстового редактора (не только для написания шаблонов). При этом для начинающих разработчиков тестов применение графического редактора оказалось более удобным в обучении и работе. Таким образом, для повышения удобства в использовании графической оболочки оба редактора были включены в данную панель.
Графический редактор шаблонов Guiteg реализует графический пользовательский интерфейс, позволяющий создавать и редактировать шаблоны тестов. Он представляет собой среду, призванную максимально облегчить и упростить подготовку заданий на тестирование (шаблонов). Для этого в Guiteg используются графическое представление шаблона, а также таблицы и панели со строительными элементами шаблонов, оборудованные традиционными элементами управления (окна редактирования, всплывающие меню, различного типа кнопки, скользящие регуляторы и др.). При этом
поддерживаются все возможности описания шаблонов, в том числе средства языка описания программы (вызов макросов, циклические конструкции с подстановкой параметра цикла, выборочное задание аргументов инструкций) [2, 3].
Возможности графического редактора и средства для построения шаблонов подробно описаны в работе [3], посвященной исходной версии системы INTEG. По сравнению с ней редактор Guiteg претерпел ряд несущественных изменений. В частности, были добавлены некоторые операторы языка описания шаблона, ранее реализованные в Tergen, и исправлены недочеты, выявленные при практическом использовании редактора.
Как уже отмечалось, шаблоны тестов можно создавать и при помощи встроенного в Integ2 текстового редактора. Для работы с ним в оболочке Integ2 предусмотрена кнопка Run. Она осуществляет запуск текстового редактора и находится в средней части панели (рис. 3).
Панель Tergen (генератор случайных тестов). Генератор случайных тестов Tergen предназначен для преобразования шаблона теста в тестовый код [3]. Версии, используемые в INTEG2, отличаются от системы INTEG несущественно. Тестовый код представляет собой фрагмент оперативной памяти целевого процессора. При запуске Tergen на выходе получаются файл тестового кода с расширением *.hex и протокольная копия шаблона *.tsb, содержащая использованное значение «зерна» для датчика случайных чисел (которое является уникальным идентификатором сгенерированного по шаблону теста). В результате по одному шаблону может быть создано любое необходимое количество различных экземпляров тестового кода. Для использования в симуляторах (как VMIPS, так и RTL-модели) выходной тестовый код генератора тестов требует преобразования. В оболочке INTEG2 предусмотрено конвертирование в нужные форматы.
Панель VMIPS (симулятор целевого процессора). Симулятор целевого процессора VMIPS - это программный эмулятор процессоров архитектуры MIPS64. Симулятор является покоманд-ным на уровне программной модели процессора и реализует порт ввода/вывода и ряд других устройств, имеющих отображаемые в память регистры.
Выполняемая программа состоит из двух частей: загрузчик, который читается из файла boot.bin, и содержательная часть выполняемой программы, которая грузится из файла pro-gram.bin. Файл program.bin - это выходной результат генератора случайных тестов Tergen, преобразованный во входной формат VMIPS (в рассматриваемой версии симулятора имя файла является фиксированным).
Для управления различными версиями симу-лятора в графическом интерфейсе оболочки Integ2
предусмотрена соответствующая настраиваемая панель, с которой осуществляются запуск симуля-тора и работа с его входными и выходными файлами. Также имеются кнопки вызова диалоговых окон работы с различными опциями симулятора (включая параметры вывода и параметры работы с исключениями). Эти опции меняются с изменением используемых версий VMPS-симулятора, и их изменения отражаются в файле настройки интерфейса VmipsOptions.txt. Одна из этих кнопок осуществляет вызов списка основных (для пользователя) опций симулятора, который пользователь формирует из соображений удобства при сложившейся практике тестирования (путем редактирования файла настройки).
Панель Verilog (симулятор RTL-модели). Программный эмулятор (или, для краткости, си-мулятор), например NC фирмы Cadence, является сравнительно быстрым и недорогим способом получения предварительного результата при разработке RTL-моделей. Для написания симулятора используется язык Verilog [1].
С точки зрения верификатора рассматриваемый симулятор RTL-модели представляет собой совокупность программных средств, позволяющих смоделировать выполнение определенной тестовой программы на разрабатываемом проекте и представить результат в виде выходных протоколов (fog-файлов). Входные данные симулятора -это файлы с кодом исполняемой программы, файлы, описывающие начальное состояние процессора, и др. Точный набор учитываемых входных данных, их имена и расположение зафиксированы в исходном коде. В нашем случае при симуляции используются rom.asc - файл образа ПЗУ и ram.asc - файл образа ОЗУ.
По своей сути эти файлы аналогичны входным файлам boot.bin и program.bin симулятора VMIPS. Подобно файлу program.bin файл ram.asc получается из выходного файла генератора тестов посредством конвертации во входной формат RTL-симулятора (осуществляемой из настроечной панели Tergen).
Панель Verilog оболочки Integ2 предназначена для запуска RTL-симулятора с указанием его входных и выходных файлов, а также опций. Кроме того, предусмотрена возможность работы с конфигурационным файлом RTL-проекта.
Панель Compare (программа сравнения). Суть рассматриваемого метода стохастического тестирования заключается в том, что тестовые программы вырабатываются генератором случайных тестов и выполняются на симуляторах, основанных на двух различных моделях микропроцессора: RTL-симуляторе и эталонной (VMIPS) модели. Результат выполнения какой-либо тестовой программы на модели процессора - это один или несколько текстовых файлов-отчетов (log-файлов), содержащих информацию об изменениях
состояния процессора в ходе выполнения последовательности команд теста. Назовем совокупность этих файлов протоколом выполнения теста. Одним из ключевых шагов в процедуре тестирования является сравнение двух протоколов, полученных от запуска определенного теста на двух вышеназванных моделях. Цель такого сравнения -выявление отличий и диагностика ошибок в моделях микропроцессора.
Большой объем тестов, используемых при стохастическом тестировании, требует автоматизации проверки результатов, то есть сравнения протоколов выполнения тестов. Эту задачу выполняют различные программы сравнения и анализа результатов тестирования. В рассматриваемой версии системы данную роль выполняет программа Logan, представляющая собой инструментальное средство для верификации микропроцессоров с архитектурой MIPS64. Она была разработана по результатам практического использования системы INTEG. От других подобных программ, используемых в первоначальной версии системы INTEG, ее отличает следующее.
• Целостное сравнение результатов. Подход Logan, заключающийся в сравнении протоколов, а не отдельных пар файлов, не требует процедуры разбиения протоколов на составляющие и выполняется за один проход.
• Программа Logan исследует бинарные значения атрибутов отчетов вместо лексикографического сравнения строк, применяемого в более ранних программах. Это дает возможность анализировать данные по содержанию, а не по форме.
• В Logan предусмотрены средства настройки формата файлов данных. Большинство изменений формата, включая добавление новых файлов данных, требует лишь применения этих средств, а не переписывания программы.
• По результатам сравнения Logan выдает подробный отчет, включающий значения данных для инструкции, в которой обнаружена ошибка.
Программа Logan представляет собой одну из стандартных программ-клиентов оболочки Integ2. Соответственно, для управления программой из оболочки предусмотрена панель Compare (рис. 4).
Она содержит формирование команды на запуск (строка Compare), пути к выходным log-файлам обоих симуляторов и кнопку Options, вызывающую диалоговое окно опций программы Logan, доступных пользователю для работы в интерактивном режиме.
Панель Batch (пакетное выполнение). Управляющая оболочка Integ2 предоставляет возможности пользователям по оформлению и запуску пакета заданий. Эта опция была предусмотрена и в первоначальной версии оболочки Integ [3]. В соответствии с пожеланиями пользователей оболочки в ее нынешнюю версию добавлен ряд новых возможностей, а именно: результаты для каждого
Рис. 4. Оболочт Integ2, панель Сompare (программа Logan)
теста сохраняются в отдельной директории; нет ограничения на количество шаблонов в пакете; усовершенствовалась опция повторного запуска теста, в том числе с прежними параметрами; появилась опция согласования некоторых параметров VMIPS и RTL-симуляторов; стал возможным запуск пакета заданий из командной строки. Кроме того, существенным достоинством системы INTEG2 стала возможность сохранения результатов тестирования в специально созданной БД. Соответственно реализованы и функции взаимодействия с БД из управляющей оболочки.
В оболочке Integ2 для подготовки пакетов заданий и управления их запуском предусмотрена панель Batch. В данной панели указывается, какие программы-клиенты оболочки использовать для пакетного выполнения и с какими файлами, после чего осуществляется запуск выполнения пакета заданий. Имеется опция записи информации о ходе пакетной обработки в специальный файл, а также возможность работы с обрабатываемыми файлами непосредственно из данной панели. Функции взаимодействия с БД включают в себя подключение к ней и активизацию ее графического пользовательского интерфейса.
Пакетный запуск из командной строки может осуществляться следующими двумя способами:
• Integ2.tclfilelist.txt
• Integ2. tcl filelist.txt options. opt,
где filelist.txt - произвольное имя файла, содержащего список шаблонов и/или тестов, предназначенных для обработки; options.opt - имя файла опций оболочки. Если этот файл не указан, все параметры программы берутся из файлов настройки интерфейса Integ2.
Файлы настройки интерфейса
Как уже отмечалось, основное пожелание к модернизированным версиям управляющей оболочки Integ - возможность гибкой реакции оболочки на изменения в опциях и сценариях случайного тестирования, равно как и на новые про-
граммы, используемые в данном процессе. Здесь, в частности, подразумевается, что данные изменения не должны повлечь за собой внесение изменений в код программы оболочки или ее переписывание.
В соответствии с данным пожеланием в оболочке Integ2 предусмотрены файлы настройки интерфейса для каждой из программ-клиентов оболочки, а также для пакетного запуска. В каждом из настроечных файлов задаются описание соответствующей программы, описание ее опций и их значения по умолчанию, правила формирования командной строки запуска программы и правила отображения на экране параметров программы и возможностей их настройки. Как правило, файлы настроек меняются при использовании новых версий программ-клиентов (или при замене одних программ другими), при появлении новых опций у программ-клиентов, а также при изменениях в порядке их использования. Таким образом, в данных ситуациях вместо переписывания исходного кода оболочки следует лишь отредактировать соответствующие настроечные файлы.
Имена файлов настройки интерфейса в программе Integ2 фиксированные:
• guitegOptions.txt - для редактора шаблонов Guiteg и текстового редактора;
• tergenOptions.txt - для программы генерации тестов Tergen;
• vmipsOptions.txt - для симулятора VMIPS;
• verilogOptions.txt - для программы Veri log;
• compareOptions.txt - для программы сравнения.
Уже упоминалось, что, помимо настроечных файлов, при работе программы Integ2 значения многих параметров (но не количество параметров, не имена параметров и т.п.) могут быть изменены в интерактивном режиме и сохранены в файлах опций. Эти файлы в дальнейшем можно использовать при работе программы Integ2 вместо файлов настройки интерфейса. Файлы опций имеют расширение *.opt и не предназначены для текстового редактирования в отличие от файлов настройки. Формирование и редактирование файлов настройки требуют от пользователя определенной квалификации и знания формата настроечных файлов. Однако это существенно более простая задача, чем переписывание исходного кода программы.
Приведем пример результатов редактирования настроечных файлов. В настоящее время при случайном тестировании наряду с Logan используются и другие программы сравнения, в частности, использующие набор программ, написанных на языке Perl (например, они часто используются при повторных запусках старых тестов). Такие программы сравнения (с ними предусмотрена работа в оболочке Integ2) будут являться программами-клиентами оболочки вместо Logan. Для этого следует провести редактирование файла compareOpti-
ons.txt, соответствующего программе Logan, в результате после запуска Integ2 панель Compare примет вид, изображенный на рисунке 5.
Два настроечных файла приводят к двум различным панелям оболочки Integ2, решающим одну и ту же задачу (сравнения протоколов выдачи VMIPS и Ver/7og-симуляторов) различными способами. У пользователя есть большие возможности в выборе оптимального для себя режима настройки оболочки Integ2.
Подсистема БД IntegDb
Подсистема БД IntegDb является составной частью комплекса INTEG2 и позволяет объединять информацию о работе нескольких независимо работающих программ Integ2 в общую БД. Таким образом, формируется клиент-серверное приложение для тестирования моделей процессоров. Клиентами являются программы Integ2, запущенные на разных компьютерах, но работающие с единым сервером БД. В таком приложении ресурсоемкое тестирование осуществляется на клиентской стороне, а информация о результатах тестирования накапливается на серверной. Помимо этого, в рамках подсистемы реализован пользовательский интерфейс, позволяющий непосредственно работать с БД.
Основные функции подсистемы следующие:
• хранение шаблонов тестов на сервере;
• регистрация запусков тестов;
• отображение серий запусков тестов;
• описание ошибок при тестировании; привязывание тестов, выявивших ошибку, к
конкретной ошибке;
• хранение тестов, указанных пользователями, на сервере.
Подсистема IntegDb делится на серверную и клиентскую части. Клиентские модули:
• пакет IntegDb.tcl - программный интерфейс для записи информации о тестах в БД;
• пакет IntegDbGui.tcl - программа, реализующая графический интерфейс пользователя для работы с БД.
Серверная часть подсистемы:
• БД IntegDb, работающая под управлением сервера MvSOL:
• централизованное хранилище файлов, доступное на запись и чтение для всех программ, работающих в рамках приложения.
Файлы клиентской части подсистемы являются общими с оболочкой Integ2. Для полноценного функционирования подсистемы необходимо следующее программное окружение.
На стороне клиента:
• интерпретатор TCL 8.4 или выше с установленными пакетами mysqltcl версии 3.01 или выше [4] и tcllib версии 1.11 или выше;
2) программа «Оболочка Integ2», начиная с версии 2.2.
На стороне сервера - сервер управления БД MySQL версии 4 или выше.
Требования к системным ресурсам для программ оболочки Integ2 и IntegDb одинаковые.
Реляционная БД IntegDb имеет в своем составе следующие таблицы:
• Template (информация о шаблонах тестов);
• Series (информация о сериях тестов, запускаемых на клиентах);
• Test (информация о тестах, сгенерированных по шаблонам);
• Series Теst (информация о запусках тестов);
• Error (информация о найденных ошибках);
Dbparam (служебная информация).
Архитектура клиент-серверного приложения. Для работы клиент-серверного приложения требуется установка оболочки Integ2 на всех клиентах и серверной части подсистемы IntegDb на сервере БД. Общая схема работы приложения представлена на рисунке 6.
При каждом запуске процесса тестирования с помощью управляющей оболочки Integ2 модуль IntegDb.tcl записывает информацию об этом запуске в БД. При необходимости шаблон, на основе которого был сгенерирован тест, копируется в хранилище файлов под уникальным именем. Разделение на серверной стороне БД и хранилища файлов, а также система именования сохраняемых на сервере файлов обеспечивают возможность независимого доступа к сохраненным шаблонам, если БД по каким-либо причинам будет недоступна (что встречается на практике). Выбранная архитектура позволяет развернуть БД и хранилище файлов на разных компьютерах, что дает возможность гибче использовать имеющиеся машинные ресурсы для тестирования.
Графический пользовательский интерфейс IntegDb. Пользовательский интерфейс для работы с БД реализован в программе Integ Database GUI, содержащейся в файле IntegDbGui.tcl. Она осуще-
File Help
Editor Tergen Vmips Vcrikxi Compare Batch
«" Squeezer squeezer.pi
* comparejraces conpare_traces.pl ' comparejegs cor.pare_regs.p1 " compare fpr compare_fpr.pl
V c0dipare_clcache conpare_dcache.pl
* C0mpare_mem_wr compare_mem_wr.pl V Inputvmips logia.tit
View output
Browse-
Browse.. Browse-
Browse..
Verilog finished
Рис. 5. Оболочш Integ2, панель Сompare (модуль сравнения, написанный на Perl)
Клиент 1
Оболочка Integ2
Модуль IntegDb.tcl
Информация о запуске теста
Сервер
Клиент N
Оболочка Integ2
Рис. 6. Схема работы клиент-серверного приложения на основе IntegDb
ствляет графический интерфейс доступа к информации об объектах, хранящихся в БД, и помогает проводить итоговый анализ результатов тестирования.
В главном окне программы отображаются выполненные тесты, сгруппированные либо по серии, в рамках которой тест запускался, либо по выявленной тестом ошибке. Программа предоставляет возможность просмотреть детальную информацию о тесте, дать задание системе на сохранение всех файлов, необходимых для полностью идентичного запуска теста, или разрешить удаление файлов теста с клиентского компьютера. Для удобства пользователей эти операции реализованы как для одного теста, так и для группы.
В случае выявления тестом ошибки программа предоставляет пользователю отчет о результатах теста. Проанализировав его, пользователь может указать, какую именно ошибку выявил тест. В зависимости от ситуации может быть указана одна из ранее выявленных и сохраненных в БД ошибок или описана новая. Программа также позволяет регистрировать найденную ошибку в системе отслеживания ошибок Bugzilla.
Аналогично оболочке Integ2 программа Integ Database GUI имеет настроечный файл idbgui-Options.txt. Его формат несколько отличается от формата настроечных файлов Integ2, однако смысл работы с файлами в обоих случаях одинаков: обеспечение оптимального (для конкретного пользователя) режима работы программ путем редактирования их настроечных файлов.
На основании изложенного можно сделать следующие выводы. В программном комплексе INTEG2 сохранены все этапы метода случайного тестирования, реализованные в предшествующей ему системе INTEG [2]. Шаблоны тестов создаются в соответствии с потребностями тестирования при помощи удобного графического интерфейса
(или текстового редактора). Для практического тестирования используется управляющая графическая оболочка, которая берет на себя рутинные действия и обеспечение сопряжения компонентов системы. Запуск тестов на эталонной модели устройства (симуляторе VMIPS) и симуляторе аппаратуры (RTL-модели) позволяет получить протоколы выполнения, а их анализ и сравнение - обнаружить ошибки и несоответствия в проекте.
Основными общими для INTEG и INTEG2 возможностями являются:
- автоматическое массовое создание случайных тестов;
- обеспечение корректности тестового кода и воспроизводимости результатов;
- использование сведений о состоянии целевого процессора;
- регулирование вероятностей выбора особых ситуаций;
- развитые возможности настройки шаблонов, позволяющие осуществить последовательное тестирование от простого к сложному;
- графический интерфейс, облегчающий создание шаблонов и процедуру тестирования.
В то же время комплекс INTEG2 имеет ряд преимуществ по сравнению с системой INTEG.
• В управляющей оболочке Integ2 реализована возможность быстрой реакции на изменения в опциях, сценариях и программах, используемых для случайного тестирования. Достигается это редактированием настроечных файлов оболочки.
• Внесены значительные изменения в реализацию опции пакетной обработки заданий управляющей оболочкой Integ2. В частности, появилась возможность пакетного запуска из командной строки с использованием различных опций тестирования. При этом результаты запуска регистрируются в БД IntegDb.
• Программа сравнения Logan дает возможность оценивать и сравнивать результаты работы симуляторов модели микропроцессора с учетом возможности изменений форматов их выходных файлов.
• Для регистрации процесса запуска тестов, хранения шаблонов и результатов тестирования, описания выявленных ошибок специально создана подсистема БД IntegDb. При ее проектировании реализован принцип рационального использования машинных ресурсов. В графическом интерфейсе IntegDb реализованы функции, позволяющие работать с ранее проведенными тестами и упрощающие анализ и классификацию ошибок, выявляемых при новых запусках тестов.
В перспективе планируется включить в INTEG2 средства, осуществляющие статистический анализ выполненных тестов, что должно помочь в решении вопроса о полноте покрытия тестируемого проекта микропроцессора. Для рационального использования машинных ресурсов пла-
нируется совершенствование опции разделенного тестирования на разных компьютерах.
Литература
1. Bergeron J. Writing Testbenches using SystemVerilog. Springer, 2006.
2. Стохастическое тестирование в системе INTEG / И.В. Грибков [и др.] // Программные продукты и системы. 2007. № 2. С. 22-26.
3. Система тестирования микропроцессоров INTEG / И.В. Грибков [и др.]. М.: НИИСИ РАН, 2007.
4. URL: http://www.xdobry.de/mysqltcl/mysqltcl.html (дата обращения: 01.03.2010).
УДК 004.923
РЕАЛИЗАЦИЯ СТЕРЕОРЕЖИМА ДЛЯ РАЗЛИЧНЫХ УСТРОЙСТВ ОТОБРАЖЕНИЯ В РЕАЛЬНОМ ВРЕМЕНИ
(Работа выполняется в рамках проекта № 2.5 ПФИ ОНИТ) М.А. Торгашев, к.ф.-ж.н. (НИИСИРАН, г. Москва, [email protected])
В статье подробно рассматриваются алгоритмы реализации в реальном времени стереорежима в различных форматах, используемых в устройствах стереоотображения. В число рассмотренных систем и технологий стерео-отображения входят системы с анаглифическими, а также с затворными очками, поляризационные проекционные системы, мониторы с чересстрочной стереотехнологией и автостереоскопические мониторы Philips 3D Solutions.
Ключевые слова: стереорежим, технологии стереоскопического отображения, алгоритмы трехмерной визуализации в реальном режиме времени, стереоформаты.
При создании виртуальной реальности актуальной задачей является моделирование объемного видения, то есть синтез изображения в стерео-режиме. Как известно, объемное видение является важной особенностью визуального восприятия человеком окружающего пространства, связанной с бинокулярным устройством зрения. Для реализации стереорежима в системах виртуальной реальности могут применяться различные устройства стереоотображения, использующие кардинально различающиеся технологии разделения ракурсов для левого и правого глаза. В качестве примеров можно назвать анаглифические системы, использующие метод спектральной сепарации ракурсов; системы, использующие поляризационную технологию; системы с затворными очками; мониторы с чересстрочной технологией; автостереоскопические (безочковые) мониторы и т.д. Каждая из этих систем использует свой формат представления стереоизображения, так называемый стереофор-мат. Существующие системы виртуальной реальности, к сожалению, ориентированы на использование весьма ограниченного набора из наиболее распространенных форматов. Таким образом, актуальной является задача разработки новых методов синтеза изображений для широкого класса устройств стереоотображения в реальном режиме времени. Решение этой задачи позволяет не фиксироваться на одной из технологий стереоотобра-жения и выбирать конкретное устройство отображения стерео из широкого класса исходя из стоимости, технологичности, удобства для определенного случая.
Предлагаемые алгоритмы описывают реализацию стереорежима различных форматов в системе визуализации в реальном времени. Рассмот-
рим описание существующих систем и алгоритмы реализации стереорежима в различных форматах. Детали реализации приведены для графической библиотеки OpenGL и ориентированы на использование современных ускорителей трехмерной графики, поддерживающих так называемый язык шейдеров. (Вопрос построения соответствующих камер, обеспечивающих правильный стереоэффект при формировании стереопары подробно рассмотрен в [1].)
Системы с анаглифическими очками
Подобные системы используют метод спектральной сепарации стереопары (рис. 1). Метод
заключается в том, что цветовой спектр делится на две части: одна отдается для левого ракурса, а другая для правого. Каждый ракурс пропускается через свой фильтр, который отделяет свою часть спектра. Итоговое изображение получается суммированием обработанных ракурсов. Последующее воспроизведение происходит с помощью очков с двумя разными фильтрами для разных глаз. При разделении ракурсов с помощью очков каждый глаз видит ракурс с урезанным спектром, однако человеческий мозг по мере возможности восстанавливает исходный цветовой спектр, и мы видим полноцветное изображение.