Чем плис отличается от микроконтроллера
Перейти к содержимому

Чем плис отличается от микроконтроллера

  • автор:

Микроконтроллер и ПЛИС. В чём разница

Многие, задаваясь целью познать удивительный мир программируемых устройств, задаются вопросом: «Что же выбрать микроконтроллеры или ПЛИС’ы? И вообще, в чём между ними разница?» Давайте попробуем ответить на этот вопрос, и для начала рассмотрим, что представляет собой каждый из них.
По сути, Микроконтроллер это такой же компьютер, который мы видим каждый день, но только на одной микросхеме .

Группы, упомянутые в ролике

Смотрите также

Смотреть видео: Как определить номинал стабилитрона

Смотреть видео: Локтальные лампы

Смотреть видео: Принцип работы стабилизатора тока. Азы схемотехники

Смотреть видео: Тетрод EL509

Смотреть видео: DC-DC преобразователи с широким диапазоном

    • Магазины и оптовые отделы
    • Видео
    • Новости
    • Каталог производителей
    • Каталоги автозапчастей
    • Акции и спецпредложения
    • Калькуляторы
    • Обратная связь
    • История компании
    • «ЧИП и ДИП» сегодня
    • Контактная информация
    • Работа в «ЧИП и ДИП»
    • Образцы документов
    • Сервис-центр
    • Как сделать заказ
    • Доставка заказа
    • Способы оплаты
    • Состояние заказа
    • Редактирование заказа
    • Возврат и обмен товара

    Принимаем к оплате
    CHIPDIP в соцсетях

    ООО «ЧИП и ДИП»

    Республика Беларусь , 220004, г. Минск, ул. Димитрова, дом 5, торговое помещение №10, офис 41
    Свидетельство о регистрации №192781371 выдано 28.02.2017 года Минским городским исполнительным комитетом
    УНП 192781371
    Регистрация в Торговом реестре Интернет-магазина сhipdip.by №431036 от 05.11.2018
    Способы оплаты: банковский перевод, карты Visa, MasterCard, Белкарт, наличными при самовывозе

    Телефон: +375 17 311-07-17
    Электронная почта: sales@chipdip.by
    Время работы пункта выдачи заказов: Пн-Пт 10:00–18:00
    Время работы торгового зала: Пн-Пт 9:00–20:00, Сб-Вс 10:00–18:00
    Доставка осуществляется: Пн–Пт 10:00–20:00

    В чем разница между ПЛИС и микроконтроллером?

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

    Микроконтроллер — это процессор + память + внешние интерфейсы. Выполняет последовательность комманд. Из-за этого он более медленный, но логика работы может быть гораздо более сложной.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    Ответы на вопрос 3

    Zoominger

    System Integrator

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

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 2 Комментировать

    NeiroNx

    Программист

    ПЛИС — это машина собранная на заводе.
    МК — это машина собранная самостоятельно из металлопроката с помощью сварки(asm) и болтов(c++).

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    не буду отвечать из-за модератора

    Если ты знаком с Функциональным Программированием, то на ПЛИС (FPGA) надо набрать сложную функцию из набора простых (напр., на языке HDL).
    Микроконтроллер это обычный микропроцессор, только с дополнительными интерфейсами (напр., I2C, SPI). Пишут программы чаще всего на С.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    программирование

    • Программирование
    • +2 ещё

    Можете объяснить код на STM32?

    • 1 подписчик
    • 25 февр.
    • 187 просмотров

    С чем ассоциируется цифровая электроника? В первую очередь с логическими элементами И, ИЛИ, НЕ. Далее в память приходят сдвиговые регистры, дешифраторы, мультиплексоры и прочее. Однако, по мере роста сложности электронных устройств и тенденции к миниатюризации, создание приборов на базе интегральных микросхем (ИМС) из вышеперечисленных компонентов затруднилось, заказные ИМС нужной топологии и схемотехники оправдывали себя только при крупном тиражировании устройства, в остальных случаях — это было неоправданно дорого.

    Выходом из сложившейся ситуации стало развитие программируемых интегральных логических схем (сокращенно — ПЛИС, зарубежная аббревиатура — programmable logic device, PLD). Что это такое и где используется мы расскажем в этой статье.

    Отличия от микроконтроллеров

    При слове «программируемый» у большинства новичков происходит ассоциация с микроконтроллерами. Не смотря на то что их также программируют, ПЛИС — это совершенно другое устройство.

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

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

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

    Обобщённо внутреннее устройство ПЛИС можно разделить на три основных группы:

    1. Массив из логических элементов (макроячеек, логических блоков).

    2. Блоки входа-выхода (IO).

    3. Линии связи между ними и устройство, которое управляет этими связями.

    Однако такое структурирование очень обобщено, немного подробнее мы рассмотрим этот вопрос ниже.

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

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

    Выбор микроконтроллеров происходит на основе множества критериев, таких как:

    • Быстродействие и тактовая частота;
    • Объем ПЗУ и ОЗУ;
    • Количество входов и выходов.

    Другие функциональные особенности и периферии, типа поддержки линий связи и протоколов (I2C, one-wire, PWM-сигнал и прочее).

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

    В зависимости от конкретного ПЛИС количество блоков может изменяться в широких пределах, соответственно изменяется и стоимость.

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

    Виды

    Актуальными на сегодняшний день являются два основных вида ПЛИС:

    1. CPLD (Complex Programmable Logic Device — Программируемая Логическая Интегральная Микросхема, собственно это и есть ПЛИС в её классическом понимании). В ней обычно есть встроенная энергонезависимая памятью, в которую загружается прошивка.

    Внутренняя структура строится на матрице макроячеек или логических блоков, а количество элементов в них лежит в пределах сотен и тысяч штук. Благодаря относительной простоте стоят дешевле чем следующий вид программируемой логики. Всё это приводит к тому, что используется CPLD в основном в схемах, где нужна высокая скорость и большое число выводов, при этом выполняют несложные задачи.

    2. FPGA (Field-Programmable Gate Array — Программируемая Пользователем Вентильная Матрица, однако её часто относят к ПЛИС) — более развитые и сложные устройства по сравнению с CPLD, строятся на логических блоках с гибкой коммутаций и содержат большее число элементов (десятки или сотни тысяч штук).

    Прошивка, как правило, хранится во внешней энергонезависимой памяти. Кроме простейших логических элементов в FPGA могут содержаться готовые блоки для выполнения каких-либо операций, например, блоки обработки сигнала DSP. Всё это позволяет реализовать процессор, устройства обработки сигналов и другие сложные устройства.

    Интересно:

    Хотя фактически наличие энергонезависимой памяти не делает программируемую логику CPLD. Это частично заблуждение. Главным отличием CPLD от FPGA является внутренняя структура.

    Подробнее внутреннее устройство CPLD изображено на рисунке ниже.

    А примерная схема её макроячейки выглядит таким образом:

    Макроячейка состоит из программируемых мультиплексоров, триггеров (одного или нескольких) и формирует группу выходных сигналов ФБ в нескольких их вариантах.

    Ниже приведен еще один пример – блок-схема CPLD микросхемы семейства MAX II фирмы Altera.

    И структурный план микросхем этого же семейства.

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

    Внешние выводы микросхемы соединяются с выходами макроячеек через еще один блок (матрицу) – ORP (Output Routing Pool), обратите внимание, что через неё же происходит соединение ВХОДНОЙ логики с GRP, что изображено на иллюстрации ниже.

    Примечание:

    В некоторых CPLD есть т.н. прямые входы (Direct Input) – они соединены со входами ячеек напрямую, что уменьшает задержки.

    У FPGA структура имеет вид:

    • L – логический конфигурируемый блок;
    • S (substitution block) – блок подстановок, он получает на ход определенное число бит, преобразует, по определенному алгоритму, а на выходе выдаёт другое число бит. Другими словами – дешифратор, шифратор и коммутатор.
    • C (connection block) – блок соединений.

    Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

    Программирование

    HDL (Hardware Description Language, рус. Язык описания аппаратуры) — так называется язык с помощью которого программируются ПЛИС. Популярными и универсальными являются Verilog HDL и VHDL. Существуют и другие языки, например, присущие конкретным производителям, как AHDL для изделий компании ALTERA.

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

    Подборка полезных статей про микроконтроллеры:

    Примеры популярных производителей и серий ПЛИС

    На момент написания статьи наиболее известными являются изделия двух производителей.

    • Altera (основана в 1983 году);
    • Xilinx (Основана в 1984 году).

    У Altera есть несколько основных серий программируемой логики:

    • MAX, MAX II, MAX IIZ;
    • 7000S;
    • 3000A;
    • MAX V;
    • Cyclone;
    • Arria;
    • Stratix.

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

    CPLD фирмы Altera 3 CPLD:

    • MAX — это CPLD для использования в мобильных устройствах, отличительными чертами является относительно малое энергопотребление и тепловыделение. В зависимости от сложности и годов выпуска различают следующие модификации:
    • 7000S на сегодняшний день устарела, она выпущена в 1995 году.
    • 3000A — выпущена в 2002 году, производится по 300нм технологии. Состоит из небольшого числа макроячеек (32-512)
    • MAX II выпущена в 2004 году, производится по 100нм технологии, состоит из большего числа блоков (240-2210), работающих на частоте до 304МГц. Изделие выполняется в корпусах типа TQFP 0.5 mill со 100 и более ножек.
    • MAX IIZ — 2007 года, основной особенностью является пониженное энергопотребление — это положительный момент, однако и частоты понижены до 152МГц. Питание данных микросхем осуществляется от 1.8 В.
    • MAX V — 2010 год. Производится по технологии 180нм, может содержать от 40 до 2210 блоков и работать на частотах до 152МГц или на 304МГц — это зависит от количества блоков.

    • Cyclone — это уже бюджетные микросхемы типа FPGA. Различаются пять поколений, которые маркируются греческими цифрами (от I до V соответственно). Первое поколение выпущено в 2002 году, производилось по 180нм технологии, а пятое поколение вышло в 2011 году и производится по 28нм технологии. Стоит отметить что все поколения остаются актуальными.
    • Arria — также относятся к FPGA среднего уровня.
    • Stratix — мощные FPGA.

    Ниже приведены сводные таблицы по программируемой логике FPGA от компании Altera.

    У производителя Xilinx CPLD представлены сериями:

    • XC9500XL из 36-288 макроячейках. Работают на частотах до 178МГц, а модели на 288 макроячеек на 208МГц. Выполняется как в небольших корпусах с 44 пинами (выводами) на расстоянии 0.8 мм друг от друга — такие корпуса считаются легкопаяемыми. Также бывают и с 64 и со 100 ножках с шагом в 0.5 мм, а также моделями в корпусах типа PLCC.
    • Серия CoolRunner-II — это энергоэффективные, но производительные CPLD. Особенностью является питание от напряжения в 1.8В, входы-выходы рассчитаны на работу в диапазоне 1.5-3.3В. Состоят из 32-512 макроячеек и производятся по 180нм технологии. В зависимости от количества ячеек работают в диапазоне частот 179-323МГц, при этом чем меньше ячеек — тем с большей частотой они могут работать в этом случае. Встречаются в разных корпусах, в том числе легкопаяемых, как в микросхемах рассмотренной выше серии.

    Компания Xilinx не обошла стороной и FPGA:

    • Spartan-6 — состоят из 6-входовых логических блоков, их количество лежит в пределах 3840-147443 штуки. Интересны тем что могут содержать контроллеры для обмена данными типа DDR2, DDR3, PCI-EXPRESS, Ethernet 1Gbit, SerialATA etc.
    • Серия Vitrex-7 отличается сложностью, микросхемы могут содержать до 2 000 000 логических блоков и 1200 контактов.

    Ниже вы можете ознакомиться со сводными таблицами с характеристиками CPLD и FPGA от Xilinx 6 и 7 серии, а также Zynq-7000.

    Заключение

    ПЛИС и ППВМ производится и другими компаниями такими как Lattice Semiconductor (в 2002 году начала производить FPGA), Actel и небезызвестный читателям нашего сайта своими микроконтроллерами ATMEL и многие другие. На программируемой логике можно реализовать ряд устройств, в одном устройстве реализовать параллельные независимые друг от друга вычисления, однако для домашних проектов часто их покупка является финансово неоправданной, но при этом довольно разумна в производственных масштабах, как альтернатива заказным интегральным схемам.

    Сделаем простой AVR микроконтроллер

    Меня часто спрашивают: «Чем отличается микроконтроллер от ПЛИС?» Ну что тут можно ответить? Это как бы разные вещи. Микропроцессор последовательно выполняет команды, описанные в его программе. Работа ПЛИС в конечном счете определяется принципиальной электрической схемой, реализованной внутри чипа. Архитектура микроконтроллера, то есть тип процессора, количество портов ввода вывода, интерфейсы, определяется производителем. Микросхема микроконтроллера изготовлена на заводе и изменить ее нельзя. Можно только написать программу, которую он будет исполнять. ПЛИС — это свобода для творчества. Архитектура реализуемого устройства может быть почти любая, лишь бы поместилась вся логика в чип. В ПЛИС можно, например, попробовать реализовать даже и микроконтроллер! Попробуем?

    Один из самых распространенных микроконтроллеров — это 8-ми разрядные RISС процессоры семейства AVR компании Atmel. В этой статье я расскажу как реализовать «почти» совместимый с AVR микроконтроллер внутри нашей ПЛИС на плате Марсоход.

    Прежде, чем начинать делать свою реализацию микроконтроллера, конечно, следует изучить внутренности контроллера AVR. Нужно как минимум знать систему команд микропроцессора AVR. На нашем сайте можно скачать его описание:

    Система команд микроконтроллера AVR ( 703303 bytes )

    Мы не будем ставить себе целью полностью повторить поведение чипа Atmel, мы хотим сделать наш микропроцессор лишь частично совместимым. Полностью повторить можно, но нужна ПЛИС гораздо большего объема. У нас на плате Марсоход стоит CPLD EPM240T100C5, значит у нас есть всего-навсего 240 триггеров и логических элементов.

    Кроме триггеров и логики в нашей ПЛИС имеется последовательная флеш память UFM объемом 512 слов по 16 бит. В этой флеш памяти мы будем хранить программу микроконтроллера. Удобно, что слова, хранимые во флеш, имеют разрядность 16. Все команды процессора AVR также шестнадцатиразрядные. Кое-что про UFM мы уже писали на нашем сайте. У нас был проект для ПЛИС платы Марсоход, который выполнял чтение из UFM памяти.

    «Оперативной памяти» в нашей ПЛИС нет. Ну значит не будет памяти у нашего микроконтроллера, жаль но это нас не остановит.

    У микроконтроллера AVR имеется 32 восьмиразрядных регистра общего назначения. Нижняя группа регистров r0-r15 может быть использована только в командах с операндами-регистрами. Верхняя группа регистров r16-r31 может использоваться в командах и с непосредственными операндами. Поскольку места внутри нашего чипа на плате Марсоход действительно не много, нам придется реализовать только некоторые регистры. Это довольно существенное ограничение, и его нужно будет учитывать при написании программ для нашего микроконтроллера.

    Мы реализуем только 7 регистров: r16-r22:

    • Первые 4 регистра r16. r19 — это просто регистры.
    • Регистр r20 — это тоже обычный регистр, только его биты мы подключим к 8-ми светодиодам платы Марсоход.
    • Регистр r21 — это тоже обычный регистр, но его биты мы подключим к выводам управления шаговых двигателей на плате Марсоход.
    • Регистр r22 — только для чтения. К нему подключены входы от 4-х кнопочек платы Марсоход.

    Схема нашего микроконтроллера создана в среде Altera QuartusII и выглядит вот так (нажмите на картинку, чтобы увеличить):

    схема ядра микроконтроллера AVR для платы Марсоход

    Наш микроконтроллер работает по простому алгоритму:

    1. Считывает из флеш памяти UFM очередную команду.
    2. Декодирует команду и выбирает для нее нужные операнды из регистров или непосредственно из кода команды.
    3. Выполняет команду в арифметико-логическом устройстве.
    4. Запоминает результат исполнения команды в регистре приемнике, определяемом командой.
    5. Переходит к исполнению следующей команды.

    У нас сейчас нет цели сделать высокопроизводительный микроконтроллер, мы не будем делать конвейерную обработку данных. Это объясняется тем, что команды из флеш памяти чипа мы можем считывать только в последовательном формате, то есть на чтение одной команды нужно как минимум 16 тактов. Быстрее здесь сделать нельзя (да нам и не нужно сейчас).

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

    Перечислим команды микроконтроллера AVR, которые мы собираемся реализовать:

    ADD 0000 11rd dddd rrrr
    SUB 0001 10rd dddd rrrr

    AND 0010 00rd dddd rrrr
    EOR 0010 01rd dddd rrrr
    OR 0010 10rd dddd rrrr
    MOV 0010 11rd dddd rrrr

    CP 0001 01rd dddd rrrr
    LSR 1001 010d dddd 0110

    SUBI 0101 KKKK dddd KKKK
    ANDI 0111 KKKK dddd KKKK
    ORI 0110 KKKK dddd KKKK
    CPI 0011 KKKK dddd KKKK
    LDI 1110 KKKK dddd KKKK

    BREQ 1111 00kk kkkk k001
    BRNE 1111 01kk kkkk k001
    BRCS 1111 00kk kkkk k000
    BRCC 1111 01kk kkkk k000

    Слева написаны названия команд, а справа — их бинарное представление (кодирование). Так буква «r» обозначает регистр источник, буква «d» — регистр приемник, «K» — это непосредственно операнд.

    Конечно — это только малая часть от «настоящей системы команд», но уже и эти команды позволять писать вполне работающие программы.
    У нас будет упрощенное АЛУ (Арифметико-Логическое Устройство). Оно реализует только некоторые, наиболее употребительные команды, а так же всего 2 флага для условных переходов: «Z» и «C».

    Флаг «Z» устанавливается, если результат АЛУ это ноль. Если результат из АЛУ не нулевой, то флаг «Z» сбрасывается. Флаг «C» устанавливается при возникновении переноса в арифметических операциях ADD и SUB/SUBI или сравнения CP/CPI. Флаги влияют на исполнение команд условных переходов: флаг «Z» влияет на BREQ, BRNE, а флаг «C» влияет на BRCS, BRCC.

    Вообще всеь проект мы уже реализовали и его можно взять здесь:

    Ядро микропроцессора Atmel AVR ( 109584 bytes )

    .
    Исходный текст нашего ядра AVR написан на языке Verilog и его можно посмотреть здесь.

    Теперь посмотрим, как мы сможем написать программу для нашего микроконтроллера? Для написания программы на языке ассемблер воспользуемся средой разработки компании Atmel AVRStudio4. Эту среду разработки можно скачать прямо с сайта компании Атмел (после регистрации), вот здесь. Или поищите в яндексе — наверняка найдете в свободном доступе.

    avrstudio

    Создаем проект в AVRStudio4 и пишем простую программу. Программа будет моргать светодиодом на плате Марсоход и опрашивать состояние нажатых кнопочек. Если нажать одну кнопочку, то моргающий светодиод «побежит» в одну сторону, а если нажать другую кнопочку, то светодиод «побежит» в другую сторону. Вот исходный текст на ассемблере для нашего примера:

    .include «1200def.inc»
    .device AT90S1200

    ;initial one bit in register
    ldi r16,$80

    ;read port (key status)
    mov r17,r22
    cpi r17,$0f
    ;go and blink one LED if no key pressed
    breq do_xor

    cpi r17,$0e
    ;go and right shift LEDs if key[0] pressed
    breq do_rshift

    cpi r17,$0d
    ;go and left shift LEDs if key[1] pressed
    breq do_lshift

    ;jump to read keys
    or r16,r16
    brne rd_port

    do_rshift:
    cpi r16,1
    breq set80
    lsr r16
    mov r20,r16
    brne pause
    set80:
    ldi r16,$80
    mov r20,r16
    or r16,r16
    brne pause

    do_lshift:
    cpi r16,$80
    breq set1
    lsl r16
    mov r20,r16
    brne pause
    set1:
    ldi r16,$01
    mov r20,r16
    or r16,r16
    brne pause

    do_xor:
    eor r20,r16

    pause:
    ldi r18,$10
    cycle2:
    ldi r19,$FF
    cycle1:
    or r19,r19
    or r19,r19
    subi r19,1
    brne cycle1
    subi r18,1
    brne cycle2

    or r16,r16
    brne rd_port

    Видите? Чтение состояния кнопочек — это чтение из регистра r22. Изменение состояния светодиодов — это запись в регистр r20.
    Настройте AVRStudio так, что бы выходной формат был «Generic». Это в свойствах проекта, «Assembler Options», настройка «Hex Output Format».
    После компиляции программы получается вот такой текстовый файл с кодами программы:

    Этот файл нам почти подходит для QuartusII. В нашем проекте для ПЛИС есть файл avr_prog.mif (Memory Initialization File), куда мы и вставляем полученный из AVRStudio код (только нужно добавить точку с запятой в конце каждой строки). Таким образом, после компиляции QuartusII эти коды попадут во флеш UFM нашей ПЛИС.

    Теперь можно компилировать и пробовать наш проект в плате Марсоход. Вот видеоролик, демонстрирующий работоспособность нашего процессора:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *