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

Опрос

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

Реклама

 

2005 №7

Инструментальный комплект Spartan-3 Starter Kit: разработки ПЛИС семейства FPGA компании Xilinx

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


Для эффективного изучения сквозного проектирования встраиваемых микропроцессорных систем на основе ядер семейств PicoBlaze и MicroBlaze рекомендуется воспользоваться серийно выпускаемыми универсальными инструментальными модулями, выполненными на основе ПЛИС фирмы Xilinx. Использование готовых инструментальных средств позволяет не только ускорить процесс аппаратной реализации, но и избежать ошибок, вносимых при изготовлении печатной платы и монтаже компонентов. Настоящая публикация знакомит с основными характеристиками и структурой аппаратного модуля, выполненного на основе кристалла семейства Spartan-3. Этот модуль поставляется в составе инструментального комплекта Spartan-3 Starter Kit.

Назначение и основные характеристики инструментального комплекта Spartan-3 Starter Kit

Инструментальный комплект Spartan-3 Starter Kit предназначен, в первую очередь, для практического изучения методов проектирования цифровых устройств с аппаратной реализацией операций и разработки встраиваемых микропроцессорных систем на основе ПЛИС семейств FPGA фирмы Xilinx. Функциональные возможности и конструктивное исполнение инструментального модуля позволяют не только выполнять отладку проектов, реализуемых на основе ПЛИС семейства Spartan-3, но и использовать его в качестве промышленного серийного варианта разрабатываемого устройства. Рассматриваемый модуль можно рекомендовать для аппаратной реализации проектируемой системы при жестких требованиях, предъявляемых ко времени ее разработки. Применение серийно выпускаемого модуля позволяет значительно сократить суммарную длительность этого процесса за счет исключения этапов проектирования и изготовления печатной платы устройства и монтажа компонентов.

Инструментальный модуль Xilinx Spartan-3 Starter Board может использоваться для реализации автономных систем управления, сбора и обработки цифровой информации, встраиваемых цифровых устройств с различными компьютерными интерфейсами. Кроме того, данный модуль целесообразно применять в учебных лабораториях для изучения функционирования и проектирования микропроцессорных систем с различной архитектурой. Ресурсы инструментального модуля Xilinx Spartan-3 Starter Board позволяют реализовать проекты встраиваемых микропроцессорных систем, выполняемых на основе как 8-разрядного ядра семейства PicoBlaze, так и 32-разрядного ядра семейства MicroBlaze. В частности, тестовый проект, включенный в состав комплекта, содержит наглядный пример реализации системы, выполненной на базе микропроцессорного ядра семейства MicroBlaze.

В состав комплекта Spartan-3 Starter Kit входят:

  • плата инструментального модуля Xilinx Spartan-3 Starter Board;
  • сетевой адаптер с выходным стабилизированным напряжением 5 В и максимальным током нагрузки 1,6 А, предназначенный для питания инструментального модуля;
  • универсальный загрузочный JTAG-кабель для конфигурирования ПЛИС семейств CPLD и FPGA, а также ППЗУ серий XC18V00 и Platform Flash, подключаемый к параллельному порту компьютера;
  • комплект CD-ROM, содержащий новую полнофункциональную версию системы проектирования ISE (Integrated Synthesis Environment) WebPACK, оценочную версию САПР ISE Foundation, тестовый проект, иллюстрирующий применение ПЛИС семейств FPGA для реализации «системы на кристалле», и необходимую документацию.

Характерными особенностями инструментального модуля Spartan-3 Starter Board являются:

  • использование ПЛИС из семейства Spartan-3 с объемом 200 000 системных вентилей в корпусе FT256, логические и трассировочные ресурсы которой в сочетании с большим количеством пользовательских выводов позволяют реализовать не только отдельные блоки проектируемой системы, но разрабатываемую систему в полном объеме;
  • возможность поддержки на уровне проектов стандартных интерфейсов вычислительных систем RS-232, PS/2 и VGA;
  • подключение специальных и пользовательских выводов ПЛИС к контактам трех стандартных разъемов расширения, обеспечивающее возможность сопряжения с внешними устройствами;
  • внешнее высокоскоростное асинхронное статическое ОЗУ на основе SRAM емкостью 1 Мбайт, расширяющее возможности оперативной памяти, реализуемой на основе соответствующих ресурсов ПЛИС;
  • применение в качестве ППЗУ для хранения конфигурационных данных ПЛИС Flash-PROM серии Platform Flash, программируемой в системе;
  • наличие двух разъемов для подключения загрузочных кабелей различного типа, позволяющих выполнять операции конфигурирования ПЛИС и программирования ППЗУ через порт JTAG-интерфейса в различных режимах, а также обратного считывания конфигурационных данных;
  • применение кварцевого генератора с частотой 50 МГц для формирования внешнего тактового сигнала ПЛИС;
  • наличие панели для установки дополнительного кварцевого генератора;
  • включение в схему модуля преобразователя уровней RS-232, обеспечивающего возможность непосредственного подключения к последовательному порту через разъем DB-9, установленный на плате (при реализации универсального асинхронного приемопередатчика UART на основе ПЛИС);
  • присутствие на плате элементов индикации нескольких типов, обеспечивающих возможность визуального контроля напряжения питания, процесса конфигурирования кристалла и функционирования разрабатываемой системы;
  • наличие 8 ползунковых переключателей и 4 кнопок, которые могут использоваться, например, для ручной установки режима работы реализуемой системы или в процессе отладки проектируемой системы, а также для тестирования инструментального модуля и прикладного программного обеспечения;
  • использование комплексной схемы управления питанием, выполняющей функции формирования напряжений, необходимых для питания компонентов модуля, в том числе для блоков ввода-вывода и ядра кристалла FPGA, а также конфигурационного ППЗУ;
  • наличие кнопки, обеспечивающей реализацию режима принудительной загрузки конфигурационной последовательности в ПЛИС;
  • полная совместимость со всем семейством систем проектирования и программирования кристаллов фирмы Xilinx (ISEWebPACK, ISE BaseX и ISE Foundation).

Структура инструментального модуля Spartan-3 Starter Board

Внешний вид инструментального модуля Spartan-3 Starter Board показан на рис. 1. Компоненты модуля смонтированы на печатной плате с двухсторонним размещением компонентов.

Внешний вид инструментального модуля Spartan-3 Starter Board (вид сверху)
Рис. 1. Внешний вид инструментального модуля Spartan-3 Starter Board (вид сверху)

Структурная схема рассматриваемого модуля изображена на рис. 2. Основными элементами структуры модуля Spartan-3 Starter Board являются:

  • ПЛИС XC3S200 в корпусе FT256, на основе которой реализуется проектируемая система;
  • программируемое в системе ППЗУ серии Platform Flash XCF02S, предназначенное для хранения конфигурационных данных ПЛИС;
  • схема загрузки конфигурационных данных;
  • схема управления конфигурированием ПЛИС;
  • блок синхронизации, предназначенный для формирования внешних тактовых сигналов;
  • схема формирования питающих напряжений;
  • внешнее высокоскоростное ОЗУ;
  • блок светодиодных индикаторов;
  • четырехзначный дисплей, выполненный на основе 7-сегментных светодиодных индикаторов;
  • блок ползунковых переключателей;
  • блок кнопочных переключателей;
  • схема преобразования уровней сигналов интерфейса RS-232;
  • стандартные разъемы интерфейсов RS-232, PS/2 и VGA;
  • три 40-контактных разъема расширения.
Структурная схема инструментального модуля Spartan-3 Starter Kit
Рис. 2. Структурная схема инструментального модуля Spartan-3 Starter Kit

Функциональные возможности инструментального модуля в значительной степени определяются типом используемой ПЛИС. Основные технические характеристики кристалла XC3S200, установленного на плате, рассматриваются в следующем разделе.

В состав схемы загрузки конфигурационных данных входят два разъема, которые предназначены для подключения загрузочных кабелей различного типа к JTAG-порту ППЗУ XCF02S иПЛИС XC3S200. Выводы JTAG-портов конфигурационного ППЗУ и ПЛИС инструментального модуля скоммутированы соответствующим образом, образуя единую цепочку периферийного сканирования, как показано на рис. 3. Таким образом, разработчику предоставляется возможность программирования ППЗУ и загрузки конфигурационных данных непосредственно в ПЛИС из компьютера через один разъем. Режим конфигурирования ПЛИС из компьютера целесообразно использовать на этапе отладки проекта. Разъем J5 позволяет использовать для операций конфигурирования и отладки универсальные загрузочные кабели, выпускаемые фирмой Xilinx: Parallel Cable IV (PC IV) и MultiPro Desktop Tool. Разъем J7 используется для присоединения загрузочного кабеля Digilent JTAG3, который входит в инструментальный комплект Spartan-3 Starter Kit. Кроме того, данный разъем позволяет использовать для загрузки и обратного считывания конфигурационных данных универсальный кабель Parallel Cable 3, который выпускался фирмой Xilinx до появления кабеля следующего поколения Parallel Cable 4.

Цепочка периферийного сканирования инструментального модуля Spartan-3 Starter Board
Рис. 3. Цепочка периферийного сканирования инструментального модуля Spartan-3 Starter Board

Схема управления конфигурированием ПЛИС включает в себя набор перемычек Mode (J8), кнопку PROGRAM и светодиодный индикатор DONE. Три перемычки Mode предназначены для выбора режима конфигурирования ПЛИС. С их помощью задаются значения сигналов на входах выбора режима конфигурирования M0, M1, M2 кристалла XC3S200. При отсутствии перемычки (разомкнутой паре контактов разъема J8) сигнал на соответствующем входе устанавливается в состояние высокого логического уровня (логической единицы). Установка перемычки переключает сигнал на соответствующем входе выбора режима в состояние низкого логического уровня. Описание различных комбинаций перемычек Mode и соответствующих режимов конфигурирования ПЛИС приведено в таблице на рис. 4 изображено расположение перемычек для каждого режима конфигурирования ПЛИС.

Расположение перемычек для каждого режима конфигурирования ПЛИС XC3S200 в инструментальном модуле Spartan-3 Starter Board
Рис. 4. Расположение перемычек для каждого режима конфигурирования ПЛИС XC3S200 в инструментальном модуле Spartan-3 Starter Board

Кнопка PROGRAM позволяет выполнить принудительную загрузку конфигурационной последовательности в ПЛИС. Светодиодный индикатор DONE сигнализирует об успешном завершении процесса загрузки конфигурационной последовательности в ПЛИС.

Таблица . Описание режимов конфигурирования ПЛИС XC3S200 в инструментальном модуле Spartan-3 Starter Board

Блок синхронизации образуют кварцевый генератор с частотой 50 МГц и панель для установки дополнительного кварцевого генератора. Внешний тактовый сигнал, который формируется кварцевым генератором, установленным на плате инструментального модуля, подается на один из восьми специально выделенных контактов кристалла, сопряженных с глобальными буферными элементами — GCLK0 (вывод T9 для корпуса FT256). Так как выход каждого глобального буфера связан (через глобальные тактовые мультиплексоры) с глобальной сетью тактовых линий и цифровыми блоками управления синхронизацией (Digital Clock Manager, DCM) ПЛИС семейства Spartan-3, то такое решение оптимальным образом обеспечивает возможность применения модуля DCM для получения сетки внутренних тактовых частот, соответствующих требованиям реализуемого проекта. Цифровой блок управления синхронизацией позволяет сформировать тактовые сигналы со сдвигом фаз на 90, 180 и 270°, с удвоенной частотой и с одним из возможных коэффициентов деления (1,5; 2; 2,5; 3; 3,5; 4; 4,5; 5; 5,5; 6; 6,5; 7; 7,5; 8; 9; 10; 11; 12; 13; 14; 15; 16) по отношению ко входному тактовому сигналу. Кроме того, применение схемы цифровой автоподстройки задержек (Delay Locked Loop, DLL), входящей в состав DCM, позволяет устранить временной перекос при распространении сигналов синхронизации как внутри кристалла, так и на уровне печатной платы инструментального модуля. В случае установки дополнительного кварцевого генератора, его выход также оказывается подключенным к глобальному тактовому входу ПЛИС — GCLK4 (вывод D9 для корпуса FT256).

Внешнее высокоскоростное ОЗУ выполнено на основе двух микросхем асинхронной статической памяти SRAM IS61LV25616AL-10T, выпускаемых фирмой ISSI. В разрабатываемых проектах встраиваемых микропроцессорных систем данное ОЗУ может быть сконфигурировано в виде двух независимых массивов с организацией 256K\16 разрядов или в виде одного банка с организацией 256K\32. В случае конфигурации внешней памяти в форме двух независимых массивов, в каждом из них используются общие сигналы разрешения записи, разрешения выходов и сигналы на адресных входах. При этом каждый из массивов памяти управляется индивидуальным сигналом выбора кристалла. Организация внешнего ОЗУ в виде одного банка с организацией 256K\32 идеально подходит для использования в проектах 32-разрядных микропроцессорных систем на основе ядер семейства MicroBlaze. При этом внешнее запоминающее устройство может выполнять функции программной или оперативной памяти микропроцессорной системы.

Комплексная схема формирования питающих напряжений включает в себя три DC/DC-преобразователя, вырабатывающих напряжения требуемых номиналов, и светодиодный индикатор POWER. Встроенные DC/DC-преобразователи формируют напряжения питания 1,2 В для ядра кристалла семейства Spartan-3, а также напряжения 2,5 В и 3,3 В, используемые в блоках ввода-вывода ПЛИС и других компонентах инструментального модуля. В качестве входного напряжения используется напряжение 5 В, поступающее от сетевого адаптера. Светодиодный индикатор POWER предназначен для визуального контроля наличия или отсутствия входного напряжения.

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

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

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

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

Большинство пользовательских выводов кристалла FPGA подключено к контактам разъемов различного типа, установленных на плате инструментального модуля. Тем самым, обеспечивается возможность реализации в проекте, выполняемом на основе ПЛИС, ряда наиболее широко применяемых интерфейсов вычислительных систем. Инструментальный модуль предоставляет в распоряжение разработчика разъемы интерфейсов RS-232, PS/2 и VGA. Для реализации асинхронного последовательного порта в соответствии с электрическими характеристиками интерфейса RS-232 в состав модуля включена схема преобразования уровней сигналов, выполненная на основе микросхемы MAX3232 фирмы Maxim. Часть пользовательских выводов ПЛИС разведена к контактам трех стандартных разъемов расширения, обеспечивающим возможность сопряжения с различными внешними периферийными устройствами. Кроме того, конфигурация разъемов расширения позволяет подключать к ним напрямую следующие инструментальные модули, выпускаемые фирмами Xilinx и Digilent:

  • Xilinx Spartan-3 Starter Kit Expansion Boards;
  • Digilent Expansion Boards;
  • Digilent Breakout Probe Header (TPH1);
  • Digilent Breadboard (DBB1);
  • Digilent Wire-wrap Board (DWR1);
  • Digilent SPP, EPP, ECP Parallel Port (PIO1).

Краткая характеристика ПЛИС XC3S200, используемой в инструментальном модуле Spartan-3 Starter Board

Функциональные возможности ПЛИС XC3S200, используемой в инструментальном модуле Spartan-3 Starter Board, характеризуются следующими показателями:

  • логическая емкость кристалла составляет 480 конфигурируемых логических блоков (Configurable Logic Block, CLB) или 4320 логических ячеек (Logic Cell, LC);
  • 173 пользовательских контакта ввода-вывода;
  • высокая производительность, допускающая реализацию проектов с системными частотами до 326 МГц;
  • применение четырех цифровых блоков управления синхронизацией (DCM), выполняющих функции умножения, деления и сдвига фаз тактовых частот, и обеспечивающих расширенные возможности управления тактовыми сигналами не только внутри кристалла, но и на уровне печатной платы проектируемой системы;
  • использование глобальной сети тактовых сигналов предоставляет возможность распределения сигналов синхронизации внутри кристаллов с малыми разбегами фронтов;
  • наличие двух видов внутренней оперативной памяти: распределенной Distributed RAM, реализуемой на базе 4-входовых таблиц преобразования (LookUp Table, LUT) конфигурируемых логических блоков, и встроенной блочной памяти Block RAM, которая может быть организована как двухпортовое ОЗУ;
  • максимальный объем внутренней распределенной оперативной памяти Distributed RAM составляет 30 кбит;
  • предельная информационная емкость встроенной блочной памяти Block SelectRAM, организованной в виде секций ОЗУ по 18 кбит, составляет 216 кбит;
  • возможность реализации быстрых внутренних интерфейсов к внешним высокопроизводительным элементам памяти (ОЗУ или ПЗУ);
  • применение специальной логики ускоренного переноса для выполнения высокоскоростных арифметических операций;
  • наличие 12 встроенных аппаратных умножителей, предназначенных для вычисления произведения двух 18-разрядных операндов;
  • наличие цепочек каскадирования обеспечивает возможность реализации функций с большим количеством входных переменных;
  • поддержка передачи данных с удвоенной скоростью Double Data Rate (DDR), открывающая широкие возможности для реализации высокоскоростных устройств цифровой обработки сигналов;
  • использование технологии SelectI/O позволяет поддерживать 17 однополюсных и 6 дифференциальных цифровых сигнальных стандартов ввода-вывода, в частности, LVTTL, LVCMOS12, GTL, SSTL2(II), HSTL(III), PCI 3.3, AGP, CTT;
  • применение в блоках ввода-вывода функции цифрового управления импедансом DCI (Digitally Controlled Impedance), позволяющей исключить необходимость установки на печатной плате большого количества внешних согласующих резисторов;
  • полная поддержка протокола периферийного сканирования в соответствии со стандартами IEEE Std 1149.1 (JTAG) и IEEE Std 1532;
  • неограниченное количество циклов загрузки конфигурационных данных;
  • поддержка 5 режимов конфигурирования ПЛИС (Master Serial, Slave Serial, Master Parallel, Slave Parallel , JTAG).

Основу архитектуры кристаллов Spartan-3 XC3S200 составляет регулярная матрица конфигурируемых логических блоков CLB, окруженных программируемыми блоками ввода-вывода (Input/Output block, IOB) (рис. 5). Кроме того, в нее входят блоки аппаратных умножителей Multiplier Blocks, цифровые блоки управления синхронизацией DCM и блоки выделенной памяти Block RAM. Коммутация всех перечисленных выше архитектурных элементов осуществляется с помощью программируемых трассировочных ресурсов нового поколения. Трассировочные ресурсы ПЛИС семейства Spartan-3 имеют иерархическую структуру, основным элементом которой является главная трассировочная матрица GRM (General Routing Matrix) [1].

Структурное представление обобщенной архитектуры ПЛИС семейства Spartan-3
Рис. 5. Структурное представление обобщенной архитектуры ПЛИС семейства Spartan-3

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

Описание структуры тестового проекта

Тестовый проект, включенный в состав инструментального комплекта Spartan-3 Starter Kit, выполнен с помощью комплекса средств проектирования встраиваемых микропроцессорных систем Xilinx Embedded Development Kit (EDK). Этот проект представляет собой образец разработки «системы на кристалле» (System-on-Chip), реализующей в одном корпусе ПЛИС функции процессора и периферийных устройств. Основой этой системы является микропроцессорное ядро семейства MicroBlaze. Структура системы показана на рис. 6.

Структура микропроцессорной системы, реализуемой на Spartan-3 Starter Board в рамках тестового проекта
Рис. 6. Структура микропроцессорной системы, реализуемой на Spartan-3 Starter Board в рамках тестового проекта

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

  • микропроцессорное ядро MicroBlaze;
  • модуль универсального асинхронного приемопередатчика UART;
  • модули параллельного интерфейса ввода/вывода GPIO;
  • ядро контроллера 4-значного дисплея;
  • таймер;
  • контроллер прерываний;
  • контроллер внешней памяти EMC (External Memory Controller);
  • отладочный модуль MDM (Microprocessor Debug Module);
  • контроллер дисплея VGA;
  • ядро контроллера клавиатуры PS/2.

Модуль универсального асинхронного приемопередатчика, предназначенный для организации обмена данными между микропроцессорным ядром и внешними устройствами (в частности, последовательным портом ПК) через интерфейс RS-232, конфигурируется со следующими параметрами протокола приема-передачи:

  • максимальная скорость приема-передачи информации составляет 9600 кбит/с;
  • формат передаваемых данных включает в себя стартовый бит, 8 информационных битов, один стоповый бит;
  • контроль четности (нечетности) не производится.

Тестовый проект может быть загружен в ПЛИС инструментального модуля с помощью программы iMPACT, входящей в состав САПР серии Xilinx ISE, или в среде системы проектирования Xilinx EDK. Для программирования конфигурационного ППЗУ серии Platform Flash с помощью программы iMPACT предназначен файл new_S3_Master.mcs, который расположен в разделе download рабочего каталога тестового проекта. Процесс загрузки конфигурационной последовательности в рамках системы проектирования Xilinx EDK подробно рассмотрен в одной из предыдущих публикаций [2].

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

Использование инструментального модуля Spartan-3 Starter Board

Перед началом работы с инструментальным модулем следует подключить загрузочный кабель, входящий в состав инструментального комплекта, к разъему JTAG-интерфейса платы, а также необходимые кабели к разъемам, предназначенным для обмена данными с внешними устройствами. В частности, при реализации прилагаемого тестового проекта нужно подключить коммуникационный кабель к разъему последовательного порта DB-9 модуля и разъему соответствующего COM-порта компьютера. Кроме того, необходимо, используя стандартный VGA-кабель, соединить разъем VGA-порта модуля с входом дисплея, соответствующего спецификации VGA или SVGA. После этого можно подать питание на инструментальный модуль, подключив выходной разъем сетевого адаптера, и активизировать средства программирования (программу iMPACT, входящую в состав САПР серии Xilinx ISE). При успешном выполнении указанных операций после обнаружения загрузочного кабеля производится автоматический поиск и инициализация цепочки периферийного сканирования (включающей в себя ПЛИС и ППЗУ), подключенной к используемому JTAG-порту. Информация об обнаруженной цепочке периферийного сканирования представлена в графической форме в рабочей области основного окна и в текстовом виде в окне регистрации сообщений программы iMPACT. После этого можно приступать к выполнению операций программирования ППЗУ или конфигурирования ПЛИС, а также обратного считывания конфигурационных данных или контрольной информации из ППЗУ. Последовательность необходимых для этого процедур подробно была рассмотрена ранее [3].

Литература

  1. Кузелин М. О., Кнышев Д. А., Зотов В. Ю. Современные семейства ПЛИС фирмы Xilinx: Справочное пособие. М.: Горячая линия — Телеком. 2004.
  2. Зотов В. Разработка встраиваемых микропроцессорных систем на основе ядра MicroBlaze, реализуемых в ПЛИС семейств FPGA фирмы Xilinx, с помощью «мастера» Base System Builder Wizard // Компоненты и технологии. 2005. №№ 3–4.
  3. Зотов В. Проектирование цифровых устройств на основе ПЛИС фирмы Xilinx в САПР WebPack ISE. М.: Горячая линия — Телеком. 2003.

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

 


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