Необходимость оперативной разработки программного обеспечения возникла с первых дней существования ЭВМ. В наши дни это одна из важнейших задач, стоящая перед разработчиками цифровых устройств.
Впервые идея компьютера была предложена Чарльзом Бэбиджем (Charles Babage) в середине девятнадцатого века, однако, его механическая «аналитическая машина» так и не была реализована из-за несовершенства технологий точной механики того времени.
В середине сороковых годов двадцатого века были созданы первые ламповые вычислительные устройства. Одна и та же группа людей участвовала и в проектировании, и в эксплуатации, и в программировании. Это была скорее научно-исследовательская работа в области вычислительной техники, а не практическое использование компьютеров.
С середины пятидесятых годов появилась полупроводниковая технология, позволившая увеличить количество логических элементов в единице объема. Быстродействие, мощность и отказоустойчивость компьютеров возросли, стало возможным их использование для решения задач, имеющих важное практическое значение.
В шестидесятые годы был сделан переход от отдельных полупроводниковых элементов типа транзисторов к интегральным микросхемам, стал открытым путь к появлению следующего поколения компьютеров. Большие функциональные возможности интегральных схем сделали возможным реализацию на практике сложных компьютерных архитектур, таких, например, как IBM/360.
Как и сейчас, методика разработки микросхем в те времена подразделялась на те же самые этапы: концептуальная проработка, проектирование логических элементов и интегральных схем, аттестация, разработка компоновочной схемы и маски, изготовление кремниевой подложки (технологический процесс), отладка и тестирование [1−4].
Разработка логических элементов и интегральных схем изначально велась на уровне логических элементов. Затем пришло проектирование на уровне транзисторов, обеспечивающее максимальную эффективность их применения при минимальных размерах интегральных схем. Повторяющиеся функции присваивались отдельным ячейкам, но оптимизация ячеек все же проходила на уровне транзисторов.
В 1974 году была создана стационарная система моделирования схем под названием SPULS, которая стала чуть ли не единственным инструментальным средством разработки.
В 1970;х годах, когда просчитывались схемы микропроцессоров 8085 и 8086, размеры интегральных схем, с которыми справлялись ЭВМ того времени, были столь малы, что моделирование схем целиком (или всех путей в них) было невозможно. Схема разбивалась на составные части из 5−20 транзисторов и эти части по отдельности обсчитывались. Затем, основываясь лишь на интуитивном понимании подсистемы в целом, инженеры вручную собирали вместе полученные результаты,.
Ограничения на размеры схем накладывали и такие вычислительные ресурсы, как, например, память. Немаловажную роль играли и регулярные выходы ЭВМ из строя, что случалось примерно каждые 15 минут. Сбой в работе ЭВМ приводил к потере результатов всего цикла.
Не существовало и никаких компьютерных средств для удаления паразитных емкостей из топологии кристалла, поэтому точность обсчета тактовых частот в огромной степени зависела от способности инженера-проектировщика интуитивно рассчитывать расстояния и маршрутизацию связей между элементами интегральной схемы. Логические схемы чипов 8085 и 8086, как и других микропроцессоров и контроллеров того времени, по большей части состояли из простейших п-канальных элементов логики, загружаемых в обедненном режиме.
Создание макетов до завершения обсчета всех параметров изделия было чрезвычайно сложным делом, а серийно выпускаемые компоненты не могли воспроизвести всех функций новой микросхемы. Основная ценность макетирования заключалась, главным образом, в возможности отладки уже реализованных проектов, проверки функциональных качеств устройства, готового к воплощению в кремнии, и изучения факторов, которые трудно учесть на этапе моделирования.
Макетирование являлось рациональным способом до тех пор, пока количество транзисторов в устройстве не превышало нескольких десятков тысяч. В дальнейшем же макеты стали чересчур крупногабаритными и сложными, чтобы справляться с быстродействием реальной кремниевой продукции.
В наши дни макетирование переродилось в эмуляцию, широко используемую для проверки работоспособности чипов, насчитывающих миллионы транзисторов. Разница заключается в том, что функции чипа реализуются программным эмулятором, а не имитируются с помощью дискретных логических элементов, запаянных или прикрепленных проводами к макету.
В те времена не существовало никаких компьютерных средств проверки проектных норм или контроля за размещением логических элементов и монтажных соединений. Физическую компоновку выполняли высококвалифицированные специалисты по проектированию масок, которые вычерчивали карандашами линии на огромных листах лавсановой пленки с нанесенной на нее миллиметровой сеткой.
По мере роста мощности и сложности ЭВМ, подобные подходы к проектированию и разработке цифровых устройств становились неприемлемыми. В настоящее время, когда на одном кристалле содержатся миллионы и миллиарды логических элементов, принципиальные схемы связи между логическими элементами отражают лишь разводку внутри кристалла, но не могут быть использованы для функционального проектирования. Стало невозможно проектировать столь сложные устройства на уровне принципиальных схем. Требовался новый подход к решению этой задачи.
Разработчики аппаратного обеспечения перешли к использованию языков описания технических средств (Hardware Description Languages). Эти языки позволяют описывать различные цифровые устройства.
Цифровыми устройствами являются: электронные часы, микропроцессор, настольный компьютер и многое другое.
Языки описания технических средств — Hardware Description Languages I/ (HDL) позволяют разработчикам создавать иерархические структуры, реализовывать разнообразные функции, выполнять сложные арифметические операции и логику сравнения. Несколько строк кода языка описания технических средств могут заменить много строк логических формул или целый конечный автомат. Язык позволяет также локализовать ошибки, осуществлять верификацию временных задержек.
Существует множество комплексов для разработки цифровых устройств на базе различных языков описания технических средств (например, [5, 6]), позволяющие проводить проектирование, верификацию и синтез аппаратных архитектур. Подобные комплексы включают в себя как базы данных разнообразных элементов схем, так и широкий набор прикладных программных средств.
В настоящее время широкое распространение получили языки VHDL и Verilog [7, 8].
VHDL — язык описания технических средств сверхскоростных интегральных схем, одной из важных особенностей которого является возможность работы с произвольными типами данных. Это позволяет разработчику вначале создавать абстрактное описание функций, а затем, по мере разработки проекта, осуществлять его детализацию. Так, язык УНБЬ дает возможность разработчику, начав с технического задания, архитектуры системы, описать ее на всех этапах — от общей концепции до интегральных схем. Проект такой системы представляется группой устройств, соединяемых друг с другом при помощи шин и трактов передачи сигналов. Затем, на подсистемном уровне, язык УНБЬ позволяет описывать операции, алгоритмы, команды, выполняемые логические преобразования. На следующем этапе, благодаря рассматриваемому языку, осуществляется разработка регистров и интегральных схем.
Создаваемый объект представляется конечным автоматом, и полученная модель описывается на языке УНБЬ. Она включает разбиение логического преобразователя автомата на компоненты, определение их функций, включая процессы контроля ошибок, определения величин задержек. Входы и выходы объекта становятся портами УЬЮЬ. Язык УНЕ) Ь предоставляет удобный интерфейс пользователя, методологию ведения процесса разработки с возможностью анализа по принципу «что — если». Для выполнения работ создаются специальные Базы Данных (БД).
В комплексы разработки, использующие язык УНОЬ, различные производители включают широкий набор прикладных программ, обеспечивающий:
• моделирование и отладку;
• средства разбиения объектов на компоненты;
• синтез, анализ;
• проведение расчетов;
• исследование поведения создаваемого объекта;
• статистический анализ функционирования;
• качественные оценки конфликтных ситуаций при обращении к ресурсам;
• определение перечня команд;
• разработка временных диаграмм функционирования;
• средства отладки и тестирования.
Программные комплексы создаются на основе компилятора VHDL непосредственно, без промежуточной трансляции и использования других языков. Параллельная обработка данных позволяет с большой скоростью выполнять сложные прикладные процессы. С этой целью используются параллельные компиляторы. Они разбивают программное обеспечение, подготовленное на языке VHDL, на секции и определяют, какие из них могут выполняться одновременно. Благодаря этому, значительно сокращается время компиляции.
Язык VHDL стал универсальным языком моделирования и разработки, обеспечивающим анализ синтезируемого объекта, управление получаемыми параметрами и характеристиками. Он определяется стандартом ITU-T.
Verilog предоставляет разработчику широкий спектр уровней абстрагирования для описания цифровых устройств. В то же время имеется богатый набор вспомогательных программных средств, помогающих в разработке. Разработчик описывает аппаратные средства (например, микропроцессор) через поведения отдельных элементовон может оперировать такими понятиями, как биты и байты, переменные и операции над ними, логические и арифметические выражения. При этом детали аппаратной реализации откладываются на дальнейшие этапы. Можно провести аналогию с программированием на языке высокого уровняпрограммист избавляется от необходимости рутинного программирования на ассемблере. Он может сосредоточиться на функциональной стороне продукта, оставляя проблемы перевода в машинные коды компилятору.
С помощью специальных программных пакетов описание архитектуры как бы компилируется до уровня логических элементов и связей между ними. После этого функционирование всего устройства может быть программно промоделировано. Для этих целей используются специальные программы-имитаторы. Эти программы моделируют функционирование и взаимодействие логических элементов, позволяя изучать работу устройства и находить возможные ошибки.
Такой абстрактный подход позволяет разработчику перебирать различные варианты архитектур и испытывать их с помощью этапа имитации, находя узкие места данной реализации и исправляя их. При этом не требуется физического создания устройства.
Специальные программные пакеты позволяют провести дальнейшее преобразование, как бы скомпилировать еще раз, до уровня масок для сверхбольших интегральных схем (СБИС). На основе этой информации конечное устройство может быть изготовлено на заводе через несколько недель.
В то же самое время Уеп1о§ позволяет проектировать и на низших уровнях — на уровне защелок и на уровне транзисторов.
Описав устройство на языке описания архитектуры, используя программу-имитатор, разработчик имеет возможность протестировать и отладить проектируемое устройство, исправить возможные ошибки и изучить производительность данной реализации. И только после этого устройство будет физически создано на заводе.
Несмотря на множество положительных сторон данного подхода, использование языка описания архитектуры не позволяет решить все стоящие перед разработчиками задачи. Одной из них является своевременное создание программной поддержки для разрабатываемых устройств, особенно в тех случаях, когда устройство может быть выпущено на рынок только с готовым встроенным программным обеспечением. Например, различные компьютерные адаптеры, сетевые устройства, большинство бытовых приборов, радиотелефоны содержат в себе один или несколько процессоров, которые исполняют прошитую на заводе-изготовителе программу. Очевидно, что выпуск на рынок какого-либо устройства, например, сотового радиотелефона, может быть осуществлен только тогда, когда необходимое программное обеспечение будет создано, отлажено и записано в это устройство.
В наше время динамического развития рынка высоких технологий и в условиях жесткой конкуренции на нем фирмы-изготовители вынуждены максимально сокращать время между началом разработки продукта и его выпуском на рынок, чтобы он не потерял свою актуальность.
Одним из путей сокращения времени создания продукта является одновременная разработка аппаратной и программной составляющих. Для этого требуются средства, позволяющие отлаживать и тестировать программную часть в условиях отсутствия целевой аппаратуры.
Очевидным решением выглядит использование упомянутого имитатора. Однако, имитатор, используемый разработчиками аппаратной части для моделирования проектируемого устройства, не может быть использован по ряду причин.
Во-первых, он не приспособлен для отладки программных продуктов, а изучать работу программы на уровне логических сигналов трудоемко. Это требует больших затрат времени и очень высокой квалификации персонала как в области программирования, так и в области проектирования цифровых устройств.
Во-вторых, скорость работы таких имитаторов на много порядков ниже, чем у реального устройства. Это связано с тем, что в них моделируется взаимодействие логических элементов, количество которых может достигать миллионов и миллиардов. Столь низкая скорость приводит к тому, что моделирование нескольких итераций программы на таком имитаторе может занять дни и недели, а для полноценного тестирования требуются сотни и тысячи итераций.
Еще одним направлением развития цифровых устройств является создание многопроцессорных вычислительных систем на микропроцессорах. Стимулом к развитию многопроцессорных архитектур послужили появление и быстрый рост возможностей микропроцессоров, а также принципиальная ограниченность возможности повышения эффективности вычислительных систем только за счет совершенствования элементной базы.
Такие достоинства микропроцессоров, как высокая надежность, низкая стоимость, малые габариты, масса, малая потребляемая мощность, возможность использования в качестве встроенных программируемых блоков управления в любом оборудовании [9,10], быстро породили идеи о создании высокопроизводительных вычислительных систем на базе микропроцессоров.
Эти системы крайне полезны, поскольку позволяют существенно снизить сложность, громоздкость и стоимость оборудования. В этих системах предполагалось достичь высокой эффективности за счет использования большого числа параллельно работающих микропроцессоров. Первые проекты таких универсальных вычислителей не оправдали возлагавшихся на них надежд, и дальнейшее их развитие пошло по пути специализации [11, 12]. Специализированные системы быстро нашли применение в области автоматизации обработки и управления сложными техническими объектами [13, 14]. Появилось большое количество проектов и экспериментальных разработок высокопроизводительных вычислительных систем с сотнями и даже тысячами процессоров [15, 16,17, 18].
Несмотря на большую потребность в таких системах при автоматизации научных экспериментов, управлении сложными техническими объектами, в экспериментах с параллельными алгоритмами и программами, их развитие и практическое освоение идет медленно, в основном, эмпирически, путем проб и ошибок, через построение макетов, опытных образцов и т. п. Построение образца, пусть даже опытного, — процесс длительный и дорогостоящий. Он включает в себя разработку и создание не только аппаратуры, но и значительной части, причем весьма сложной, программного обеспечения. Так, например, разработка и создание 64-процессорного прототипа системы Cosmic cube [17] заняла семь лет и потребовала более двух миллионов долларов [19].
Итак, возникает задача создания имитатора, позволяющего моделировать проектируемое цифровое устройство. К этому имитатору предъявляется ряд требований. Так, скорость моделирования должна позволять проводить полноценную отладку и тестирование устройства. Поскольку имитатор будет использоваться для отладки программ, он должен быть полнофункциональным отладчиком. Также имитатор должен быть легко конфигурируем, что позволит оперативно вносить изменения в разрабатываемую архитектуру.
Еще одним требованием является возможность оперативного внесения изменений в архитектуру устройства. Это позволит перебирать различные варианты архитектур и оценивать их производительность.
Также имитатор должен иметь возможность моделирования многопроцессорных схем, позволяя отлаживать межпроцессорное взаимодействие.
В то же время от обсуждаемого имитатора не требуется моделирования на таком низком уровне, как уровень вентилей или транзисторов. Напротив, требуется лишь функциональное моделирование, нет смысла дублировать возможности HLD-имитатора по низкоуровневой отладке аппаратного обеспечения.
Итак, основными задачами данного диссертационного исследования являются:
• исследование методов имитации аппаратного обеспечения в целях верификации и отладки программных средств на стадии разработки аппаратной составляющей.
• разработка алгоритмов функционирования высокопроизводительных имитаторов, не требующих наличия специальной аппаратуры.
• выработка принципов для практического создания подобных программных имитаторов.
Научная новизна работы заключается в следующем:
• В диссертационной работе разработан объектный подход к моделированию комплексных схем, позволяющий сочетать гибкость конфигурации, корректность и эффективность моделирования.
• Разработана математическая модель имитатора моделей, состоящих из набора экземпляров некоторых устройств.
• Разработан алгоритм работы подобных имитаторов.
• Разработан подход к созданию класса программ—имитаторов, позволяющих вести отладку и тестирование программ, предназначенных для работы на процессорах в составе комплексных схем, в тех случаях, когда разработка аппаратной части еще не завершена.
• Спроектирован и реализован многофункциональный программный комплекс для моделирования класса комплексных схем, используемых при создании специализированных высокоскоростных сетевых устройств.
Практическая ценность работы заключается в разработке программных средств, позволяющих вести отладку программного обеспечения для схем, находящихся в стадии проектирования. Созданный комплекс решает задачу отладки и тестирования программного обеспечения для проектируемого оборудования.
Работа была использована при разработке программного обеспечения сетевого устройства, проведенной в ООО «Октет». Результаты диссертационного исследования позволили завершить процесс разработки программных прошивок до того момента, когда устройства было изготовлено на заводе. После физического создания устройства прогон созданного программного обеспечения не выявил ошибок, что говорит о высокой степени адекватности модели.
По теме диссертационного исследования опубликовано две печатных работы.
Работа состоит из введения, четырех глав и приложения.
Во введении обосновывается актуальность темы диссертации, рассматривается проблема разработки программного обеспечения на стадии проектирования соответствующей аппаратной составляющей устройства. Кратко характеризуются достижения в области проектирования, тестирования и моделирования аппаратных устройствдается обзор работы по главам.
В первой главе дается постановка задачи, определяется круг решаемых задач, и приводятся требования к конечному продукту. Приводится обзор литературы. Особое внимание уделено практическим разработкам в исследуемой области, как завершенным, так и находящимся на стадии исследования.
Во второй главе рассматривается процесс моделирования схемы, изучается математическая модель, как отдельных устройств, так и целой схемы, исследуются возникающие проблемы и их возможные решения. В частности, рассматривается взаимодействие нескольких схем, работающих на разных имитаторах, изучаются вопросы их взаимодействия и синхронизации.
В третьей главе дается описание разработанного программного комплекса. Рассматриваются технические детали реализации, описываются принципы работы имитатора, взаимодействия устройств и настройка имитатора на моделирование конкретных схем. В этой главе также описаны некоторые решения, позволившие увеличить скорость работы программного комплекса.
В четвертой главе рассматриваются проблемы и трудности, возникшие при использовании имитатора, раскрываются их решения.
В приложении приведены исходные тексты нескольких модулей имитатора.
Общие выводы по работе.
Основными результатами данной диссертационной работы являются:
• Проведение исследования существующих подходов к имитации аппаратных средств в целях верификации программного обеспечения. Также исследованы разработки по вопросам кодизайна (co-design), т. е. разработки программно-аппаратных комплексов встроенных контроллеров (embedded controllers) как единой модели. Особое внимание уделено практическим разработкам в исследуемой области.
• Создание математической модели имитатора комплексных схем, состоящих из множества экземпляров некоторых устройств, работающих с разными тактовыми частотами.
• Разработка алгоритмов и подходов к созданию класса программных расширяемых и масштабируемых имитаторов для комплексных схем. Особое внимание было уделено вопросам масштабируемости схемы и возможности внедрения новых устройств.
• Практическая реализация подобного имитатора на языках Си и Тикль.
Работа была использована при разработке программного обеспечения сетевого устройства, проведенной в ООО «Октет». Результаты диссертационного исследования позволили завершить процесс разработки встраиваемого программного обеспечения (firmware) до того момента, когда устройства было изготовлено на заводе. После физического создания устройства многократные тестовые запуски созданного программного обеспечения не выявили ошибок, что говорит о высокой степени адекватности модели.