Проектирование КИХ-фильтров на распределенной арифметике в САПР ПЛИС XILINX ISE DESIGN SUITE

PDF версия
В данном материале предлагается рассмотреть вопрос проектирования КИХ-фильтров на распределенной арифметике с помощью генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0. Преимущество использования распределенной арифметики заключается в том, что с ростом числа отводов производительность КИХ-фильтра остается постоянной за счет применения «безумножительных» схем умножения, при этом обеспечивается повышенное быстродействие и экономия от применения встроенных ЦОС-блоков, а недостатком становится повышенный расход логических ресурсов ПЛИС.

В предыдущей работе [1] рассматривались особенности проектирования систолических КИХ-фильтров в базисе ПЛИС Spartan‑6 XC6SLX4 с использованием генератора параметризированных ядер XLogiCORE IP и функции FIR Compiler v6.3 САПР Xilinx ISE 14.2 [2, 3]. Был выбран тип фильтра Single-Rate FIR.

Кратко остановимся на основных результатах. На рис. 1 показан проект КИХ-фильтра на четыре отвода. Коэффициенты фильтра С0 = –2, С1 = –1, С2 = 7 и С3 = 6. Пример 1 демонстрирует тестбенч для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода. На рис. 2 отображено моделирование прохождения сигнала по структуре КИХ-фильтра. На вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 11 тактов синхрочастоты. Для размещения проекта в базис ПЛИС XC6SLX4 требуется 48 триггеров, тактируемых фронтом синхросигнала из общих логических ресурсов ПЛИС, и один ЦОС-блок DSP48A1 (всего доступно 8 ЦОС-блоков), при этом максимальная частота составила 348 МГц.

Проект КИХ-фильтра на четыре отвода в САПР ПЛИС Xilinx ISE 14.2 с использованием генератора параметризированных ядер XLogiCORE IP FIR Compiler v6.3

Рис. 1. Проект КИХ-фильтра на четыре отвода в САПР ПЛИС Xilinx ISE 14.2 с использованием генератора параметризированных ядер XLogiCORE IP FIR Compiler v6.3

Моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода (на вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 11 тактов синхрочастоты)

Рис. 2. Моделирование прохождения сигнала по структуре КИХ-фильтра на четыре отвода (на вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 11 тактов синхрочастоты)

Сигнал, подвергающийся фильтрации, подается на вход Date (7:0). Высокий уровень сигнала s_data_tvalid разрешает работу фильтра. Стробирование результатов фильтрации осуществляется выходным сигналом m_axis_data_tvalid, то есть появление единичного импульса свидетельствует о готовности результата фильтрации сигнала на выходе m_axis_data_tdata(7:0), который остается неизменным вплоть до появления следующего стробирующего импульса. Расстояние между стробами — четыре такта синхрочастоты (результат фильтрации держится пять тактов синхрочастоты). Пример 1 демонстрирует специальную моделирующую программу на языке VHDL (испытательный стенд) для функционального моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY new_test_bench IS
END new_test_bench;
ARCHITECTURE behavior OF new_test_bench IS
    -- Component Declaration for the Unit Under Test (UUT)
    COMPONENT fir_compiler_v6_3
    PORT(
    aclk : IN std_logic;
    s_axis_data_tvalid : IN std_logic;
    s_axis_data_tready : OUT std_logic;
    s_axis_data_tdata : IN std_logic_vector(7 downto 0);
    m_axis_data_tvalid : OUT std_logic;
    m_axis_data_tdata : OUT std_logic_vector(7 downto 0)
    );
    END COMPONENT;
    --Inputs
    signal aclk : std_logic := ‘0’;
    signal s_axis_data_tvalid : std_logic := ‘1’;
    signal s_axis_data_tdata : std_logic_vector(7 downto 0) := (others => ‘0’);
        --Outputs
    signal s_axis_data_tready : std_logic;
    signal m_axis_data_tvalid : std_logic;
    signal m_axis_data_tdata : std_logic_vector(7 downto 0);
    -- Clock period definitions
    constant aclk_period : time := 20 ns;
BEGIN
        -- Instantiate the Unit Under Test (UUT)
    uut: fir_compiler_v6_3 PORT MAP (
    aclk => aclk,
    s_axis_data_tvalid => s_axis_data_tvalid,
    s_axis_data_tready => s_axis_data_tready,
    s_axis_data_tdata => s_axis_data_tdata,
    m_axis_data_tvalid => m_axis_data_tvalid,
    m_axis_data_tdata => m_axis_data_tdata
    );
    -- Clock process definitions
    aclk_process :process
    begin
        aclk <= ‘0’;
        wait for aclk_period/2;
        aclk <= ‘1’;
        wait for aclk_period/2;
    end process;
tb : process
        begin
           wait for 20 ns;
           s_axis_data_tdata <= “11111011”;
           wait for 20 ns;

           s_axis_data_tdata <= “00000011”;
           wait for 20 ns;
           s_axis_data_tdata <= “00000001”;
           wait for 20 ns;
           s_axis_data_tdata <= “00000000”;
        wait;      
    END process;
END;

Пример 1. Испытательный стенд для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода, разработанной с помощью генератора параметризированных ядер XLogiCORE IP FIR Compiler v6.3

Рассмотрим проектирование КИХ-фильтров на последовательной распределенной арифметике. Генератор параметризированных ядер XLogiCORE IP FIR Compiler v5.0 предлагает на выбор три структуры фильтра: прямую форму систолического фильтра, в котором операции умножения и сложения выполняются параллельно с конвейеризацией; обратную и на распределенной арифметике. Функция FIR Compiler v5.0 не поддерживает современный протокол AXI4‑Stream. На рис. 3 показана структурная схема КИХ-фильтра на четыре отвода с использованием последовательной распределенной арифметики, применение которой позволяет сократить четыре умножителя на константу и многоразрядное дерево сумматоров [4]. На практике для реализации адресуемых массивов комбинаций весовых коэффициентов фильтра используют таблицы перекодировок (LUT) ПЛИС. Более подробную информацию по распределенной арифметике можно найти в предыдущих работах [5, 6, 7].

Структуры КИХ-фильтров

Рис. 3. Структуры КИХ-фильтров:
а) один МАС-фильтр;
б) последовательный КИХ-фильтр на четыре отвода;
в) упрощенное представление структуры КИХ-фильтра на четыре отвода с использованием последовательной распределенной арифметики

Выберем тип фильтра Single-Rate FIR и формат представления чисел с фиксированной запятой. В случае реализации КИХ-фильтра на распределенной арифметике генератор автоматически определяет тип арифметики: параллельная или последовательная [8]. Степень параллелизма зависит от соотношения частоты взятия входных отчетов (fs) и частоты тактирования системы (fclk). Чем выше fs по отношению к fclk, тем меньше латентность фильтра L (задержка появления профильтрованного сигнала, измеряется в тактах синхроимпульса).

Частота взятия входных отчетов fs = 50 МГц, частота тактирования системы fclk = 250 МГц. Коэффициенты фильтра такие же, разрядность представления коэффициентов — 8 бит. Предполагаем, что на вход фильтра поступают только целые значения, как со знаком, так и без, например –5, 3, 1, 0. Разрядность представления значений входного сигнала, подлежащего фильтрации (B), — 4 бит, профильтрованного сигнала — 14 бит (рис. 4). Под дробную часть числа в обоих случаях отводим 0 бит (Input Data Fractional Bits и Output Fractional Bits).

Опции генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0 (выбирается структура фильтра на распределенной арифметике. Коэффициенты фильтра несимметричные, со знаком, целые, представляются с 8 битной точностью. Входные значения — целые со знаком, представляются с 4 битной точностью. Выходные значения представляются с 14 битной точностью)

Рис. 4. Опции генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0 (выбирается структура фильтра на распределенной арифметике. Коэффициенты фильтра несимметричные, со знаком, целые, представляются с 8 битной точностью. Входные значения — целые со знаком, представляются с 4 битной точностью. Выходные значения представляются с 14 битной точностью)

Для размещения проекта в базис ПЛИС XC6SLX4 требуется 57 триггеров, тактируемых фронтом синхросигнала из общих логических ресурсов ПЛИС LUT — 41, из них 30 используются как логические ресурсы, 8 LUT для реализации сдвигового регистра, при этом максимальная частота составила 439 МГц.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY fir4_test_5 IS
END fir4_test_5;
ARCHITECTURE behavior OF fir4_test_5 IS 
    -- Component Declaration for the Unit Under Test (UUT)
    COMPONENT fir_compiler_v5_0
    PORT(
    clk : IN std_logic;
    nd : IN std_logic;
    rfd : OUT std_logic;
    rdy : OUT std_logic;
    din : IN std_logic_vector(3 downto 0);
    dout : OUT std_logic_vector(13 downto 0)
    );
    END COMPONENT;
    --Inputs
    signal clk : std_logic := ‘0’;
    signal nd : std_logic := ‘0’;
    signal din : std_logic_vector(3 downto 0) := (others => ‘0’);
    --Outputs
    signal rfd : std_logic;
    signal rdy : std_logic;
    signal dout : std_logic_vector(13 downto 0);
    -- Clock period definitions
    constant clk_period : time := 20 ns;
BEGIN
    -- Instantiate the Unit Under Test (UUT)
    uut: fir_compiler_v5_0 PORT MAP (
    clk => clk,
    nd => nd,
    rfd => rfd,
    rdy => rdy,
    din => din,
    dout => dout
    );
    -- Clock process definitions
    clk_process :process
    begin
        clk <= ‘0’;
        wait for clk_period/2;
        clk <= ‘1’;
        wait for clk_period/2;
    end process;
    -- Stimulus process
    stim_proc: process
    begin        
    -- hold reset state for 100 ns.
    wait for 100 ns;                
    wait for clk_period*10;
    -- insert stimulus here 
    wait;
    end process;
tb : process
        begin
           wait for 20 ns;
           nd<= ‘1’;
           din <= “1011”;
           wait for 20 ns;
           nd<= ‘0’;                   
           din <= “0000”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           nd<= ‘1’;                   
           din <= “0011”;
           wait for 20 ns;
           nd<= ‘0’;                   
           din <= “0000”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           nd<= ‘1’;                   
           din <= “0001”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           din <= “0000”;
           wait for 20 ns;
           nd<= ‘1’;                   
           din <= “0000”;
        wait;                             
END process;
END;

Пример 2. Испытательный стенд для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода

На рис. 5 представлен отчет о характеристиках спроектированного КИХ-фильтра на четыре отвода. Частота тактирования ядра фильтра установлена в 250 МГц, а входная частота дискретизации — 50 МГц. Разрядность входной шины данных — 4 бит. Структура коэффициентов фильтра — несимметричная, разрядность представления коэффициентов — 8 бит. Задана полная точность вычисления выходных значений профильтрованного сигнала. Латентность фильтра 8 тактов синхрочастоты.

Отчет о характеристиках КИХ-фильтра на четыре отвода

Рис. 5. Отчет о характеристиках КИХ-фильтра на четыре отвода

На рис. 6 представлен проект КИХ-фильтра на четыре отвода в САПР ПЛИС Xilinx ISE 14.2 с использованием генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0. Испытательный стенд для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода показывает пример 2. Моделирование прохождения сигнала по структуре КИХ-фильтра демонстрирует рис. 7. На вход фильтра подаются значения –5, 3, 1.

Проект КИХ-фильтра на четыре отвода в САПР ПЛИС Xilinx ISE 14.2 с использованием генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0

Рис. 6. Проект КИХ-фильтра на четыре отвода в САПР ПЛИС Xilinx ISE 14.2 с использованием генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0

Моделирование прохождения сигнала по структуре КИХ-фильтра на последовательной распределенной арифметике (на вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 8 тактов синхрочастоты)

Рис. 7. Моделирование прохождения сигнала по структуре КИХ-фильтра на последовательной распределенной арифметике (на вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 8 тактов синхрочастоты)

Разрешение на прием фильтром новых значений определяется высоким уровнем сигнала nd. Готовность фильтром прочитать новую порцию информации определяется выходными стробирующими импульсами сигнала rfd. Результат фильтрации определяется выходными стробирующими импульсами сигнала rdy. Сравнивая результаты фильтрации сигнала на рис. 2 и рис. 7, убеждаемся в их идентичности (смена профильтрованных значений на выходе фильтра осуществляется через 4 такта синхрочастоты) за исключением времени появления отклика фильтра (латентности). Систолический КИХ-фильтр на четыре отвода имеет латентность 11, а фильтр на последовательной распределенной арифметике без использования встроенных умножителей в ПЛИС — 8 тактов синхрочастоты.

Рассмотрим случай с параллельной распределенной арифметикой. Частота взятия входных отчетов fs = 250 МГц и частота тактирования системы fclk = 300 МГц. Функция FIR Compiler v5.0, исходя из соотношения частот, автоматически определила латентность фильтра 5 тактов синхрочастоты. Для размещения проекта в базис ПЛИС XC6SLX4 требуется уже 111 триггеров, тактируемых фронтом синхросигнала из общих логических ресурсов ПЛИС, LUT — 88, из них 74 используются как логические ресурсы, 1 LUT функционирует как блок памяти и 1 LUT как сдвиговый регистр, при этом максимальная частота составила 438 МГц. Рис. 8 показывает моделирование прохождения сигнала по структуре КИХ-фильтра. На вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра составила 5 тактов синхрочастоты.

Моделирование прохождения сигнала по структуре КИХ-фильтра на параллельной распределенной арифметике. На вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 5 тактов синхрочастоты

Рис. 8. Моделирование прохождения сигнала по структуре КИХ-фильтра на параллельной распределенной арифметике. На вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 5 тактов синхрочастоты

В таблице 1 приведен анализ задействованных ресурсов ПЛИС XC6SLX4 при реализации КИХ-фильтров на 4 отвода с использованием функции FIR Compiler v6.3 и FIR Compiler v5.0 САПР Xilinx ISE 14.2. Из анализа таблицы 1 следует, что наиболее быстродействующими являются фильтры на распределенной арифметике.

Таблица 1. Анализ задействованных ресурсов ПЛИС XC6SLX4 при реализации КИХ-фильтров на четыре отвода с использованием функции FIR Compiler v6.3 и FIR Compiler v5.0 САПР Xilinx ISE 14.2

Ресурсы ПЛИС

Систолический

Распределенная арифметика

Последовательная

Параллельная

Триггеры логических блоков в секциях

48

57

111

Количество секций с LUT

33

41

88

LUT для выполнения комбинационных функций

22

30

74

LUT как блоки памяти

11

8

1

LUT как сдвиговые регистры

11

8

1

Кол-во ЦОС-блоков DSP48A1

1

Латентность фильтра

11

8

5

Рабочая частота, МГц

348

439

438

На рис. 9, 10 показаны временные диаграммы работы КИХ-фильтра на четыре отвода, реализованного в базисе ПЛИС серии Stratix III EP3SL50F484C2 (содержит 27 встроенных ЦОС-блоков) с использованием последовательной и параллельной распределенной арифметики на мегафункции FIR Compiler САПР Altera Quartus II версии 9.0. На рисунках обозначено: x — входной сигнал, подлежащий фильтрации; y — профильтрованный сигнал. Если сравнить результаты фильтрации, в частности для КИХ-фильтра на параллельной распределенной арифметике, сигнал y ПЛИС Altera Stratix III (стробирующий сигнал source_valid) на рис. 10 и сигнал dout ПЛИС Xilinx XC6SLX4 (стробирующий сигнал rdy) на рис. 8, то видно, что фильтры формируют выходной результат идентично. Отличия заключаются в настройках интерфейса. На рис. 10 также показана импульсная характеристика фильтра.

Временные диаграммы работы КИХ-фильтра с использованием последовательной распределенной арифметики на мегафункции FIR Compiler САПР ПЛИС Altera Quartus II

Рис. 9. Временные диаграммы работы КИХ-фильтра с использованием последовательной распределенной арифметики на мегафункции FIR Compiler САПР ПЛИС Altera Quartus II

Временные диаграммы работы КИХ-фильтра с использованием параллельной распределенной арифметики на мегафункции FIR Compiler САПР ПЛИС Altera Quartus II

Рис. 10. Временные диаграммы работы КИХ-фильтра с использованием параллельной распределенной арифметики на мегафункции FIR Compiler САПР ПЛИС Altera Quartus II

Анализ задействованных ресурсов ПЛИС серии Stratix III фирмы Altera при реализации КИХ-фильтров на четыре отвода с применением мегафункции FIR Compiler показан в таблице 2 (в меню Assignments/Device/Target device используется опция Auto device selected by the Fitter). Мегафункция настроена следующим образом: тип структуры — Single-Rate FIR; разрядность входной шины данных — 4 бит; коэффициенты не масштабируются; результат фильтрации представляется с точностью 9 бит. Для хранения коэффициентов фильтра и отсчетов используются логические ячейки адаптивных логических модулей. КИХ-фильтр на мегафункции FIR Compiler работает по протоколу Avalon Streaming (Avalon-ST).

Таблица 2. Анализ задействованных ресурсов ПЛИС серии Stratix III EP3SL50F484C2 фирмы Altera при реализации КИХ-фильтров на четыре отвода с использованием мегафункции FIR Compiler САПР ПЛИС Altera Quartus II

Ресурсы ПЛИС cерии Stratix III

Последовательная
распределенная арифметика

Параллельная
распределенная арифметика

АЛМ (ALMs)

78

79

Количество АЛМ для выполнения комбинационных функций (Combinational ALUTs)

74

87

Количество выделенных регистров (Dedicated logic Registers)

136

134

Аппаратные перемножители (DSP 18×18)

Рабочая частота в наихудшем случае для модели slow 1100 мВ 85 C, МГц

400

400

Примечание. АЛМ — адаптивные логические модули.

Рассмотрим размещение КИХ-фильтра в ресурсы ПЛИС Xilinx XC6SLX4 (рис. 11). Во всех случаях установлена целевая задача проектирования — сбалансированная. Кристалл ПЛИС разбит на 8 тактовых регионов (доменов). КИХ-фильтр с использованием систолической структуры и ЦОС-блока занимает три тактовых региона, а фильтры на последовательной и параллельной арифметике — по два. Последовательная занимает меньшее число ресурсов ПЛИС, но они более широко разбросаны по кристаллу, что может увеличивать задержки в трассировочных ресурсах, а параллельная при более значительном потреблении ресурсов больше локализована. Области локализации для систолического фильтра (рис. 11а) и фильтров с использованием распределенной арифметики (рис. 11б, рис. 11в) показаны красными овалами. На рис. 12 изображено размещение КИХ-фильтра в ресурсы ПЛИС Altera серии Stratix III EP3SL50F484C2.

Размещение КИХ-фильтра на четыре отвода в ресурсы ПЛИС XC6SLX4

Рис. 11. Размещение КИХ-фильтра на четыре отвода в ресурсы ПЛИС XC6SLX4:
а) систолическая структура с использованием ЦОС-блока;
б) последовательная арифметика;
в) параллельная арифметика

Размещение КИХ-фильтра на четыре отвода в ресурсы ПЛИС серии Stratix III EP3SL50F484C2

Рис. 12. Размещение КИХ-фильтра на четыре отвода в ресурсы ПЛИС серии Stratix III EP3SL50F484C2:
а) последовательная арифметика;
б) параллельная арифметика

 

Выводы

Анализ временных диаграмм на примере КИХ-фильтра на четыре отвода на последовательной и параллельной распределенной арифметике, разработанного с использованием функции FIR Compiler v5.0 САПР Xilinx ISE и мегафункции FIR Compiler САПР Altera Quartus II, показывает, что фильтры формируют выходные значения идентично и имеют примерно равное быстродействие для ПЛИС серии Spartan‑6 и Stratix III. В случае КИХ-фильтров на параллельной арифметике выходной сигнал (профильтрованные значения) формируется через каждый синхроимпульс, а для фильтра на последовательной арифметике с несимметричной — через B и через B+1 для фильтра с симметричной импульсной характеристикой, то есть в нашем случае через 4 такта синхроимпульса.

Отказ от использования в функции FIR Compiler v6.3 структур фильтров на распределенной арифметике говорит о том, что в настоящее время наблюдается ориентация на массовое применение ЦОС-блоков в ПЛИС, однако ведущие разработчики САПР Xilinx и Altera сохранили возможность использования распределенной арифметики из-за ряда преимуществ. Например, структуры КИХ-фильтров на основе распределенной арифметики обладают рекордным быстродействием, которое не снижается с ростом числа отводов. Такие решения особенно эффективны в низкобюджетных сериях ПЛИС, где существует недостаточное число встроенных аппаратных ЦОС-блоков. Фильтрам на распределенной арифметике присущи такие недостатки, как меньшая точность представления коэффициентов и входных отсчетов, в частности, КИХ-фильтры на систолических структурах для ПЛИС серий Virtex‑5/6 позволяют иметь максимальную точность представления коэффициентов 49 бит против 32 бит и их нельзя перегрузить в режиме онлайн. Распределенная арифметика не позволяет также реализовать полифазный банк фильтров и параллельную потоковую обработку информации.

Литература
  1. Строгонов А., Цыбин С., Городков П. Проектирование КИХ-фильтров в САПР ПЛИС Xilinx ISE Design Suite // Компоненты и технологии. 2014. № 11.
  2. Тарасов И. Возможности FPGA фирмы Xilinx для цифровой обработки сигналов // Компоненты и технологии. 2007. № 5.
  3. Тарасов И. Е., Певцов Е. Ф. Программируемые логические схемы и их применение в схемотехнических решениях: Учебное пособие/ФГБОУ ВПО «Московский государственный технический университет радиотехники, электроники и автоматики». М., 2012.
  4. Knapp S. Parallel processing in FPGAs rivals DSP speed. Personal Engineering. October 1998.
  5. Строгонов А., Быстрицкий А. КИХ-фильтр на распределенной арифметике: проектируем сами // Компоненты и технологии. 2013. № 3.
  6. Строгонов А., Быстрицкий А. Проектирование КИХ-фильтров с учетом архитектурных особенностей ПЛИС // Компоненты и технологии. 2014. № 8.
  7. Строгонов А. КИХ-фильтры на параллельной распределенной арифметике // Компоненты и технологии. 2013. № 5.
  8. xilinx.com. Product Specification. IP LogiCORE FIR Compiler v5.0. DS534 March 1, 2011.

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

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