В последних числах Октября в МИФИ состоялся семинар по MIPSfpga — один из серии семинаров, организованных русскими вузами совместно с Imagination Technologies, Microchip Technology в партнерстве с Гамма Петербург, представителями Xilinx в Российской Федерации компанией Макро Групп, с участием докладчиков из MathWorks и НИИСИ. Ниже — смесь из фотографий, ссылок на материалы, заметок о подготовке семинара и о мифишной культуре.
Смотрите кроме этого: Раздача слонов: FPGA платы для образовательных проектов с MIPSfpga
Месяц назад в русских университетах прошли семинары по MIPSfpga (1, 2, 3, 4), а джентлемен из НИИСИ по имени Антон Павлов написал заметку про его личные улучшения MIPSfpga «MIPSfpga: вне канона». Так как доктора наук встретили новый продукт для обучения студентов электронике в целом положительно, то появилась мысль оказать помощь начинаю платами, причем сходу у нескольких организаций и людей.В частности, в честь Нового Года я в кооперации с Виталием Кравченко из univeda.ru планируем маленькую раздачу слонов, то бишь бесплатных плат Terasic DE0-CV с FPGA Altera Cyclone V.
Ниже фотография МИФИ снаружи. Слово «ядерный» напоминает, что в МИФИ стоит ядерный реактор, исходя из этого в том направлении тяжело попасть, в особенности с американским паспортом — пропуск мне готовили семь дней две, а приказ о семинаре подписывал ректор.
На входе стоит автоматчик с Калашниковым (!)(Автоматчика мне сфотографировать не разрешили)Вот я (Юрий Панчул) с другими организаторами семинара — Игорем Ивановичем Шагуриным и Максимом Горбуновым:Игорь Иванович Шагурин, зам. заведующего кафедрой микро- и наноэлектроники — создатель статей и книг по процессорам Intel, Motorola и PowerPC, лабораторных работ по MIPS.Примечательно, что Игорь Иванович Шагурин ездил воображать советскую электронику на конференцию в Сан-Франциско еще в 1970-е годы, в то время, когда СССР был достаточно изолированной страной. Участников той конференции по VLSI в 1970-х возили в Muir Woods, местность с самыми высокими на земле секвойами Sequoia sempervirensМаксим Горбунов — исследователь из НИИСИ / SRISA, университета, что занимается а также разработкой русских процессоров с архитектурой MIPS — КОМДИВ-32 и КОМДИВ-64.
Максим специализируется на проектировании топологии радиационно-стойких СБИС и был одним из организаторов интернациональной конференции RADECS в Москве:Перед началом семинара MIPSfpga в МИФИ один из инструкторов, Егор Кузьмин, начал спрашивать меня на тему race conditions в некоей схеме для специальных вычислений, которая появилась у них как студенческий проект. Я не уверен, что его верно осознал, но высказал, что в верно организованном синхронном дизайне таких неприятностей не появляется и пообщал отправить как пример фотографию страницы из книжки «Цифровая математика», на которой разбирается организация конвейероного сумматора, что содержит малое количество комбинаторной логики (такое же как в сумматоре с последовательным переносом), но наряду с этим размещает регистры (D-триггеры) так, что сумматор может запускать новую операцию сложения любой такт, с частотой тактового сигнала, определяемой задержкой однобитного полного комбинационного сумматора:Digital Arithmetic 1st Edition by Milos D. Ercegovac and Tomas LangЗаодно сфотографировал несколько страниц про self-times асинхронные схемы, также имеющие отношение к вопросу.Позже я был представлен Владимиру Дементьеву, что вместе с Андреем Андриановым, Дмитрием Козловским ведет в МИФИ лабораторные занятия по программированию микроконтроллеров Microchip PIC32MX.
Я поведал Владимиру, что доктор наук Алекс Дин из Университета Северной Каролины скооперировался с Imagination, Microchip и Digilent и по сей день разрабатывает новый курс по программированию микроконтроллеров Microchip PIC32MZ, причем данный курс включает RTOS-ы и новомодное соединение микроконтроллеров с облаком. Микроконтроллер PIC32MZ выстроен на базе микропроцессорного ядра MIPS microAptiv UP, того же самого, каковые употребляется в MIPSfpga.
Посему я начал агитировать товарищей из МИФИ, дабы они участвовали в ревью и (в случае если им понравится) бета-тестированию этого курса:Но возвратимся к нашему семинару. Тема семинара была MIPSfpga. Что это такое:MIPSfpga — безвозмездно лицензируемые для университетов исходные тексты промышленного микропроцессорного ядра MIPS microAptiv UP.
Это ядро употребляется как база микроконтроллера Microchip PIC32MZ, и новой платформы для «интернета вещей» — Samsung Artik 1.Ядро MIPS microAptiv UP используется в индустрии совместно со стандартным за последние 25 лет технологическим процессом проектирования микросхем, при котором другие компоненты и процессор совокупности на кристалле разрабатываются на языке описания аппаратуры Verilog, по окончании чего описание через пара преобразований преобразовывается в маску, по которой на фабрике изготавливаются микросхемы.Образовательная версия MIPS microAptiv UP — MIPSfpga — применяет другой путь реализации: описание совокупности преобразовывается в файлы конфигурации для недорогих студенческих плат с программируемыми пользователем вентильными матрицами (ППВМ), каковые довольно часто именуют программируемыми логическими интегральными схемами (ПЛИС) либо Field Programmable Gate Array (FPGA).Итак, сперва выступил я и поведал про:1. Компанию Imagination Technologies и ее отделение MIPS business unit2.
Образовательные программы Imagination Technologies3. Для освежения понятия о RTL-to-GDSII flow для тех в аудитории, у кого Verilo/VHDL не входили в специализацию: Как проектируются IP-блоки и cистемы на кристалле (СнК).4. Мало поведал про три линейки микропроцессорных ядер MIPS и более детально — про линейку ядер микроконтроллерного класса, на базе одного из которых (MIPS microAptiv UP) создан пакет MIPSfpga5. Так как одно из упражнений потом включало демонстрацию работы кэша, то я сообщил несколько слов и про кэши в MIPS microAptiv UPПосле моего первого выступления выступил Михаил Песельник, докладчик от MathWorks:Михаил Песельник реализовал подмножество MIPS на Simulink, что взяло некоторый приз редакторских симпатий MATLAB Central Pick of the Week:Пример Михаила продемонстрировал, что для студента архитектуру и микроархитектуру процессорных ядер возможно изучать различными методами — хоть на Verilog и VHDL, хоть посредством моделей на Си, хоть посредством Simulink.А вот по окончании того, как базы архитектуры и микроархитектуры изучены, студенту стоит поэкспериментировать с промышленным процессором, и вот тут выходит на сцену MIPSfpga, с которым:
- Студенты смогут строить собственные прототипы совокупностей на кристалле, соединяя микропроцессорное ядро, память и спроектированные ими устройства ввода-вывода
- Внутренние регистры возможно подсоединять к выходным портам и выводить наружу данные о текущем состоянии процессорного конвейера, устройства и кэшей управления памятью. Затем процессор возможно запустить на низкой тактовой частоте и замечать его работу «в замедленной съемке».
- Студенты смогут экспериментировать со собственными вариантами кэшей, проектировать многоядерные совокупности со специальными сопроцессорами, эксперименторовать с разделением задачи на программную часть и аппаратную.
Но дабы экспериментировали с разработками SoC и с ядром, им нужно хорошо владеть инструментом / средством реализации. Исходя из этого по окончании Михаила выступил Александр Филиппов, инженер по применению из Макро Групп — офпреда компании Xilinx в Российской Федерации. Xilinx — компания, которая в свое время изобрела FPGA и сейчас остается #1 в самые высокоскоростных FPGA.Александр Филиппов сделал два доклада:
- Новые FPGA 7-й серии и MPSoC UltraScale – продукты XILINX для реализации замечательных программируемых «совокупностей на кристалле»
- Среда проектирования XILINX VIVADO для «совокупностей на кристалле»
Что такое ПЛИС / FPGA я на пальцах растолковал в другом посте на Хабре — Как начать разрабатывать железо, применяя ПЛИС — пошаговая инструкция. Но повторим эти сведенья опять:В самом несложном варианте FPGA складывается из матрицы однородных ячеек, в функцию каждой из которых возможно поменять посредством мультиплексоров, подсоединенных к битам конфигурационной памяти. Одна ячейка может стать гейтом AND с четырьмя одним выводом и вводами, вторая — однобитным регистром и т.д.
Загружаем в конфигурационную память последовательность битов из памяти — и в FPGA образуется заданная электронная схема, которая возможно процессором, контроллером дисплея и т.д.ПЛИС-ы / FPGA — не процессоры, «программируя» ПЛИС (заполняя конфигурационную память ПЛИС-а) вы создаете электронную схему (хардвер), тогда как при программировании процессора (фиксированного хардвера) вы подсовываете ему цепочку написанных в память последовательных руководств программы (софтвер).Внизу — схема несложного блока FPGA, в который входит look-up table (LUT) и flip-flop. Правда в данной схеме не продемонстрированы мультиплексоры, каковые меняют функцию ячейки, и соединения с конфигурационной памятью.Диаграммы, иллюстрирующие структуру FPGA:И еще одна:По окончании обеда в столовой МИФИ мы начали практическую часть. Изначально, в то время, когда Imagination Technologies и Xilinx проводили таковой семинар в Лос-Анжелесе, для семинара употреблялись слайды, приготовленные докторами наук Сарой и Дэвидом Харрис из южной Калифорнии. Как это смотрелось изначально, вы имеете возможность заметить на видео:
Все 8 видео с семинара в Лос-АнжелесеДля семинаров в Российской Федерации приготовленную Харрисами обвязку ядра и лабы было нужно значительно модифицировать. Модификации вы имеете возможность обнаружить https://github.com/MIPSfpga/mipsfpga-plus. Отличия включают:1.
Все спортировано под недорогие платы от Altera, дешёвые в Российской Федерации без экспортно-импортной тягомотины2. Реализована загрузка программы в синтезированную совокупность без применения BusBlaster, легко через UART3. Датчик освещения как периферийное устройство вместо LCD дисплея4.
Сделан переключаемый на сверхнизкую частоту тактовый сигнал, разрешающий лабы по визуализации работы любых внутренностей процессора5. Добавлена несложная лаба по визуализации промахов кэша+ любая косметика и мелочь — более компактный загрузчик / bootloader, возможность узких некэшируемые транзакций к памяти и т.д.Подробнее:1.
Портирование под AlteraПрежде всего, слайды Харрисов показывали все для Xilinx, а сейчас доставка плат с ПЛИС Xilinx в Россию стала сверхсложной бюрократически процедурой, занимающей 3-4 месяца. То же самое случилось с лицензированием софтвера для синтеза и place-and-route Xilinx Vivado, кроме того с бесплатными лицензиями.
У некоторых русских институтов не было ни плат Xilinx, ни лицензий на Vivado; у других была лишь ветхая лицензия на предшественника Vivado — софтвера 2013 года ISE, что не поддерживал ПЛИС-ы на платах, каковые я возил по России.Меньше, с целью проведения семинаров в Российской Федерации мы с комрадами еще в Калифорнии спортировали MIPSfpga на несколько недорогих плат, дешёвых в Российской Федерации, от соперника компании Xilinx — компании Altera (эта компания на данный момент сливается с Intel-ом). Альтеровские платы пожертвовала для потребностей семинара зеленоградская компания НПЦ «Элвис».
Главной платой в МИФИ, МФТИ и СГАУ была Terasic DE0-CV на базе Altera Cyclone V:Второй платой была Terasic DE0-Nano — весьма компактная платка, пригодная для проектов типа летающих роботов, но с маленьким числом периферии на борту:Недочёт Terasic DE0-Nano — это маленькое количество периферийных устройств на самой плате, но это одновременно и преимущество, поскольку DE0-Nano возможно соединять как конструктор с другими платами и встраивать в различные устройства:2. Загрузка через UARTВторой проблемой слайдов от Харрисов было применение отладочного адаптера Bus Blaster и софтвера для него называющиеся OpenOCD.
В принципе BusBlaster/OpenOCD — это достаточно хорошее ответ в собственном роде. Оно разрешает не только загружать программы в синтезированную в ПЛИС-а совокупность, но и отлаживать их дистанционно через интерфейс EJTAG, надстройку более большого уровня над интерфейсом JTAG.
Наряду с этим BusBlaster стоит всего $43, что значительно дешевле, чем индустриальные отладочные EJTAG-адаптеры.К сожалению, комбинация BusBlaster/OpenOCD достаточно сырая, и я опасался, что она не получит на некоей неожиданной конфигурации компьютеров в Российской Федерации (я был прав — это не получило в МФТИ и СГАУ). Также, на сайте, что реализовывает комбинацию BusBlaster/OpenOCD для MIPS, время от времени платы заканчивались.По данной и вторым обстоятельствам, я начал искать другие методы загрузки софтвера в совокупность (в ПЛИС необходимо грузить раздельно конфигурацию/хардвер и софтвер для процессора (в синтезированную совокупность с процессором)).
Неизвестный интернет-тролль Алексей продолжительно пробовал брать меня на слабо, дабы я имплементоровал EJTAG загрузчик через Altera USB Blaster, но так как я не эксперт по EJTAG, я выбрал простое, трудящееся со времен советского строя ответ — грузить программу через последовательный порт / UART. Правда при советском строе был порт RS-232C, а в 1990-е показались чипы от компании FTDI, каковые разрешили делать все через USB кабель, соединенный с PC.
Различные вариации для того чтобы переходника возможно приобрести за $5 в Москве и менее чем за $2 через интернет из Китая:Сходу увижу, что грузить программы в синтезированную SoC возможно различными методами. В одном из них, более классическом, в совокупности имеется маленькая фиксированная программа в памяти (bootloader), которая запускается по окончании сброса (reset) совокупности и грузит солидную программу через UART / serial port.
Данный метод применил Антон Павлов из НИИСИ, каковые показал его на семинарах в МГУ и МИФИ, и написал о нем заметку на geektimes «MIPSfpga: вне канона».Я же сделал загрузку другим методом, при котором память наполняется конечным автоматом, всецело реализованном в хардвере. Автомат принимает с PC через UART текстовый файл в формате Motorola S-Record, парсирует его (все в хардвере) и наполняет данными память, тогда как процессор будет в состоянии сброса.
Позже процессор просыпается и начинает просматривать программу из памяти совокупности. Все, что необходимо сделать со стороны PC — сконвертировать исполняемый ELF-файл в формат Motorola S-Record и отправить его на виртуальный COM-порт командой windoiws-shell-а «type».3. Датчик освещения как периферийное устройство вместо LCD дисплеяВ исходных лабах от Харрисов в качестве примеров периферийных устройств они применяли семисегментный индикатор и LCD-дисплей с SPI.
Пример с семисегментным индикатором имхо неинтересный — любой студент осознаёт, что если вы понимаете как мигать одной лампочкой, то вы понимаете и как мигать семью лампочками. Пример с SPI чуть лучше, в особенности в случае если идет обращение о начинающих студентах, но для чего нужен второй дисплей, в случае если уже имеется семисегментный индикатор?
Меньше, перед поездкой в Россию я накупил 20 датчиков освещенности, также с интерфейсом SPI, и применял их вместо дисплеев:Наряду с этим интерфейс к нему весьма простой — вот написанный мною интерфейсный модуль (примечание: данный код не включает все модификации совокупности для сопряжения его с шиной AHB-Lite, дабы значение видел софтвер):4. Переключаемый на сверхнизкую частоту тактовый сигналКогда MIPSfpga показался и его начали изучить русские учители институтов, кое-какие их них стали жаловаться, что пакет в его исходном виде не весьма занимателен для продвинутых студентов, поскольку лабы, подготовленные Сарой и Дэвидом Харрис, применяют процессор как «тёмный ящик», легко подсоединяя к нему устройства.
Иными словами, Харрисы всецело оставили без внимания, что процессор дается в исходном коде, и следовательно с ним возможно реализовать лабы, каковые бы разрешили вывести наружу соединения от произвольных регистров процессора (не только видимых программисту регистров, но и по большому счету от любых D-триггеров), подсоединить их к примеру к светодиодам, и замечать, что происходит с процессором при исполнении тех либо иных программ.Как вы осознаёте, дабы сделать такие наблюдения «вживую», нужно вынудить трудиться процессор на низкой тактовой частоте, к примеру такт в секунду. Как это сделать?
Ядро MIPS microAptiv UP реализованное в ASIC на технологии 28 нм может трудиться с частотой выше 500 MHz, а на технологии 65 нм более чем 300 MHz. При реализации на ПЛИС-ах частоты значительно ниже, но все равно высокие — 50-60 MHz. Частоты имеющихся на платах генераторов синхросигналов — 50-100 MHz, с возможностью увеличения либо понижения частоты посредством phase-locked loop (PLL) / фазовой автоподстройки частоты (ФАПЧ).К сожалению, посредством PLL возможно снизить частоту до ~100 KHz, но до 1 Hz частоту необходимо снижать вторым методом.
Сперва я пробовал сделать это применяя блок от Altera называющиеся ALTCLKCTRL, но он почему-то не трудился. После этого я попытался дробить синхросигнал посредством счетчика, но (я это уже знал) само по себе такое ответ не работает, поскольку синтезатор не осознаёт, что выходной сигнал есть знаком тактовой частоты и начинает его неправильно route, в следствии чего процессор не работает.
Я посовещался с несколькими товарищаями и мы стали использовать альтеровское макро «global» (и его эквивалент на Xilinx BUFG).5. Добавлена несложная лаба по визуализации промахов кэшаТеперь возможно делать занятные опыты — к примеру сделать, дабы на протяжении промаха кэша мигал светодиод, по окончании чего замечать в настоящем времени попадания и промахи кэша при заполнении двухмерного массива.
В случае если заполнять массив по строчкам, то мигания будут различные, чем в случае если заполнять по стобцам:Нужно подметить, что не все прошло без сучка, без задоринки: 1. GPIO в DE0-Nano отличается от GPIO в DE0-CV и платах от Xilinx. В частности, почему-то у меня не получилось объявлять целый порт GPIO одним inout-ом и позже применять его отдельные биты или как input, или как output. Не смотря на то, что на DE0-CV это проходит нормально.
У меня не было времени поделить различные выводы GPIO между различными логическими (на Verilog) сигналами, исходя из этого я просто не спортировал лабу с датчиком освещения на DE0-Nano. По данной же причине я не спортировал на DE0-CV интерфейс с Bus Blaster-ом.2. Хуже того, загрузка через UART для DE0-Nano не сработала в МИФИ, не смотря на то, что жо этого трудилась в МГУ и у меня на ноутбуке. Обстоятельство до сих пор не 100% ясна:2.1. Быть может, была неприятность несовместимости версии Windows (7 с патчем) и USB-to-UART кабеля используемого для DE0-Nano.
Кабель был недорогим китайским клоном кабеля на базе чипсета PL2303TA, не смотря на то, что я его не пробовал до семинара. Как мы знаем, что у прошлой версии таких кабелей на базе чипсетов с PL2303HX была неприятность совместимости с Windows 8 (см.). Самое гнусное, что у меня при себе был и ноубтук с версией Windows 7, и ноутбук с версией Windows 8, и различные альтернативы этому шнуру.
Но я не проверил все комбинации до семинара, не смотря на то, что имел возможность бы сделать это прошлым вечером — увы.2.2. За два дня до семинара я внес трансформации в делитель тактового сигнала. Это также не стоило делать.2.3.
Прекрасно хоть на DE0-CV все прекрасно трудилось.3. В МИФИ я показывал более сложную версию примера с кэшами, чем до этого в МГУ.
Это была неточность — в сложном примере компилятор чего-то наоптимизировал, и pattern огоньков был не таким явным, как на исходном несложном примере.Обстановку пара спас приглашенный дополнительный докладчик из НИИМИ Антон Павлов, что, не смотря на то, что ему и не осталось в МИФИ времени, продемонстрировал некоторым присутствующим собственный личный вариант обвязки MIPSfpga называющиеся myMIPSfpga что он кроме этого обрисован в заметке «MIPSfpga: вне канона». Кроме другого, Антон спортировал MIPSfpga на русского плату Марсоход 3, которую я, как человек замученный экспортом-импортом (Сцилла: американский экспортный контроль + Харибда: русский таможня), планирую попробовать применять для следущих образовательных мероприятий в Российской Федерации:На протяжении перерыва и по окончании семинара Максим Горбунов продемонстрировал мне различные мифишные достопримечательности, в каковые входят три панно в духе эры Туманности Андромеды и Молекулярного Кафе из красно-белого многотомника родом из 1960-х:Продолжение направляться.
Случайная статья:
- Intel haswell: эпоха процессоров нового поколения
- Huawei сосредоточится на развитии облачных технологий
MIPSfpga Tutorial: Creating a Vivado project for MIPSfpga (Part 1/8)
Похожие статьи:
-
Как соединить несколько фотографий в одну?
Процесс объединение нескольких фотографий в одну частенько употребляется при редактировании цифровых фотографий. Применение приемов фотомонтажа, создание…
-
Моментальная фотография сегодня или умрет ли polaroid?
Все не забывают из детства чудные квадратные фотографии, сделанные на Polaroid 600. Время от времени в новостях проскакивает наименование данной…
-
Как улучшить качество фотографии?
Довольно часто мы сталкиваемся с обстановкой, в то время, когда нужно повысить уровень качества фотографии, поскольку не всегда имеется возможность…