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

Опрос

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

Реклама

 

2002 №8

Временное моделирование цифровых устройств, проектируемых на базе ПЛИС фирмы Xilinx в среде САПР WebPACK ISE

Зотов Валерий


Функциональное моделирование устройства на базе ПЛИС фирмы Xilinx® в среде САПР WebPACK™ ISE™, рассмотренное в предыдущей публикации цикла [1], позволяет выполнить предварительную верификацию проекта. На этом этапе фактически не учитываются временные характеристики и особенности архитектуры кристалла, на базе которого предполагается реализация проектируемой системы. Часто в литературе этот процесс называют моделированием на уровне регистровых передач (Register Transfer Level, RTL). Для функционального моделирования проекта используется библиотека UniSim Library, элементы которой имеютединичные задержки.

Только после проведения этапов синтеза, размещения и трассировки [2–5] становится доступной информация об используемых ресурсах кристалла и задержках распространения сигналов, которая необходима для формирования более адекватной модели. В отличие от функционального, последующие этапы моделирования выполняются с применением библиотеки SimPrim Library, которая содержит описание элементов на уровне ресурсов кристалла. Эта библиотека позволяет учитывать информацию о задержках распространения сигналов, которая содержится в соответствующих файлах, имеющих стандартный формат SDF (Standard Delay Format). Так как содержание этапа реализации (Implementation) коренным образом отличается для семейств CPLD и FPGA, что обусловлено их архитектурными особенностями, то процесс генерации моделей, учитывающих временные характеристики используемых кристаллов, включает в себя различные фазы, в зависимости от выбранного типа ПЛИС. Поэтому далее в статье раздельно рассматриваются этапы временного моделирования для случаев применения кристаллов семейств CPLD и FPGA.

Временное моделирование проекта, как и функциональное, выполняется с помощью системы HDL-моделирования ModelSim™ (в редакции ModelSim XE Starter) [2], включенной в комплект пакета WebPACK ISE. На всех этапах моделирования может использоваться тот же модуль описаний тестовых воздействий, что и на функциональном. Методы создания тестового файла проекта и его структура подробно изложены ранее [1].

Для получения доступа к интерактивному списку этапов моделирования проектируемого устройства следует выделить строку с названием используемого тестового файла в окне исходных модулей Навигатора проекта, поместив на нее курсор мыши и щелкнув левой кнопкой. Все этапы временного моделирования проекта выполняются в пакетном режиме. Поэтому далее основное внимание уделяется описанию параметров инициализации программы ModelSim и временной модели, с помощью которых осуществляется управление процессом моделирования. Состав этих параметров зависит от языка описания аппаратуры HDL (Hardware Description Language) и средств синтеза, используемых в процессе проектирования. В последующих разделах будут рассмотрены параметры процессов временного моделирования проектов, разрабатываемых с применением языка VHDL и программы синтеза XST (Xilinx Synthesis Technology) VHDL.

Временное моделирование проекта, реализуемой на базе ПЛИС семейств CPLD

В интерактивном списке этапов верификации, отображаемом в рабочей области основного окна Навигатора проекта, процесс временного моделирования представлен строкой Simulate Post-Fit VHDL Model (рис. 1).

Список этапов моделирования устройства, разрабатываемого на базе ПЛИС семейств CPLD, который отображается в окне процессов Навигатора проекта

Для контроля и установки требуемых значений параметров инициализации программы ModelSim и временной модели нужно в окне процессов (рис. 1) щелчком левой кнопки мыши выделить строку Simulate Post-Fit VHDL Model, после чего нажать кнопку , расположенную на оперативной панели Навигатора проекта, или воспользоваться командой Properties контекстно-зависимого всплывающего меню, которое выводится при щелчке правой кнопки мыши.

Отображаемая диалоговая панель параметров временного моделирования, в отличие от функционального, содержит три страницы, снабженные закладками с их названиями: «Simulation Properties», «Display Properties» и «Simulation Model Properties» (рис. 2).

Диалоговая панель параметров процесса временного моделирования

Страницы «Simulation Properties» и «Display Properties» содержат те же опции, что и для этапа функционального моделирования. Назначение параметров, расположенных на этих страницах, и их возможные значения достаточно подробно рассмотрены в предыдущих публикациях для процесса функциональной верификации [1]. Страница «Simulation Properties» дополнительно содержит параметр Simulation Mode, с помощью которого выбирается режим временного моделирования.

В выпадающем списке возможных значений параметра представлены три варианта: Maximum Delay, Typical Delay, Minimum Delay.

При выборе Maximum Delay, установленном по умолчанию, проектируемое устройство моделируется с учетом максимальных величин задержек, указанных в соответствующем файле SDF. Значения Typical Delay и Minimum Delay соответствуют режимам моделирования при типовых и минимальных задержках распространения сигналов. К сожалению, в текущей версии пакета WebPACK ISE значения задержек, приведенные в файле SDF, одинаковы для всех трех вариантов и соответствуют максимальной величине. Поэтому возможности, предоставляемые параметром Simulation Mode, полностью будут реализованы только в последующих версиях программных средств проектирования.

На странице «Simulation Model Properties» (рис. 3) представлены параметры временной модели проектируемого устройства.

Страница «Simulation Model Properties» диалоговой панели, представляющей параметры процесса временного моделирования

Параметр Change Device Speed to позволяет при моделировании изменить быстродействие кристалла, выбранного для реализации проекта. Таким образом, в процессе моделирования предоставляется возможность исследования функционирования разрабатываемого устройства при вариации скоростных характеристик используемой ПЛИС. Тем самым, опытным путем определяются требования к быстродействию кристалла, на базе которого выполняется проект. Новое значение этого параметра указывается с помощью клавиатуры после активизации соответствующего поля редактирования.

С помощью параметра Correlate Simulation Data to Input Design включается и выключается режим согласования данных процесса моделирования и исходного описания проектируемого устройства. При включенном значении этого параметра создается дополнительный файл формата NGM, в котором располагается информация о соотношении логического и физического уровней представления проекта.

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

Retain Hierarchy определяет способ представления объектов HDL-описаний в процессе моделирования. Если этот параметр установлен в состояние «включено», то указанные объекты моделируются в виде отдельных иерархических модулей, соответствующих исходному описанию проекта. При этом параметр Correlate Simulation Data to Input Design должен быть также установлен в состояние «включено». По умолчанию установлено значение «выключено», при котором иерархия объектов в процессе моделирования не сохраняется.

Параметр Bring Out Global Set/Reset Net as a Port используется для включения глобальной цепи сброса/установки кристалла в описание интерфейса моделируемого объекта. Если данный параметр находится в состоянии «включено», то глобальный сигнал сброса/установки триггерных ресурсов кристалла GSR преобразуется в формат порта объекта, который представлен в описании верхнего уровня иерархии проекта. Значение «выключено», принятое по умолчанию, соответствует обычному представлению глобальной цепи сброса/установки ПЛИС.

Global Set/Reset Port Name позволяет указать название порта, соответствующего глобальной цепи сброса/установки кристалла. По умолчанию название порта совпадает с идентификатором этой цепи — GSR. Новое значение этого параметра вводится с помощью клавиатуры после активизации соответствующего поля редактирования.

Generate Testbench File управляет генерацией тестового файла по результатам моделирования. По умолчанию установлено значение «выключено», которое запрещает автоматическую перезапись тестового файла.

Значение параметра ROC Pulse Width определяет длительность импульса, необходимого для моделирования компонентов, управляющих инициализацией глобальных цепей сброса/установки в начальный момент времени (Reset-On-Configuration, ROC). По умолчанию для этого параметра используется значение 100 нс.

С помощью параметра TOC Pulse Width задается длительность импульсного сигнала, необходимого для моделирования компонентов, формирующих сигнал инициализации для глобальных цепей управления третьим состоянием в начальный момент времени (Tri-State-On-Configuration, TOC). По умолчанию длительность этого импульса принимается равной 1 нс.

Параметр Select Output behavior определяет состояние выходов элементов памяти при нарушениях временных соотношений входных сигналов в процессе моделирования. В случае использования значения «включено», принятого по умолчанию, выходы элементов памяти переводятся в неопределенное состояние («Х»), если происходит нарушение временных ограничений для входных сигналов. При значении «выключено» сигналы на выходах элементов запоминающих устройств сохраняют предыдущее состояние в случае нарушений времени установки входных сигналов.

Generate Pin File разрешает или запрещает формирование файла, который содержит информацию о соответствии входных и выходных сигналов и выводов кристалла в формате САПР Cadence®. Этот файл имеет расширение «.pin». При значении «выключено», установленном по умолчанию, запись указанного файла не производится.

Выполненные изменения значений для параметров инициализации программы ModelSim и временной модели вступают в силу после нажатия клавиши ОК в нижней части диалоговой панели (рис. 3). Запуск процесса временного моделирования проекта осуществляется двойным щелчком левой кнопки мыши на строке Simulate Post-Fit VHDL Model в окне процессов Навигатора проекта (рис. 1).

Если этапы синтеза, размещения и трассировки были проведены успешно, то далее автоматически создается командный файл сеанса временной верификации и производится запуск системы моделирования ModelSim, которая сразу же после инициализации исполняет этот пакетный файл. При отсутствии окончательных результатов этапа реализации проекта (например, в случае их удаления с помощью команды Delete Implementation Data из всплывающего меню Project) или если размещение и трассировка не проводились, программные средства пакета WebPACK ISE автоматически выполнят все необходимые процедуры, после чего будет активизирован непосредственно процесс временного моделирования.

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

Результаты временного моделирования проекта счетчика Джонсона

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

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

Если указанные действия не приносят желаемого результата, то следует выбрать кристалл с более высоким быстродействием. С этой целью рекомендуется выполнить несколько сеансов временного моделирования при различных значениях параметра Change Device Speed to.

Этапы временного моделирования поекта, реализуемого на базе ПЛИС семейств FPGA

В процессе проектирования устройств на базе кристаллов семейств FPGA разработчику предоставляется возможность проведения моделирования на следующих стадиях:

  • после создания исходных описаний проекта (Simulate Behavioral VHDL Model);
  • после выполнения этапов синтеза и трансляции (Simulate Post-Translate VHDL Model);
  • после выполнения фазы отображения логического описания проекта на физические ресурсы кристалла (Simulate Post-Map VHDL Model);
  • после завершения процедур размещения и трассировки (Simulate Post-Place & RouteVHDL Model).

Такая организация позволяет обнаружить возможные ошибки на более раннем шаге проектирования, и, тем самым, избежать значительных временных потерь. Уровень сложности проектов, выполняемых на базе ПЛИС семейств FPGA, как правило, более высок по сравнению с проектами, разрабатываемыми на основе кристаллов CPLD. Поэтому этапы синтеза и реализации с учетом проводимой оптимизации требуют больших временных затрат. На рис. 5 показан вид рабочей области Навигатора проекта, в окне процессов которой отображается интерактивный список этапов моделирования устройства, проектируемого на базе ПЛИС семейств FPGA.

Список этапов моделирования устройства, разрабатываемого на базе ПЛИС семейств FPGA, отображаемый в окне процессов Навигатора проекта

В процессе моделирования, выполняемого после трансляции проекта, используются единичные значения задержек элементов. Поэтому этот процесс можно также считать функциональным моделированием. Но в отличие от этапа функциональной верификации, рассмотренного ранее [1], здесь используется модель устройства, сформированная с учетом используемых ресурсов кристалла. Этот процесс также называют функциональным моделированием на уровне вентилей (Gate-Level), имея в виду уровень аппаратных ресурсов ПЛИС. При этом используется та же библиотека моделей соответствующих элементов (примитивов) SimPrim Library, что и в процессе временного моделирования.

На этапе моделирования, который выполняется перед размещением и трассировкой проекта (Simulate Post-Map VHDL Model), производится частичная временная верификация разрабатываемого устройства. Модель, формируемая на этой стадии, учитывает задержки распространения сигналов в конфигурируемых логических блоках (CLB) и блоках ввода-вывода (IOB) кристалла, которые используются для реализации проекта. Значения этих задержек рассчитываются для самого наихудшего варианта. При этом отсутствует информация о задержках распространения сигналов, вносимых трассировочными ресурсами ПЛИС. Таким образом, на этом этапе можно получить предварительную оценку выполнения требований, предъявляемых к временным характеристикам проектируемого устройства.

Полное временное моделирование (Simulate Post-Place & Route VHDL Model), выполняемое после успешного завершения этапа реализации, позволяет провести окончательную проверку полученных результатов. Полная модель проектируемого устройства учитывает все возможные задержки распространения сигналов в кристалле, причем их значения выбираются для самого неблагоприятного случая.

Перед активизацией каждого из перечисленных этапов моделирования следует, как обычно, установить необходимые значения параметров этих процессов. Для этого следует выделить соответствующую строку в рабочей области основного окна (рис. 5), после чего воспользоваться кнопкой , расположенной на оперативной панели Навигатора проекта или командой Properties контекстно-зависимого всплывающего меню. Диалоговые панели параметров этих процессов содержат те же страницы, что и в случае временного моделирования проектов, реализуемых на базе ПЛИС семейств CPLD: «Simulation Properties»,«Display Properties» и «Simulation Model Properties» (рис. 6). На страницах «Simulation Properties» и «Display Properties» представлены те же опции, что и для этапа функционального моделирования. Их описание приведено в предыдущей публикации для процедуры функциональной верификации [1]. Для этапов частичного и полного временного моделирования страница «Simulation Properties» дополнительно включает параметр Simulation Mode, назначение которого рассмотрено в предыдущем разделе.

Страница «Simulation Model Properties» диалоговой панели

Simulation Model Properties содержит в основном те же параметры, что и для процесса временного моделирования устройств, разрабатываемых на базе ПЛИС семейств CPLD, но имеются некоторые отличия.

Для этапа моделирования, выполняемого после трансляции, исключен параметр Change Device Speed to, который позволяет исследовать работоспособность проекта в зависимости от быстродействия кристалла, выбранного для его реализации. Это объясняется тем, что формируемая на этой стадии модель устройства не учитывает временные характеристики используемой ПЛИС. Кроме того, указанная страница содержит два дополнительных параметра, связанных с моделированием глобальной цепи управления тристабильными выходами.

Параметр Bring Out Global Tristate Net as a Port предоставляет возможность включения глобальной цепи управления тристабильными выходами кристалла в описание интерфейса моделируемого объекта. Если данный параметр находится в состоянии «включено», то глобальный сигнал управления тристабильными выходами элементов кристалла GTS представляется в виде порта объекта, который описывается на верхнем уровне иерархии проекта. Значение «выключено», принятое по умолчанию, соответствует обычному представлению глобальной цепи сброса/установки ПЛИС.

Значение параметра Global Tristate Port Name позволяет указать название порта, соответствующего глобальной цепи управления тристабильными выходами кристалла. По умолчанию предлагается название порта, совпадающее с идентификатором этой глобальной цепи — GTS. Для изменения значения этого параметра следует воспользоваться клавиатурой после активизации соответствующего поля редактирования.

После внесения изменений в значения параметров инициализации программы ModelSim и временной модели, следует подтвердить их нажатием клавиши «ОК» в нижней части диалоговой панели (рис. 6). Для выполнения очередного этапа моделирования проекта необходимо поместить курсор на строке с его названием в окне процессов Навигатора проекта (рис. 5) и дважды щелкнуть левой кнопкой мыши. Дальнейший ход процесса моделирования аналогичен для всех этапов и подробно рассмотрен в предыдущих статьях [1]. Каждый этап моделирования завершается выполнением команды End Simulation из меню Design, после чего необходимо закрыть основное окно программы ModelSim. Если система ModelSim останется активизированной, то после запуска следующего этапа моделирования выполнение процесса будет прервано при попытке открытия второго экземпляра этой программы и появится сообщение об ошибке. Указанное ограничение обусловлено требованиями лицензии ModelSim XE Starter.

Возможные проблемы, возникающие в процессе временного моделирования проекта

Если результаты временного моделированияпринципиально отличаются от ожидаемых (что определяется на этапе функциональной верификации), то основной причиной этого являются нарушения временных соотношений в проекте. В этих случаях средствами моделирования выводятся соответствующие сообщения. Кроме того, несоответствия результатов функционального и временного моделирования могут быть обусловлены особенностями библиотеки SimPrim Library, которая используется на последних этапах. Наиболее часто при этом проявляется эффект фильтрации «коротких» импульсов. Если длительность импульса (некоторого состояния сигнала) на входе элемента оказывается меньшей, чем задержка распространения (IOPATH), указанная для него в файле SDF, то этот импульс не оказывает никакого влияния на выходные сигналы в процессе моделирования. Это связано с тем, что в библиотеке SimPrim Library используется инерционный (Inertial) тип задержки. Учитывая, что задержки распространения обычно рассчитываются для наихудшего случая, временная модель может отфильтровывать (поглощать) кратковременные изменения сигналов, которые должны присутствовать в процессе функционирования реального устройства в соответствии с алгоритмом его работы.

Для проектов, использующих язык описания аппаратуры VHDL и соответственно средства синтеза XST VHDL, отсутствует эффективный механизм отслеживания «коротких» импульсов в процессе моделирования.

Можно для отдельных элементов библиотеки SimPrim Library изменить тип задержки с инерционного на транспортный (Transport), при котором учитываются все импульсы, независимо от соотношения их длительности и задержки распространения сигнала в этих элементах. Но в этом случае в процессе моделирования будут также отрабатываться воздействия коротких паразитных импульсов (glitch), которые не должны восприниматься элементами вследствие их инерционности. То есть временное моделирование при использовании транспортных задержек также может дать результаты, которые не соответствуют реальной работе проектируемого устройства. Возможно, эта проблема будет полностью решена в последующих версияхпакета САПР WebPACK ISE.

В случае использования в процессе проектирования языка Verilog и средств синтеза XST Verilog, в системе моделирования ModelSim предусмотрен ряд команд, позволяющих преодолеть проблему моделирования «коротких» импульсов. Эти директивы издаются с помощью клавиатуры в командной строке (vsim>), расположенной в консольной области основного окна ModelSim. Команда +transport_int_delays устанавливает транспортный тип для всех задержек распространения IOPATH. Директива +transport_path_delays изменяет инерционные задержки всех портов (PORT) на транспортные. Команда +pulse_e/10 включает режим моделирования, при котором в случае возникновения входных импульсов с длительностью менее 10% от задержки распространения IOPATH, указанной в файле SDF для соответствующего элемента, выводится сообщение об ошибке, но импульс отрабатывается моделью. Команда +pulse_r/10 предписывает в процессе моделирования отфильтровывать короткие импульсы на входах элементов, длительность которых не превышает 10% от задержки распространения IOPATH, указанной в файле SDF для этого компонента. При выполнении директивы +pulse_int_e/10 входные импульсы, длительность которых составляет менее 10% от задержки порта PORT, воспринимаются моделью так же, как и сигналы с нормальными временными характеристиками, но сопровождаются сообщением об ошибке. Команда +pulse_int_r/10 устанавливает режим фильтрации всех входных импульсов, длительность которых не превышает 10% от задержки порта, приведенной в файле SDF для соответствующего элемента. Таким образом, можно исключить влияние паразитных импульсов на результаты временного моделирования.

Еще одна возможная проблема, с которой может столкнуться разработчик в процессе временной верификации устройств, проектируемых на базе ПЛИС семейств FPGA, связана с некорректным отображением результатов моделирования модулей цифровой автоподстройки задержки (Delay-Locked Loop, DLL) и модулей цифрового управления синхронизацией (Digital Clock Manager, DCM). Эти модули должны обеспечивать минимизацию перекоса тактового сигнала, поступающего на вход кристалла и подающегося на внутренние элементы, в пределах, указанных в справочных данных для каждого конкретного типа ПЛИС. Однако на диаграммах сигналов, полученных в результате временного моделирования, величина перекоса отличается от значения, приведенного в справочных данных. Это различие обусловлено методом интерпретации задержки порта синхронизации средствами моделирования. ModelSim отображает тактовый сигнал без учета задержки, указанной в файле SDF для этого порта.

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

Оценка влияния напряжения питания и температуры на временные характеристики проектируемого устройства

Временное моделирование проекта позволяет провести исследования функционирования разрабатываемого устройства при изменении напряжения питания и температуры окружающей среды. Для этой цели используются параметры, указываемые в файле временных и топологических ограничений проекта User Constraints File (UCF), на основании значений которых выполняется масштабирование всех задержек распространения сигналов в кристалле в соответствии с указанной величиной напряжения питания и температуры. Зависимость временных параметров кристалла от напряжения источника питания проектируемого устройства учитывается с помощью ограничения VOLTAGE. Значение температуры, при которой предполагается эксплуатация проектируемого устройства, задается с помощью параметра TEMPERATURE. Формат соответствующих выражений для указанных ограничений приведен в одной из предыдущих статей цикла [4].

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

Для оценки влияния напряжения источника питания и температуры на временные характеристики проектируемого устройства необходимо изменить значения параметров VOLTAGE и TEMPERATURE в файле UCF или добавить соответствующие выражения в случае их отсутствия. Выполнив необходимые изменения в файле временных и топологических ограничений проекта, следует записать его на диск, используя команду Сохранить из меню Файл (если для редактирования используется программа «Блокнот»). После этого будет выведен запрос на удаление результатов, полученных на этапе реализации (Implementation).

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

Диалоговая панель запроса разрешения на удаление результатов этапа реализации

В заключение следует упомянуть еще один инструмент контроля временных характеристик проекта — программу Timing Analyzer, которая входит в состав САПР WebPACK ISE. Этот модуль позволяет выполнить статический временной анализ проекта, в результате которого разработчику предоставляется информация о задержках распространения сигналов и критических цепях. Более подробно временной анализатор будет рассмотрен в одной из последующих публикаций.

Литература

  1. Зотов В. Функциональное моделирование цифровых устройств, проектируемых на базе ПЛИС фирмы Xilinx в среде САПР WebPACK ISE // Компоненты и технологии. 2002. No 7.
  2. Зотов В. ModelSim — система HDL-моделирования цифровых устройств // Компоненты и технологии. 2002. No 6.
  3. Зотов В. Синтез, размещение и трассировка проектов, реализуемых на базе ПЛИС CPLD фирмы Xilinx, в САПР WebPACK ISE // Компоненты и технологии. 2002. No 1.
  4. Зотов В. Синтез проектов, реализуемых на базе ПЛИС FPGA фирмы Xilinx, в САПР WebPACK ISE // Компоненты и технологии. 2002. No 3
  5. Зотов В. Реализация проектов на базе ПЛИС семейств FPGA фирмы Xilinx в САПР WebPACK ISE // Компоненты и технологии. 2002. No 4.

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

 


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