Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2002 №8

Концептуальные основы и компонентный состав IEESD-2000 — интегрированной среды сквозной совместной разработки аппаратного и программного обеспечения встроенных цифровых систем

Долинский Михаил


Введение

Две замечательных тенденции последних десятилетий — микроминиатюаризация электроных компонентов и развитие технологий программируемых логических интегральных схем (ПЛИС — FPGA, CPLD и т. п.) обеспечили экспоненциальный рост сложности устройств (до десятков, а в самой ближайшей перспективе и сотен миллионов логических вентилей), которые можно разработать «за столом», не обращаясь к производствам во время разработки и отладки макетных образцов. Однако эти же тенденции параллельно породили и усугубляют разрыв между потенциальными возможностями ПЛИС и реальными возможностями по разработке устройств на базе ПЛИС, предоставляемыми имеющимися на рынке средствами разработки, обеспечивающими текстовый или графический ввод проектов, их симуляцию, отладку, а также синтез файлов для соответствующего конфигурирования ПЛИС. Такой же технологический разрыв характерен и при создании устройств на базе заказных СБИС.

С 1987 года в процессе «наведения мостов» участвует и СНИЛ «Новые информационные технологии» ( http://NewIT.gsu.unibel.by) при Гомельском государственном университете им. Ф. Скорины. За это время выпущено, как минимум, три поколения продуктов (для СМ ЭВМ, для IBM PC под DOS, для IBM PC под Windows) в каждом из главных направлений:

  • разработка программного обеспечения микроконтроллеров и микропроцессоров с возможностью настройки на целевую архитектуру;
  • высокоуровневая разработка аппаратного обеспечения;
  • совместная отладка программного и аппаратного обеспечения.

В связи со все возрастающей популярностью ОС Linux и даже поступающими к нам конкретными предложениями начато изучение возможных технологий переноса разработок в среду Linux.

Цель данного материала — обобщить накопленный опыт разработки и попытаться проанализировать ее с точки зрения ответов на вопросы типа: из-за наличия каких свойств (концептуальных основ) эта система востребована уже сейчас разработчиками? и какие ее свойства (концептуальные основы) должны быть портированы в Linux?

1. Концептуальные основы IEESD-2000

К концептуальным основам IEESD-2000 можно отнести универсальность, автоматическую генерацию низкоуровневых описаний встроенных цифровых систем (ВЦС), поддержку коллективной и распределенной разработки, сквозную верификацию, производительную симуляцию, гибкую интеграцию с эмуляцией. Рассмотрим более подробно необходимость и качество реализации в IEESD каждой из этих основ.

1.1. Универсальность

Одной из основных характеристик современных ВЦС является многообразие используемых аппаратных платформ, прежде всего, программируемых микропроцессоров (МП), микроконтроллеров (МК) и процессоров цифровой обработки сигналов (ПЦОС). Поэтому необходимым условием эффективности интегрированной среды разработки ВЦС является поддержка разнообразных МК, МП и ПЦОС.

Другим источником потребности в настройке на процессоры и симуляции мультипроцессорных систем являются современные ПЛИС и заказные СБИС. Для создания вполне приемлемого RISC-процессора требуется около 25 тысяч вентилей, а на современных кристаллах, даже программируемых, не говоря уже о заказных, емкости выросли до сотен тысяч и даже миллионов вентилей. Существует даже рынок готовых IP-компонентов процессоров.

Система IEESD-2000 обеспечивает открытый универсальный интерфейс взаимодействия с моделируемыми компонентами. Такой подход позволяет разрабатывать с помощью языков программирования модели произвольных МП, МК, ПЦОС и других сложных аппаратных компонентов и включать их в общую моделируемую композицию. Оптимизированный событийный механизм моделирования гарантирует корректную и быструю симуляцию, в том числе и мультимикропроцессорных систем.

Более того, реализованные методология и средства создания моделей процессоров и их периферийных устройств упрощают и ускоряют соответствующие разработки.

Кроме того, система IEESD-2000 содержит богатую параметризованную библиотеку готовых компонентов, включающую логические элементы, шифраторы, дешифраторы, мультиплексоры, демультиплексоры, сумматоры, компараторы, триггеры, регистры, счетчики, оперативные и постоянные запоминающие устройства, процессоры. Поддерживается создание пользовательских библиотек компонентов. Обеспечивается визуальное иерархическое проектирование сложных ВЦС методами «снизу-вверх» и «сверху-вниз».

Другой важной характеристикой современных ВЦС является потребность в использовании различных языков программирования: ассемблеров для различных процессоров, различных диалектов языков С, Java, FORT и т. д.

Для обеспечения возможности отлаживать программы на языках ассемблера различных процессоров система IEESD-2000 включает компоненты настройки универсальной ассемблерной библиотеки (RtASM) на ассемблер целевого процессора. Кроме того, имеются единые средства хранения отладочной информации, взаимодействия с ней и линкования объектных и библиотечных модулей.

Возможность использовать языки программирования более высокого уровня, нежели ассемблер, поддерживается семейством конверторов отладочной информации, построенной внешними компиляторами, которые преобразуют ее в единый формат представления отладочной информации в среде IEESD-2000.

Кроме того, имеется встроенный в IEESD-2000 компилятор компиляторов UniSAn, упрощающий создание собственных компиляторов для произвольных языков программирования и верификации. На основе UniSAn, в частности, разработана вышеупомянутая универсальная ассемблерная библиотека RtASM.

Необходимым условием эффективности современных средств отладки является возможность аппаратной эмуляции ВЦС или ее части (процессорной или окружения процессора). IEESD-2000 включает в свой состав универсальный внутрисхемный симулятор UniICS, который обеспечивает взаимодействие симулируемых на инструментальной машине моделей процессоров с реальной платой ВЦС, на которой этот процессор должен быть расположен. IEESD-2000 также включает в своей состав универсальный эмулятор UniICE, который обеспечиваетвзаимодействие эмулируемого процессора со средой отладки его программного обеспечения на инструментальной машине.

Таким образом, IEESD-2000 может применяться при разработке ВЦС, содержащих практически любые цифровые и аналоговые компоненты (последние моделируются на функциональном уровне).

1.2. Автоматическая генерация низкоуровневых описаний ВЦС

Существенным достоинством системы IEESD-2000 является ее бесшовная интеграция с САПР более низкого уровня (для цифровых компонентов). Это обеспечивается следующим образом: для отлаженного в системе IEESD-2000 аппаратного обеспечения может быть автоматически сгенерировано корректное VHDL-описание, а для отлаженного в IEESD-2000 программного обеспечения автоматически строятся машинные коды для целевой архитектуры. Кроме того, по результатам симуляции в IEESD-2000 для аппаратной части проекта могут быть автоматически сгенерированы несколькими способами тестовые воздействия. Вся эта информация может быть использована в САПР более низкого уровня.

1.3. Поддержка коллективной и распределенной разработки

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

Прежде всего, сама система IEESD-2000 допускает размещение ее на сервере Windows NT/2000, а также вызов и эффективную работу с любой рабочей станции (Windows 95/98/NT/2000) в локальной сети. При этом разработчик может использовать часть данных проекта глобально, загружая их из специального каталога на сервере, а часть данных — локально, загружая их со своей рабочей станции (или из своего сетевого каталога). Разработана безопасная технология обновления глобальных данных общего пользования.

Таким образом, система IEESD-2000 эффективно поддерживает коллективную и распределенную разработку, что в значительной степени повышает производительность группы разработчиков ВЦС.

1.4. Сквозная верификация

Важным достоинством системы IEESD-2000 является поддержка ею сквозной верификации как на этапе создания, развития и модификации самой системы IEESD-2000, так и при последующем ее использовании при разработке прикладных ВЦС.

В настоящее время подготовлено около 700 тестовых проектов для контроля корректности функционирования IEESD-2000. Каждый выпуск новой версии IEESD-2000 предваряется контрольным исполнением пакета тестов. Кроме того, этот тесты используются для регулярной проверки текущего состояния вновь разрабатываемой версии системы IEESD-2000. В процессе такого тестирования для каждого тестового устройства исполняются: компиляция и симуляция в IEESD-2000, генерация синтезируемого VHDL-описания аппаратного обеспечения, компиляция и симуляция сгенерированных VHDL-описаний в САПР Max+Plus II.

В системе имеется встроенный язык управления пакетным тестированием, который позволяет организовать регрессионное тестирование проектов, разрабатываемых пользователями, а также обеспечивается веб-визуализация регрессионного тестирования.

Сквозная верификация проектов пользователей подразумевает в данном случае следующее. В начале разработки, на стадии эскизного проектирования, создаются адекватная внешняя среда функционирования ВЦС и минимальный (в целях сокращения времени тестирования), но полный (в целях гарантирования эффективности тестирования) набор тестов. Для повышения качества тестов рекомендуется также создать с помощью языков программирования высокого уровня «золотую модель», которая, будучи симулируемой, в среде IEESD-2000 на подготовленном наборе тестов будет вести себя точно так же (и по функциональности, и по временным характеристикам), как должна вести система, которую необходимо спроектировать. В этом случае процесс проектирования заключается в последовательной декомпозиции «золотой модели» на составляющие, которые, взаимодействуя друг с другом (определенным пользователем образом), обеспечивают выполнение функций «золотой модели». Очевидно, что, начиная со второго уровня декомпозиции, любой разработчик может перманентно использовать заготовленное множество тестов и среду тестирования для постоянного контроля качества своей части проекта.

1.5. Производительная симуляция

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

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

1.6. Гибкая интеграция с эмуляцией

Важное значение в IEESD-2000 придается возможности погружать в ПЛИС отлаженные части аппаратного обеспечения. Таким образом, становится возможной пофрагментная и комплексная эмуляция проекта. С другой стороны, имеется возможность обеспечить средой отладки внешний эмулятор процессора, базирующийся на использовании соответствующего отладочного кристалла.

1.7. Поддержка локального и дистанционного обучения

Кроме традиционных для подобных систем встроенной помощи и документации (на русском и английском языках), обеспечивается режим автотестирования и интеграция с инструментальной системой дистанционного обучения, также разрабатываемой нашей лабораторией ( http://dl.gsu.unibel.by).

2. Компонентный состав IEESD-2000

Пакет инструментальных систем сквозного совместного проектирования программного и аппаратного обеспечения встроенных мультипроцессорных систем включает в себя следующие компоненты:

WInter — среда отладки программного обеспечения мультипроцессорных систем с возможностью высокоуровневой симуляции аппаратного обеспечения и внешней среды;
HLCCAD — среда высокоуровневого проектирования и отладки аппаратного обеспечения цифровых систем с возможностью симуляции программного обеспечения на уровне машинных кодов и поведенческого моделирования внешней среды;
IEESD-2000 — среда совместного проектирования и отладки программного и аппаратного обеспечения мультипроцессорных систем с поведенческой симуляцией и эмуляцией внешней среды;
GENMOD — средства генерации моделей процессоров;
MPDD — среда разработки и синтеза устройств с микропрограммным управлением;
UniICS — универсальный внутрисхемный симулятор;
UniICE — универсальный внутрисхемный эмулятор;
UniSAn — универсальный синтаксический анализатор;
RtASM — ассемблер, настраиваемый на целевую архитектуру.

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

Хочется подчеркнуть также такое общее достоинство всех компонентов, как интероперабельность. То есть, оставаясь в принципе независимыми разработками и обеспечивая возможность своего использования без наличия других компонентов, все составные части развиваются исходя из неукоснительного выполнения требования прозрачной для пользователей бесшовной интеграции всех частей в единый комплекс IEESD-2000.

2.1. HLCCAD — высокоуровневое проектирование аппаратного обеспечения

Как и многие другие системы подобного назначения, HLCCAD позволяет визуально проектировать, но, в отличие от аналогов, HLCCAD позволяет в качестве компонентов иметь модели процессоров, а затем симулировать совместно исполнение отлаженных программ на этих процессорах (со скоростью до сотен тысяч инструкций в секунду) и изменение состояний остальной части схемы на любом из выбранных пользователем уровней: вентильном, регистровых передач или функционально-логическом.

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

2.2. WInter — отладка программного обеспечения

На рынке СНГ, как минимум, нет средств, позволяющих отлаживать программное обеспечение мультипроцессорной системы. В то же время WInter позволяет визуально сконфигурировать такую систему, а затем отлаживать ее программное обеспечение, написанное как на ассемблере (встроенный ассемблер поставляется вместе с моделью процессора, можно использовать и внешний ассмеблер стороннего разработчика), так и на языках более высокого уровня, например, С— при наличии соответствующего компилятора и конвертора отладочной информации. Конвертор отладочной информации разрабатывается намидля каждого стандарта хранения отладочной информации.

Важным свойством WInter является его возможность параллельно исполнению программ симулировать высокоуровневые модели аппаратного обеспечения и внешней среды и их взаимодействие. Обеспечивается симуляция как «потактная», так и «на уровне инструкций», максимальная производительность симуляции — до 10 миллионов инструкций в секунду на Pentium II, 1 ГГц, 256 МБ ОЗУ.

2.3. IEESD — совместная отладка программного и аппаратного обеспечения с возможностью настройки на модель процессора

На сегодняшний день только Seamless фирмы Mentor Graphics решает подобную задачу, привлекая к процессу еще множество других продуктов (Renoir, ModelSim, XRAY Debugger). Не являются открытыми для пользователей ни интерфейс моделей процессоров, ни технология их создания. И, наконец, суммарная стоимость всех продуктов, требуемых для совместной отладки программного и аппаратного обеспечения с помощью Seamless, легко достигает, а для мультипроцессорных систем и сильно превышает сотню тысяч долларов США.

2.4. GENMOD — средства генерации моделей процессоров

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

GENMOD позволяет описать ресурсы процессора (биты, благи, регистры, память), способы адресации, алгоритмы исполнения инструкций и т. д. Затем автоматически генерируется модель на языке ассемблера Intel 80386 (для обеспечения совместимости со всеми компьютерами типа IBM PC). После компиляции эта модель может работать (в зависимости от желания пользователя) в Winter, HLCCAD, IEESD.

2.5. MPDD — среда разработки и синтеза устройств с микропрограммным управлением

Эта разработка также не имеет аналогов, как минимум, на рынке СНГ. Пользователь может написать и отладить программу на разработанном нами ассемблере микропрограммных автоматов. Ассемблер по своим возможностям и синтаксису близок к ассемблеру Intel 8086 (возможна перенастройка синтаксиса по желанию пользователя).

Для отладки микропрограмм используется среда WInter и специально разработанная нами модель виртуального процессора микропрограммных автоматов. После завершения отладки микропрограммы компилятор генерирует HLCCAD-схему соответствующих операционного и управляющего автоматов. Имеются опции, управляющие соотношением «аппаратные затраты/производительность». Сгенерированная схема может быть просимулирована в HLCCAD с целью исследования производительности и возможной последующей перегенерации с другими параметрами оптимизации. Для окончательного варианта операционного и управляющего автоматов, исполняющих отлаженный алгоритм, HLCCAD автоматически генерирует синтезируемые VHDL-описания и файлы тестов.

2.6. UniICS — универсальный внутрисхемный симулятор

UniICS — это аппаратно-программный комплекс, реализованный на базе ПЛИС фирмы Altera, который обеспечивает передачу сигналов между частью схемы, симулируемой в HLCCAD, и частью схемы или внешней среды, эмулируемой реальными внешними аппаратными устройствами. Поддерживается возможность анализа интерфейсных сигналов средствами HLCCAD, а также интерактивное переназначение связей между контактами на схеме в HLCCAD и реальными физическими контактами UniICS.

2.7. UniICE — универсальный внутрисхемный эмулятор

UniICE — это аппаратно-программный комплекс, разработанный на базе ПЛИС фирмы Altera, который обеспечивает общие функции аппаратных отладчиков для микропроцессоров и микроконтроллеров различных типов. Обеспечена интеграция с системой отладки программного обеспечения WInter. Реализована целевая насадка для эмуляции микроконтроллеров семейства MCS-51.

2.8. UniSAn — универсальный синтаксический анализатор

Для описания языка (программирования, проектирования, описания и т. д.) текстового вида можно использовать расширенный язык формул Бекуса-Наура. Обеспечивается компиляция, устранение ошибок описания. Для отдельных конструкций можно определить «функции действия». По корректным описаниям строится сжатое бинарное представление языка, которое затем используется универсальной программой синтаксического анализа текстов для данного языка. С помощью функций действия осуществляется взаимодействие с генераторами кода, интерпретаторами и т. д. Достоинства по сравнению с аналогами — упрощение и «очеловечивание» процесса описания языков, высокая скорость синтаксического анализа.

2.9. RtASM — ассемблер, настраиваемый на целевую архитектуру

RtASM — это специализированная разработка, базирующаяся на UniSAn. Она предназначена для сокращения сроков разработки ассемблера для заданного произвольного процессора. Базируется на библиотеке ASMLib, содержащей около 20 тысяч строк повторно используемого кода на С.

2.10. Взаимодействие с инструментальной системой дистанционного обучения

Инструментальная система дистанционного обучения ( http://dl.gsu.unibel.by) позволяет пользователю Интернета зарегистрироваться,ознакомиться с имеющимися учебными курсами, подписаться на выбранный курс, получить теорию и задания. Выполненное задание («решение») может быть загружено в систему. Если в курсе указано, что эти задания проверяются человеком, то они помещаются в очередь и ждут, пока назначенный тьютор не откроет их, проверит, выставит оценку и, возможно, напишет комментарии. Если в курсе указано, что проверка выполняется автоматически, то вызывается соответствующая программа, ей передается полученное «решение»,программа его анализирует, выставляет оценку и пишет комментарии.

В настоящее время в эту систему интегрированы:

  • WInter — для проверки программ написанных на ассемблере для различных микроконтроллеров, модели которых уже выполнены нами (Intel 8051, Motorola 68HC05/08, Atmel Corp. AVR).
  • HLCCAD — для проверки проектов аппаратного обеспечения.
  • IEESD — для проверки проектов, включающих процессоры и программы для них, а также некоторое аппаратное окружение.

Данные возможности используются при организации обучения студентов математического факультета по курсам «Элементы вычислительной техники» (специальность — математика, 3-й курс), «Физические основы ЭВМ»(специальность — прикладная математика, 4-й курс), а также при проведении соответствующих конкурсов в рамках Гомельской недели компьютерных наук (Gomel Computer Science Week — http://www.gsu.unibel.by/gcsw)

Заключение

Данный материал служит отправной точкой цикла статей, посвященных комплексу средств сквозного совместного проектирования программного и аппаратного обеспечения встроенных цифровых систем, который разрабатывается в СНИЛ «Новые информационные технологии» Гомельского государственного университета им. Ф. Скорины. Все разработки перманентно внедряются в учебный процесс университета, многие неоднократно использовались при решении реальных проектных задач. Компоненты комплекса многократно освещались в печати [1–15], экспонировались на белорусских и международных выставках, демонстрировались на семинарах в Москве, Санкт-Петербурге, Минске, Гомеле. В марте 2002 года этот комплекс средств экспонировался на CeBIT 2002 (Ганновер, Германия).

Литература

  1. M. Dolinsky «High-level design of embedded hardware-software systems», «Advances in Engineering Software», Vol 31, No 3, March, 2000, UK, Oxford, «ELSEVIER».
  2. Dolinsky M. S. «Integrated Environment IEESD-2000 for embedded system development». Automatic Control and Computer Sciences, Allerton Press, New York, 1999, Vol. 33, No 3.
  3. Dolinsky M. S., Ziselman I. M., Fedortsov A. O. «In-circuit emulators of microprocessors andmicrocontrollers». Automatic Control and Computer Sciences, Allerton Press, New York, 1999.Vol. 33, No1.
  4. Dolinsky M. S., Ziselman I. M., Harrasov A. A. «Computer-Aided design of microprogrammed devices». Automatic Control and Computer Sciences, Allerton Press, New York, 1997, Vol. 31, No 5.
  5. Dolinsky M., Ziselman I., Belotsky S. «Metalanguage for Peripherals Description and Simulation» Tagungsband 1 des 42. Internationalen Wissenschaftlichen Kolloquiums, Seite 587.
  6. Долинский М. С. «Интегрированная среда для разработки встроенных систем IEESD-2000». Рига, «Автоматика и вычислительная техника». 1999. No 3.
  7. Долинский М. С., Зисельман И. М., Федорцов А. О. «Внутрисхемные эмуляторы микропроцессоров и микроконтроллеров». Рига, «Автоматика и вычислительная техника». 1999. No 1.
  8. Долинский М. С., Зисельман И. М., Харрасов А. Р. «Автоматический синтез микропрограммных автоматов». Рига, «Автоматика и вычислительная техника». 1997. No 5.
  9. Долинский М. С., Лещенко Л. Н., Стома И. С. Настраиваемый синтаксический анализатор языков регулярных и контекстно-свободных грамматик // Автоматизация проектирования в электронике: Сб. науч. тр. АН УССРИТК. Киев, 1993. Вып. 47.
  10. Долинский М. С., Зисельман И. М., Белоцкий С. Л. «Инструментальная система высокоуровневого проектирования микропроцессоров и микропроцессорных систем» // Электроника. 1996. No 4.
  11. Внутрисхемный эмулятор / А. О. Федорцов, М. С. Долинский (Беларусь). — No а19980557; Заявлено 11.06.98; Опубл.30.12.99, Бюл. No 4 // Изобретения. Полезные модели. Промышленные образцы.1999. No 4.
  12. Долинский М. С., Литвинов В. А., Ермолаев И. Ю., Федорцов А. О. «Пакет инструментальных комплексов сквозного совместного проектирования программного и аппаратного обеспечения встроенных мультипроцессорных систем» // Chip News. Инженерная микроэлектроника. 2002. No 5.
  13. М. Долинский, В. Литвинов, И. Ермолаев, Федорцов А. О. «Примеры применения системы IEESD-2000 для совместного проектирования программного и аппаратного обеспечения встроенных цифровых систем» // Chip News. Инженерная микроэлектроника. 2002. No 4.
  14. М. Долинский, В. Литвинов «Технология сквозного совместного проектирования программного и аппаратного обеспечения цифровых систем в IEESD-2000» // Chip News. Инженерная микроэлектроника. 2002. No 3.
  15. М. Долинский «Применение интегрированной среды IEESD-2000 для разработки систем на базе FPSLIC» // Чип-Ньюс. 2000. No 7.
  16. Долинский М. С., Харрасов А. А. «Средства разработки цифровых устройств методом синтеза микропрограммных автоматов» //Электроника. 1998. No 11-12. 1999. No 1.
  17. Федорцов А., Долинский М. «Устройство для отладки микропроцессорных систем»//Электроника. 1999. No1.
  18. Долинский М., Литвинов В., Галатин А. «Система высокоуровневого проектирования цифровых устройств HLCCAD» //Электроника. 1998. No 10.
  19. Федорцов А. О., Зисельман И. М., Долинский М. С. «Внутрисхемный эмулятор микроконтроллеров семейства MCS-51» //Радиолюбитель. 1998. No 8–9.

Скачать статью в формате PDF  Скачать статью Компоненты и технологии PDF

 


Сообщить об ошибке