ДонНТУ   Портал магістрів

Магістр ДонНТУ Лєнч Володимир Сергійович

Лєнч Володимир Сергійович

Факультет комп'ютерних наук та технологій

Кафедра комп'ютерної інженерії

Спеціальність Комп'ютерні системи та мережі

Розробка метода емуляції перефірійних пристроїв для віртуальної FPGA-лабораторії

Науковий керівник: к.т.н., доц. Зінченко Юрій Євгенович

Реферат

Зміст
Введение

Програмована логічна інтегральна схема (ПЛІС [14] [15], англ. Programmable logic device, PLD) – електронний компонент, який використовується для створення цифрових інтегральних схем. На відміну від звичайних цифрових мікросхем, логіка роботи ПЛІС не визначається при виготовленні, а задається за допомогою програмування (проектування). Для програмування використовуються програматор та IDE (середа відладки), що дозволяють задати бажану структуру цифрового пристрою у вигляді принципової електричної схеми або програми на спеціальних мовах опису апаратури: Verilog, VHDL та ін. [16] [17]

ПЛІС широко використовуються для побудови різних за складністю та можливостями цифрових пристроїв, наприклад, пристроїв з великою кількістю портів вводу-виводу, пристроїв, що виконують цифрову обробку сигналу, та передачу даних на високій швидкості тощо. [1]

ПЛІС є важливою темою для вивчення в сфері комп'ютерної інженерії. Але вартість обладнання створює велику перешкоду для отримання практичного досвіду студентами. Фінансування ВНЗ також не дозволяє придбати достатню кількість плат для налагодження, щоб студенти могли індивідуально виконувати свої проекти на практичних заняттях. Виходом з цього положення може служити створення віртуальної лабораторії з доступом через мережу Інтернет. Це дозволить студентам налагоджувати свої проекти незалежно від свого місця розташування і безперешкодно отримувати практичний досвід в проектуванні пристроїв на ПЛІС.

1. Ціли та задачі

Загальною метою магістерської роботи є створення віртуальної FPGA [18] [19] лабораторії з видаленим доступом через Інтернет. Організація видаленого доступу включає в себе завантаження прошивки проекту до ПЛІС мікросхеми, організація управління пристроями вводу стенду налагодження, візуалізація виводу результатів, організація розподіленого доступу до плати [20] [21].

Прошивка, що завантажується до плати, є розробленим проектом на VHDL або Verilog згенерованих в bit файл в спеціалізованому середовищі розробки (наприклад, ISE Design Studio). Завантаження прошивки буде відбуватися в наступній послідовності:

  1. користувач завантажує bit файл в свою робочу директорію;
  2. ініціює запуск завантаження прошивки до плати;
  3. файл завантажується в плату через JTAG інтерфейс.

Візуалізація вихідних даних планується за допомогою відеокамери, яка транслює в реальному часі зміну станів стенду налагодження. Крім цього, вихідні дані можна буде отримати через послідовний порт, підключений до сервера.

Основним завданням проекту і магістерської роботи в цілому є надання користувачам доступ до тестування периферійних пристроїв, підключених до плати. Так як фізично отримати доступ до периферійного устаткування через Інтернет у користувача можливості не буде, необхідно розробити метод емуляції цього обладнання таким чином, щоб, проект для емуляції обладнання мінімально відрізнявся від проекту з реальними пристроями. В першу чергу, планується розробити емулятори для комп'ютерної миші та клавіатури, що підключаються по протоколу PS/2.

Також при організації видаленого доступу до FPGA [22] [23] плати необхідно врахувати розподілений доступ, який полягає в розмежуванні прав доступу до стенду налагодження та організації черги роботи з ним. Це необхідно зробити тому що в плату можна завантажити тільки один проект. Тому потрібно організувати два типи доступу: глобальний і локальний. Глобальний тип доступу полягає у встановленні адміністратором особливих прав на доступ до плати, а локальний в організації черги роботи з платою, тобто робота з однією платою можлива тільки в рамках однієї сесії. Як тільки користувач завершує роботу з платою, він її звільняє, або система автоматично звільняє плату при тривалій не активності, і тоді наступний користувач може почати нову сесію [24] [25].

2. Актуальність і мотивація

На сьогоднішній день доступ в інтернет можна отримати практично з будь-якої точки земного шару, тому створення віртуальної лабораторії є актуальним завданням. Організація доступу до лабораторії через веб-сайт обумовлена тим, що браузери працюють практично однаково в усіх популярних операційних системах, як для стаціонарних систем, так і для мобільних.

Звіт про пошук по темі магістерської роботи показав, що проектів зі створенням віртуальних лабораторій з доступом до FPGA-комплексам одиниці, а таких, які включають в себе емуляцію периферійного обладнання ще менше. Одна з них – це робота магістра нашої спеціальності Беседи Д. Г., який працював над такою ж темою. На жаль, конкретних результатів отримати не вдалося, тому дана тема залишається актуальною. Його напрацювання і публікації на цю тему можна подивитися на його магістерській сторінці [2]. Приклади наукових робіт з розробки віртуальних FPGA лабораторій також можна знайти за посиланнями [3] [4] [5] [6].

3. Плановані практичні результати

Система видаленого керування платою структурно поділяється на три частини: клієнтську (веб-сайт), серверну та FPGA-комплекс (рисунок 1).

Структурна схема видаленої FPGA лабораторії
Рисунок 1 – Структурна схема видаленої FPGA лабораторії

Веб-сайт повинен складатися з сторінки авторизації, реєстрації та особистого кабінету користувача. У кожного користувача можуть бути права доступу:

Після реєстрації користувачеві привласнюється право доступу гість, адміністратор може в особистому кабінеті встановити йому необхідні права. Структурно особистий кабінет користувача представлено на рисунку 2.

Структура особистого кабінету сайту
Рисунок 2 – Структура особистого кабінету сайту

У правій частині повинен знаходиться файловий менеджер особистої директорії користувача. За допомогою неї можна завантажувати файли, створювати директорії, видаляти файли і директорії та завантажувати прошивку до плати. У центральній частині буде знаходиться керуюча консоль, яка буде служити, в першу чергу, для ведення логу та виводу інформації з налагоджувального стенда. Зліва повинен відображатися плеєр з відеотрансляцією стенду налагодження. У нижній частині знаходиться панель керування на якій будуть знаходиться допоміжні настройки керування видаленою лабораторією.

Серверна частина являє собою сполучну ланку між налагоджувальним стендом та користувачем. На сервері повинні бути встановлені веб-сервер (IIS) для передачі інформації користувачу, база даних (MySQL) та серверний інтерпретатор коду програмування (PHP), що генерує HTML-код і обробляє дані, отримані від користувача, і віддає йому. Також має бути встановлено програмне забезпечення для роботи з налагоджувальним стендом (Xilinx ISE Design Studio) та програмне забезпечення організації відеотрансляції (VLC). Для завантаження прошивки необхідно використовувати JTAG інтерфейс, а для прийому й передачі даних пропонується використовувати послідовний порт (COM-порт).

На сервері відбувається обробка реєстраційних даних користувача, перевірка прав доступу, організація доступу до плати, прийом й передача даних від користувача до стенду і навпаки. Також на сервері ведеться відеотрансляція та передача відеопотоку клієнту.

В якості стенду налагодження буде використовуватися FPGA плата фірми Xilinx – Spartan 3E Starter Kit (рисунок 3). Плата Spartan-3E Starter Kit підкреслює унікальні особливості FPGA плат сімейства Spartan 3E та забезпечує зручну платформу для розробки вбудованих додатків. Плата має такі особливості: паралельна NOR Flash конфігурація; множинна завантаження FPGA конфігурацій з паралельної NOR Flash PROM; послідовна SPI Flash конфігурація; розробка вбудованих систем: 32-х розрядний RISC процесор Microblaze, 8-ми розрядний контролер PicoBlaze; DDR пам'ять [7].

плата Spartan 3E Starter Kit
Рисунок 3 – плата Spartan 3E Starter Kit [7]
4. Розробка методу емуляції периферійних пристроїв

Для тестування периферійних пристроїв на стенді налагодження використовується мікропроцесорне ядро Microblaze. Microblaze – це soft-процесорне ядро, розроблене компанією Xilinx для використання у FPGA. Microblaze реалізується за допомогою стандартної логіки та блоків пам'яті ПЛІС [8].

MicroBlaze має універсальні засоби зв'язку з периферією, що забезпечують можливості його широкого застосування у вбудованих системах. Основна шина вводу / виводу – Core Connect PLB – шина з можливістю роботи в режимах master та slave. Більшість блоків підключаються безпосередньо до PLB. Для доступу до внутрішньої пам'яті ПЛІС (BRAM), MicroBlaze використовує спеціальну шину LMB, що знижує навантаження на інші шини [9] [26] [27].

Для даної задачі інтерес являє шина PLB – Processor Local Bus. Це 128-бітна шина для з'єднання довільного числа периферійних пристроїв. Вона складається з модуля керування шиною, таймера, програмних модулів читання й запису даних, блоку адресації і додаткового DCL (Device Control Register) slave інтерфейсу для забезпечення доступу до регістру помилок [10] [28] [29].

4.1. Клавіатура й миш PS/2

Перш ніж приступати до емуляції периферійного обладнання, слід вивчити принцип роботи інтерфейсів, з якими воно працює. Клавіатура і комп'ютерна миша найчастіше працюють через інтерфейс PS/2. PS/2 – двонаправлений інтерфейс, який організовує інформаційний обмін між двома пристроями. У цьому інтерфейсі основними лініями є Data й CLK. Кожен пакет має довжину 11 біт:

  1. 1 стартовий біт – завжди дорівнює 0;
  2. 8 біт даних;
  3. 1 біт парності;
  4. 1 стоповый біт – завжди дорівнює 1.

Клавіатура передає по послідовному порту scan-коди клавіш, а миша передає 3 або 4 байти даних, що містять стан натиснутих кнопок й зміщення миші на площині. Четвертий байт може бути прокрутка коліщатка миші, але для цього миш необхідно спеціально ініціювати.

Хост пристрій може посилати команди контролеру клавіатури й миші. Після прийому кожної з команд миш і клавіатура відповідають байтом 0xFA. Основними командами загальними для миші та клавіатури є:

  1. 0xFF – скидання;
  2. 0xFE – перевідправка, клавіатура і миш повторно відправляють останній байт.

При ініціалізації пристрої передають байт 0xAA, при цьому клавіатура після цього відразу може пересилати scan-коди клавіш, а миша повинна відправити слідом байт 0x00 – це ідентифікатор миші без використання коліщатка. Для ініціалізації миші з колесом необхідно провести додаткову ініціалізацію, докладніше про це можна почитати в офіційній документації [11] [12] [13].

Структура пакета даних миші показана на рисунку 4.

Структура пакету даних миші
Рисунок 4 – Структура пакету даних миші

Первый байт имеет следующую структуру:

  1. 1-й біт – ліва кнопка миші;
  2. 2-й біт – права кнопка миші;
  3. 3-й біт – зарезервовано для середньої кнопки миші;
  4. 4-й біт – завжди дорівнює 1;
  5. 5-й біт – знак зсуву по осі Х;
  6. 6-й біт – знак зсуву по осі Y;
  7. 7-й біт – переповнення зсуву по осі X;
  8. 8-й біт – переповнення зсуву по осі Y.

Другий байт – це зміщення по осі Х, а третій байт – це зміщення по осі Y. Зсув вважається по осі Х зліва направо, а Y знизу-вгору. Причому, якщо миш рухається вниз й вправо, то зміщення негативне, а якщо вгору й вліво, то позитивне. Значення зсуву знаходяться в діапазоні -255 – 255. Знак зміщення зберігається в першому байті, а якщо це значення перевищено, то встановлюється біт переповнення [11].

4.2. Структура емулятора інтерфейсу PS/2

Емулятор клавіатури й миші буде використовувати всі частини проекту, а саме клієнтську, серверну та плату. На рисунку 5 показаний механізм роботи емулятора інтерфейсу PS/2. На стороні клієнта за допомогою JavaScript будуть оброблятися події клавіатури й миші, які будуть формувати необхідні пакети кодів і відправляти їх на сервер. Перед відправкою даних необхідно запустити ініціалізацію пристрої. Після чого обробники подій від клавіатури перевірятимуть код натиснутих клавіш, підбирати необхідний код з таблиці scan-кодів, доповнювати додатковими кодами, в разі розширених клавіш, а також відтиснуті клавіші спеціальним break-кодом (0xF0). Алгоритм інкапсуляції кодів клавіатури показаний на рисунку 6. Сформовані дані будуть відправлятися на сервер за допомогою ajax-запитів. Щоб уникнути перевищення кількості запитів, і щоб клієнтський додаток не перевантажився, необхідно відправляти фіксований обсяг даних, чекати відповіді від сервера, і тільки потім відправляти наступний набір даних. Для того щоб дізнатися про стан плати, є потреба у додатковому асинхронному запиті, який буде повторятися з певним інтервалом часу.

Структура емулятора PS/2
Рисунок 5 – Структура емулятора PS/2 (Анимація: – обсяг 99.2 КБайт, кількість кадрів – 11, розмір – 750х549, циклів – 3)
Інкапсуляція кодів клавіатури
Рисунок 6 – Інкапсуляція кодів клавіатури

Миш на клієнтській частині працює аналогічним чином. Також ініціалізатор миші формує необхідні коди. Обробники подій руху миші, натискання і відпустки кнопок формують пакети даних миші і також, як і клавіатура відправляють ці дані на сервер. Формування пакетів даних від миші представлено на рисунку 7.

Формування пакетів даних миші
Рисунок 7 – Формування пакетів даних миші

Сервер приймає дані від клієнта, буферезує їх, й послідовно передає через COM-порт на плату. Якщо плата відправляє команду пристрою, то цю команду перехоплює серверний додаток і відправляє відповідну відповідь.

Дані, передані через COM-порт, приймаються платою і передаються емулятору протоколу PS/2, розробленого на мові VHDL. Мета цього емулятора прийняти дані з послідовного інтерфейсу RS232, перетворити ці дані в вид пакета PS/2 і передати на шину PLB, в обхід фізичному інтерфейсу. Прийняті дані з шини PLB, також слід перетворити на вигляд подібний для інтерфейсу RS232 і передати їх на сервер.

Висновок

На момент створення даної сторінки магістерська робота не є завершеною. На поточний момент виконання магістерської роботи можна відмітити, що обран вектор напрямку реалізації проекту і основні методи реалізації. Надалі планується розробка всіх описаних модулів емуляції периферійного обладнання [30] [31] [32]..

Список використаної літератури
  1. Вікіпедія: ПЛІС. Інтернет ресурс. Режим доступу: wikipedia.org (Дата звернення 22 травня 2016р.)
  2. Персональний сайт на порталі магістрів ДонНТУ. Автор: Беседа Д. Г. 2014 р. Інтернет ресурс. Режим доступу: masters.donntu.ru (Дата звернення 22 травня 2016р.)
  3. Лабораторія Електронних Засобів Навчання (ЛЕСН) СібГУТІ. Інтернет ресурс. Режим доступу: www.labfor.ru (Дата звернення 22 травня 2016р.)
  4. Науково-практичний журнал Відкрита освіта. Стаття: Універсальна навчальна лабораторія міждисциплінарного навчання автоматизованого проектування цифрової апаратури, 2009 р. Автори: Н.А. Дмитрієв, Л.Д. Забродін, М.Н. Ёхін, Б.Н. Ковригін, М.Ю.Павлов. Режим доступу: www.e-joe.rusub[PDF] (Дата звернення 22 травня 2016р.)
  5. A Remote FPGA Laboratory for Digital Design Students. Автори: Joao Soares, Jorge Lobo. Режим доступу: ap.isr.uc.pt[PDF] (Дата звернення 22 травня 2016р.)
  6. International Journal of Research in Engineering and Technology. Статья: REMOTE FIELD-PROGRAMMABLE GATE ARRAY (FPGA) LAB, 2014 г., с. 842. Автори: Karthik.S , P.Shreya , Srihari P. , N.M.Viswanath. Режим доступу: esatjournals.net[PDF] (Дата звернення 22 травня 2016р.)
  7. Spartan-3E FPGA Starter Kit Board User Guide, 2011 г. Режим доступу: www.xilinx.com[PDF] c.11 (Дата звернення 22 травня 2016р.)
  8. Википедия: Microblaze. Режим доступу: wikipedia.org (Дата звернення 22 травня 2016р.)
  9. Rod Jesman, Fernando Martinez Vallina, Jafar Saniie Microblaze Turtorial с.36. Режим доступу: ecasp.ece.iit.edu[PDF] (Дата звернення 22 травня 2016р.)
  10. LogiCORE IP Processor Local Bus (PLB) v4.6 (v1.05a) Інтернет ресурс. Режим доступу: www.xilinx.com[PDF] (Дата звернення 22 травня 2016р.)
  11. The PS/2 Mouse Interface, 2001 р. Автор: Adam Chapweske. Інтернет ресурс. Режим доступу: www.computer-engineering.org (Дата звернення 22 травня 2016р.)
  12. 12. Дослідження протоколу PS/2 для миші. Автор: Євген Амосов. Інтернет ресурс. Режим доступу: www.programmersclub.ru (Дата звернення 22 травня 2016р.)
  13. Практичне програмування Arduino / CraftDuino - підключаємо мишку PS/2, 2009 р. Інтернет ресурс. Режим доступу: robocraft.ru (Дата звернення 22 травня 2016р.)
  14. Гриценко А.А., Зинченко Ю.Е., Сероштан С.Ю.. Повышение быстродействия аппаратной приоритетной очереди в базисе ПЛИС FPGA с низкой стоимостью // Матеріали III межд. наук.-практ. конф. студ., асп. та молод. вчен. Інформація і керуючі системи в промисловості, економіці та екології, вересень 2011р. Сєвєродонецьк: Технол. ін-т Східноукр. нац. ун-ту ім. В. Даля, 2011. С. 15 – 23.
  15. Медведев К.В., Зинченко Ю.Е. “Навигационная система на базе FPGA-технологий с возможностью самотестирования” / Збірка матеріалів сьомої міжнародної наук. техн. конф. студентів, аспірантів та молодих науковців Інформатика та комп'ютерні технології — 2011. – Донецьк: ДонНТУ - 2011.
  16. Зинченко Ю.Е., Шерекин А.А., Коваленко И.А., Ковалев А.М. Разработка системы реального времени на базе комплекса VIRTEX-5 FPGA ML501 // Сборник трудов VII международной научно-технической конференции студентов, аспирантов и молодых учёных Информатика и компьютерные технологии, 22-23 ноября 2011 г., Донецк: ДонНТУ. - 2011. В 2-х томах, Т. 2. - С. 44-48.
  17. Зинченко Ю.Е, Шерекин А.А. Разработка устройства аппаратной сортировки с постоянным временем ввода и вывода // Информатика и компьютерные технологии, сборник трудов VII международной научно-технической конференции студентов, аспирантов и молодых учёных - 22-23 ноября 2011 г., Донецк, ДонНТУ. - 2011. В 2-х томах, Т. 1. - С. 72-76.
  18. Волошин Д.Н., Зинченко Ю.Е. Разработка системы реального времени на базе Xilinx XC3S500E Spartan-3E FPG // Сборник трудов VII международной научно-технической конференции студентов, аспирантов и молодых учёных Информатика и компьютерные технологии, 22-23 ноября 2011 г., Донецк: ДонНТУ. - 2011. В 2-х томах, Т. 1. - С. 44-47.
  19. Сероштан С.Ю., Горохов И.В., Деменко А.Г., Лобанов Е.В. Построение системы реального времени на базе платформы FPGA фирмы ALTERA // Сборник трудов VII международной научно-технической конференции студентов, аспирантов и молодых учёных Информатика и компьютерные технологии, 22-23 ноября 2011 г., Донецк: ДонНТУ. - 2011. В 2-х томах, Т. 1. - С. 61-63.
  20. Горохов И.В., Деменко А.Г., Лобанов Е.В., Сероштан С.Ю. Cравнение средств построения систем на кристалле для FPGA платформы фирмы ALTERA: SOPC Builder и Qsys // Сборник трудов VII международной научно-технической конференции студентов, аспирантов и молодых учёных Информатика и компьютерные технологии, 22-23 ноября 2011 г., Донецк: ДонНТУ. - 2011. В 2-х томах, Т. 2. - С. 19-21. 2012
  21. Шерекин А.А., Зинченко Ю.Е., Зинченко Т.А., Корченко А.А. Разработка структуры системы верификации FPGA-проектов // Сборник трудов III Всеукраинской научно-технической конференции студентов, аспирантов и молодых учёных Информационные управляющие системы и компьютерный мониторинг, 16-18 апреля 2012 г., Донецк, ДонНТУ. - 2012. С. 667-669.
  22. Горохов И.В., Зинченко Ю.Е. Проблемы верификации систем-на-кристалле на базе FPGA на разных этапах проектирования // Сборник трудов III Всеукраинской научно-технической конференции студентов, аспирантов и молодых учёных Информационные управляющие системы и компьютерный мониторинг, 16-18 апреля 2012 г., г. Донецьк: ДонНТУ. – 2012. С. 591-594.
  23. Горохов І.В., Шерекін О.О., Корченко О.О., Зінченко Ю.Є. Особливості верифікації систем-на-кристалі на базі FPGA // Матеріали II Всеукраїнської школи-семінару молодих вчених і студентів АСІТ'2012 Сучасні комп'ютерні інформаційні технології. – Тернопіль: ТНЕУ, 2012. – С. 89-90.
  24. Волошин Д.Н., Зинченко Ю.Е., Войтов Г.В. Конвейерная реализация на FPGA сумматоров и умножителей // Матеріали II Всеукраїнської школи-семінару молодих вчених і студентів АСІТ'2012 Сучасні комп'ютерні інформаційні технології. – Тернопіль: ТНЕУ, 2012. – С. 97-98.
  25. Гонтаренко Б.В., Беловолова М.А., Зинченко Ю.Е. Реализация искусственного нейрона на FPGA // Матерiали III мiжнародної науково-технiчної конференцiї студентiв, аспiрантiв та молодих вчених Інформаційні управляючі системи та комп’ютерний моніторинг (ІУС та КМ-2012), - Донецьк: ДонНТУ - 2012. - С. 586-590.
  26. Зінченко Ю.Є., Зінченко Т.А., Асланов І.Г.. Віртуальна FPGA-лабораторія з дистанційним доступом // Матеріали III Всеукраїнської школи-семінару молодих вчених і студентів АСІТ'2013 Сучасні комп‘ютерні інформаційні технології. – Тернопіль: ТНЕУ, 2013.
  27. Беседа Д.Г., Зинченко Ю.Е. Разработка метода эмуляции работы FPGA-платы с клавиатурой через порт PS/2 // Сборник трудов V Всеукраїнська науково-технічна конференція студентів, аспірантів та молодих вчених, Інформаційні управляючі системи та комп'ютерний моніторинг (ІУС КМ-2014), 22-23 квітня 2014 р., м. Донецьк : – Донецьк: ДонНТУ, 2014 - т .1 - С. 157-162
  28. Ю.Е. Зинченко, В.И. Калашников, О.Н. Дяченко, Т.А. Зинченко. Современные проекты FPGA-лаборатории ДонНТУ / Сборник трудов межд. научно-практическая конференция Инновационные перспективы Донбасса в рамках I-го Межд. научного форума Донбасс-2015, 20-22 мая 2015. – Донецк: ДонНТУ. – 2015. – С 4.
  29. В.С. Ленч, В.А. Гень, Ю.Е. Зинченко, А.В. Коваль. Исследование организации удаленного доступа к FPGA-лаборатории / / Сборник трудов межд. научн-техн. конф. студентов, аспирантов и молодых ученых Компьютерная и программная инженерия – 2015. – Донецк: ДонНТУ. – 2015. – С 5.
  30. В.В. Мохначёв, Ю.Е. Зинченко, А.В. Коваль. Анализ возможности разработки квадрокоптера на базе FPGA // / Сборник трудов vежд. научн-техн. конф. студентов, аспирантов и молодых ученых Компьютерная и программная инженерия – 2015. – Донецк: ДонНТУ. – 2015. – С 4.
  31. В.А. Гень, Д.А. Нестеренко, Ю.Е. Зинченко, к.т.н., доц., Т.А. Зинченко. Эмулятор микропроцессоров на базе FPGA // / Сборник трудов vежд. научн-техн. конф. студентов, аспирантов и молодых ученых Компьютерная и программная инженерия – 2015. – Донецк: ДонНТУ. – 2015. – С 5.
  32. Зинченко Ю., Калашников В., Хайдук С., Дяченко О., Войтов Г., Корченко А., Зинченко Т. и др.. FPGA-технологии проектирования и диагностика компьютерных систем / Сборник научных трудов VI Межд. научн.-практ. конф. Современные информационные технологии и IТ-образование. - Москва: МГУ, 2011. - Т. 1. 787 С. 422-429