Итак

Итак Женщине

Ошибка №2. ложная уверенность в верности алгоритма и работоспособности блока на основе анализа кода

Как это происходит? Разработчик смотрит на код, понимает, как он должен исполняться, и даже не пытается в это место добавлять встроенные отладчики, чтобы смотреть, что там происходит, «ведь по коду же видно, что все должно работать».

Возьмем классическую ошибку: различная разрядность шин. Если два сигнала разной разрядности попытаться сравнить в логическом операторе типа if в языке VHDL, то с точки зрения синтаксиса и визуально все будет выглядеть нормально, однако синтезатор это сравнение преобразует в вечное false и, соответственно, алгоритм работать не будет.

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

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

Возникновение жизни на земле

«Solum Debiles Mori Debent (лат. Слабые должны умереть)»

Выбор «отсчеты vs сигналы»

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

Простой пример: мы хотим посмотреть 4096 отсчетов на частоте 200 МГц, это всего 20 мкс реального времени. А за 20 мкс реального времени иногда можно увидеть часть процесса, который мы пытаемся отладить. И если мы при этом хотим пронаблюдать пару 512 разрядных шин, это потребует 4 Мбита памяти ПЛИС, что для некоторых кристаллов составляет большой процент от ее общего доступного объема.

Гипотеза детерминированного мира

«Если бы какое-нибудь разумное существо смогло узнать положения и скорости всех частиц в мире в некий момент, оно могло бы совершенно точно предсказать все события Вселенной»

Пьер-Симон Лаплас

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

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

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

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

Гипотеза детерминированного мира
Гипотеза детерминированного мира

Гипотеза свободы выбора

Оппоненты из лагеря недетерминированности лихорадочно потирают руки и тихо радуются. Свобода воли греет и мои грезы, запихивая рациональность подсознания в закоулки затуманенного темного леса. Ведь так приятно проснуться рано утром, взглянуть своими очами в зеркало и увидеть ореол великолепного свечения самого homo sapiens’a, венца творения (даже помолиться захотелось).

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

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

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

Мир хаоса и свободы выбора
Мир хаоса и свободы выбора

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

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

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

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

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

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

«Астробиолог вслед за Лирни, предпологал, что двухтактный двигатель не является жестко детерминированным (в фазе сжатия возникают значительные неопределенности из-за случайных в принципе вариаций в распределении масс и различного протекания аннигиляции) и невозможно с абсолютной точностью предсказать, какой тип Вселенной возникнет после очередного сжатия» мудрый Лем.

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

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

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

Ведь если исходить из аксиомы, что вся вселенная это большой шар, в которой существуют зернышки вселенной как в гранате (лат. púnica granátum), то исключать жизнь и зарождение иной атомной структуры нельзя. Лютые богофилы и лемминги культивирующие метафизику в полном экстазе.

Квантовая механика

«Если вы думаете, что понимаете квантовую механику, значит, вы её не понимаете»

Ричард Фейнман

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

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

Квантовая механика
Квантовая механика

Квантовая механика область физики, рассматривающая поведение элементарных частиц на микроуровне. Зародилась на заре XX века, являясь злейшим врагом теории относительности. С квантовой механикой связаны такие явления как сверхпроводимость, сверхтеплопроводность, сверхтекучесть, практическая реализация которых позволит в ближайшем будущем освоить телепортацию, антигравитацию, современное оружие и другие полезные вещи для быта homo sapiens.

Как быть Леди:  Как влюбить в себя бабника? — Блог женского психолога

Давайте поговорим об известном щелевом опыте, через который пропускают по одному фотону или электрону за раз. Пустив в щель единый и неделимый квант, он пролетает через обе щели и интерферируют (перераспределение интенсивности света) на экране сам с собой.

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

Щелевой опыт с электронами
Щелевой опыт с электронами

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

И дабы окончательно добить моего достопочтенного читателя проведем еще один мысленный эксперимент. Если провести наблюдение, когда квант уже прошел через щели, но не успел еще попасть на экран, квант опять проявляет себя волшебником из страны ОЗ, становясь частицей как при запуске.

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

Для справки: подробнее о квантовой механике и щелевом опыте можете почитать в статье, реален ли мир, квантовая реальность.

Мур, черчилль и правила отладки fpga

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

Второе эмпирическое правило — это видоизмененное высказывание, которое приписывают Уинстону Черчиллю. Он якобы говорил, что успех — это умение двигаться от одной неудачи к другой, не теряя энтузиазма.

«Для FPGA-разработчика отладка – это умение двигаться от одной ошибки к другой, не теряя энтузиазма.»

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

Отладка внешних интерфейсов

Любое FPGA-устройство так или иначе взаимодействует с внешним миром, поэтому мы не можем обойти стороной отладку внешних интерфейсов.

Блоки прошивки FPGA взаимодействуют между собой и со сторонними устройствами, ведь если блок не имеет внешних связей, то на этапе синтеза он будет абсолютно резонно удален из проекта — для оптимизации.

Анализатор PCIe протокола LeCroy (очень дорогое оборудование, облегчает отладку в разы)

В рамках идеологии блочного дизайна блоки взаимодействуют с помощью стандартных интерфейсов: для Xilinx — это AXI Memory mapped и AXI Stream, для Intel FPGA это будут похожие интерфейсы Avalon MM и Avalon Stream, также используется стандартная шина APB.

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

Совсем иначе дело обстоит, когда один из интерфейсов используется в качестве транспорта для более высокоуровневого протокола. Например, низкоуровневое ядро PCI Express, которое работает на уровне TLP-пакетов и в качестве транспорта для передачи этих пакетов использует стримовый интерфейс AXI.

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

Поэтому если в проекте предстоит работа с такими интерфейсами, как PCI Express, 10/100G Ethernet или боле специфическими интерфейсами типа Infiniband, то при планировании проекта нужно учитывать, что на этапе отладки понадобятся соответствующие анализаторы, которые существенно упростят процесс работы.

Если у нас нет доступа к специальному оборудованию для анализа и отладки, можно использовать поведенческие модели. Например, модель для контроллера PCI Express. Однако такая модель позволит нам получить лишь малый процент покрытия всех возможных ситуаций, с которыми ваше разрабатываемое устройство столкнется в реальной жизни.

Итак, вот три проблемы, с которыми сталкиваются FPGA-разработчики при отладке внешних интерфейсов:

1. Невозможность корректировки внешних интерфейсов

2. Необходимость использовать дорогостоящее оборудование для отладки:

  • Анализаторы PCIe и 10/100G Ethernet
  • Осциллографы 10—25 Гб/с с функцией анализа трафика

3. Модели черных ящиков не покроют 100% функциональности, особенно в части real-time

Отладка распределенных fpga-систем

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

Для гетерогенных систем правила отладки примерно такие же: каждая плата выполняет свою функцию, мы отлаживаем каждую в отдельности, а затем — в составе системы.

А теперь пример с гомогенными системами: рассмотрим VPX-модуль на 12 слотов. Давайте представим, что туда вставлены 10 слотов с FPGA, 1 слот с коммутатором PCI Express и 1 слот — с CPU, который все эти данные агрегирует, обрабатывает и передает дальше. Такая система по своей структуре является гомогенной, потому что каждый модуль выполняет одинаковую функцию.

На фото слева — VPX-система на 12 слотов, справа — ПЛИС-модуль, который в нее вставляется

В случае отладки гомогенных системы мы сталкиваемся с эффектом масштабирования: если мы отладили одну плату, прогнали все тесты и видим, что она работает, то с учетом эффекта масштабирования это не гарантирует, что так будет работать система на двух платах.

Ошибка №1. внесение двух и более исправлений за одну сборку

Учитывая, что сборка проекта может занимать несколько часов (а то и сутки), то возникает соблазн исправить сразу несколько замеченных ошибок. Но, как показывает практика, особенно в части сложных проектов, попытка сделать два и более исправления за раз чаще приводит к тому, что поведение отлаживаемой системы становиться еще более непредсказуемым, чем до внесения исправлений.

Решение этой проблемы достаточно простое: несмотря на длительное время пересборки проекта необходимо двигаться step by step – одно исправление, затем сборка и проверка, следующее исправление — снова сборка и проверка и т. д. Так вы сэкономите больше времени и усилий.

Ошибка №3. перекладывание проблемы на блок коллеги или внешние микросхемы

Так могут поступать не только новички, но и опытные разработчики, которые исходят из предположения, что ошибка возникла не у них, а в блоке коллеги или даже в стандартном ядра или внешней микросхеме, с которой FPGA обменивается данными.

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

Решение: несмотря на то, что даже в стандартном ядре Xilinx может быть ошибка, нужно руководствоваться правилом «презумпции виновности», то есть исходить из предположения, что ошибка все-таки возникла в нашем блоке, а не в стандартном IP-ядре, например, AXI4 Interconnect, который по какой-то причине заблокировал транзакцию. Конечно, дополнительное письмо в службу техподдержки вендора блока лишним не будет.

Пошаговое исполнение

Есть еще одна интересная фишка, но она доступна только в отладчике Synopsys для ПЛИС Microchip (ex. Microsemi) — так называемое пошаговое исполнение, к которому привыкли разработчики высокоуровневого ПО. Эта фича заявлена как прогрессивное решение, хотя сам отладчик далеко не новый.

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

  1. На практике более-менее качественно можно отлаживать проект, состоящий из одного домена синхронизации. Для большого проекта такая фишка уже не актуальна.
  2. Если в проекте есть внешние интерфейсы, которые привязаны к реальному времени (даже самый банальный UART), то в момент остановки исполнения, естественно, мы нарушаем всю коммуникацию с внешним устройством и после одной такой остановки дальнейшее пошаговое исполнение теряет смысл.

Вывод: любопытный инструмент, но нам пока не удалось найти ему качественное применение на практике.

Практические рекомендации

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

1. Счетчики ошибок. Добавляйте их везде, где это возможно. Ошибки контрольных сумм, ошибки доступа, протокольные ошибки. Например: видим ошибку CRC — заводим счетчик ошибок CRC, замечаем появление некорректных данных в пакете — учитываем их тоже.

2. Счетчики статистики: счетчики данных, счетчики пакетов, счетчики запросов. Все блоки так или иначе обрабатывают данные — входные или выходные. Очень полезно поставить счетчик, чтобы видеть, сколько пришло на вход и сколько передано на выход.

Если это пакетные данные, то считаем количество пакетов, если пакетам предшествует какой-то запрос (handshake) — считаем, сколько этих запросов было. На этапе отладки счетчики помогут определить, где потерялись данные в длинной цепочке из нескольких блоков.

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

Как быть Леди:  Значение поцелуев в разные места для мужчин и женщин

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

4. Обработка всех сигналов ошибок. Если от сторонних блоков или интерфейсов в ваш блок приходят сигналы ошибки, их нужно обрабатывать, даже если они кажутся маловероятными или невозможными. Как минимум – все сигналы ошибок нужно фиксировать, чтобы определить причину проблемы, когда устройство перестанет работать или его поведение станет непредсказуемым.

Для примера вернемся к нашему контроллеру PCI Express: почему нужно обрабатывать такую ошибку, как потеря линка? Вероятность того, что endpoint, который коммуницирует с root-комплексом, вдруг потеряет линк, стремится к нулю, но если такая ситуация возникнет, мы должны знать, что она была.

5. Анализ флагов FULL / EMPTY и ситуаций UNDERFLOW / OVERFLOW

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

Для отладки полезно добавить логику, которая будет детектировать ситуации чтения из пустого буфера (underflow) и записи в переполненный (overflow). Так мы оперативно обнаружим место, где теряются данные, или, наоборот, — появляются из ниоткуда.

6. Обеспечение доступа к состояниям FSM

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

LTSSM — link training and status state machine

Изображённый на этой схеме конечный автомат – это автомат инициализации линка PCI express (LTSSM). И практически все ядра PCIe позволяют вывести состояние этого автомата за пределы ядра, так что этим требованием пользуются даже крупные вендоры, в частности, Xilinx и Altera.

7. Чтение документации «от корки до корки»

Это очень скучная рекомендация, но крайне полезная. Если на интерфейс или ядро, с которым вы работаете, есть документация (а она должна быть), читайте ее целиком. Да, совет может показаться странным, потому что на некоторые ядра документация занимает не одну сотню страниц.

Например, возьмем ядро PCI Express, работающее на уровне TLP-пакетов. Читаем документацию и видим, что в качестве интерфейса взаимодействия с пользователем задействован AXI Stream. Хочется пролистать этот раздел, ведь мы и так знаем, как работает и за что отвечают сигналы интерфейса AXI Stream.

8. Применение автоматических синтезаторов HLS, Simulink (где возможно)

Ну и, наконец, последнее: применяйте по возможности автоматические синтезаторы. Например, среду HLS, которая позволяет реализовать вашу логику на языке С / С . Или продукт Simulink, который позволяет реализовать логику FPGA на базе огромного набора стандартных библиотечных компонентов, а потом нажатием одной кнопки синтезировать из этого описание — HDL-код.

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

В заключение отметим важный аспект: рекомендация «обеспечить доступ» к различным счетчикам и состояниям внутри ПЛИС, подразумевает разные варианты реализации:

1. Можно добавить к заведенным переменным встроенный отладчик типа Chipscope. Но бывает, что таких сигналов набирается слишком много, а оставлять Chipscope в устройстве, которое мы передаем пользователю в промышленную эксплуатацию и тестирование — не совсем корректно.

2. Обеспечить доступ через один из доступных интерфейсов ко всем регистрам, которые можно завести на этапе описания кода. Примеры реализации:

3. Не забываем про светодиоды: более наглядного способа индикации работоспособности устройства с разработанной прошивкой еще не придумано.

Вот мы и рассмотрели самые распространенные ошибки и решения проблем при отладке устройств на базе FPGA. Надеемся, что осознанное написание кода и внимательное чтение документации позволит вам менять принцип 20/80 в свою пользу и ощутимо сократить время отладки и тестирования в общем плане проекта.

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

Первая версия этой статьи была опубликована в нашем блоге на Хабре.

Подробнее о программировании ПЛИС

Принцип 20/80 для разработки и отладки fpga-проекта

Как показывает наш опыт и опыт коллег по FPGA-разработке, моделирование и отладка обычно занимают бо́льшую часть времени на проекте. Можно ориентироваться на закон Парето: порядка 20% времени уходит на саму разработку, написание кода, реализацию верхнего уровня дизайна в виде блок-диаграммы и порядка 80% — на тестирование, отладку и поддержку.

Диаграмма «Распределение времени на разработку и отладку FPGA-проекта»

С чем связано такое суровое распределение на 20/80?

  1. Отчасти это обусловлено самим итерационным процессом разработки. Каждая итерация занимает много времени, большие проекты требуют много времени на этапе пересборки. Например, час-полтора минимум для типового проекта для ПЛИС Xilinx (такой как Xilinx Zynq UltraScale ). Есть и более крупные проекты, которые могут собираться гораздо дольше.
  2. Для успешного завершения процесса отладки от FPGA-разработчика требуется не только навык написания прошивки на одном из HDL-языков или создания его блок-дизайна, но еще и навыки программирования на других языках. Например, Си и Python для написания некоторых тестовых скриптов. Также может понадобиться и такой скриптовый язык как Tcl.

А теперь давайте разбираться с тем, как сократить этап отладки, который стоит в нашем рабочем процессе на последнем месте, но занимает основную часть времени проекта.

Разрушающий метод контроля

При использовании встроенных отладчиков важно помнить, что использование ChipScope, SignalTap и Identify RTL Debugger — это разрушающий метод контроля. При добавлении отладчика внутрь FPGA-прошивки мы нарушаем логику ее работы: занимаем часть ресурсов ПЛИС, за счет этого меняется раскладка проекта внутри кристалла, меняются временные параметры, и в результате мы получаем не на тот продукт, который был до момента добавления отладчика.

Сложности при отладке распределенных систем

1. Невозможность подключиться ко всем ПЛИС одновременно. Если у нас большое число FPGA-устройств, мы не можем одновременно подключиться к встроенному отладчику через JTAG. Первая проблема: у вас может не оказаться 10 компьютеров для подключения к каждому модулю.

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

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

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

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

Теория относительности

«Альберт Эйнштейн так часто рассказывал мне свою теорию относительности, что мне даже показалось, что он ее все-таки понимает»

Хаим Вейцман, первый президент Израиля.

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

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

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

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

Как быть Леди:  Зона дискомфорта (2020) - сериал - информация о фильме - российские фильмы и сериалы - Кино-Театр.Ру

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

Первое что приходит на ум обычному обывателю формула e=m*c2, то есть энергия = масса умноженная на скорость света в квадрате. Останавливаться на данной формуле смысла не имеет, моя задача вербально вам передать смысл теории относительности А. Эйнштейна.

Из формул преобразования, допуская равноправность всех точек нашей необъятной вселенной и направлений, приходим к одному выводу, скорость света во всех системах отчета одинакова.

Скомпилировав знания специальной теории относительности можно вывести 3 положения:

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

2. Существует предельная скорость распространения взаимодействий.

3. Время и пространство однородны, само пространство является изотропным (одинаковые физические свойства во всех направлениях).

Но все это были цветочки специальной теории относительности. Основным камнем преткновения была гравитация, которая никак не хотела отдаваться физику в его крепкие объятья. Эйнштейну пришлось потратить 7 лет, чтобы усмирить хулиганку гравитацию и вырвать из нее всю спесь. Так родилась на свет Общая Теория Относительности (ОТО).

Как узнать, что на нас действует сила гравитации? Если вы хоть раз сидели за рулем автомобиля и резко нажимали на педаль газа, то вас непременно вдавливало в сиденье. После разгона, автомобиль едет равномерно и прямолинейно, отпуская вас от прижимного объятья.

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

Наконец мы добрались до самой мякотки искривление пространства – времени. Зададимся вопросом, что же все-таки искривляет пространство и время? Согласно Общей Теории Относительности его искривляет наличие массы. Наличие массы, меняет расстояние между двумя точками (хотя эта аналогия не совсем точна, для этого нужно вводить систему координат).

Приведу тривиальный пример, как можно проверить искривление пространства-времени на практике. Берем круглый обруч, натягиваем на него ткань (не слишком жесткую) и кладем сверху теннисный мяч. Провал мячика в ткань и есть искривление пространства материи благодаря массе.

Чем глубже провал мячика, тем больше масса объекта. Так выглядит простейшее объяснение искривления пространства времени. Однако добавлю, что мой пример не совсем корректен, в действительности искривление от 3-х мерных объектов происходит со всех сторон, то есть не только низ прогибается под массой теннисного шарика, но и другие стороны пространства времени.

Искривление пространства - времени
Искривление пространства – времени

Из этой теории можно вывести, что луч, пролетая мимо массивного тела будет:

1. Лететь равномерно и прямолинейно.

2. Но расстояние между лучом и массой, меняется из-за наличия искривляющей пространство – время массы, что приводит к отклонению света от прямой линии.

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

Типы инструментов для отладки fpga

У программистов — высокоуровневых или embedded — для отладки есть большой инструментарий: дебаггеры, возможность пошагово исполнять программный код, широкие возможности по логированию работы программы. А вот у FPGA-разработчиков для отладки своих ПЛИС набор инструментов ограничен. Итак, что у нас есть:

  1. Измерительное оборудование: осциллографы и логические анализаторы. Эти инструменты позволяют понять, что происходит за пределами ПЛИС, но не дают заглянуть внутрь. С их помощью можно отладить внешний интерфейс и посмотреть, как ПЛИС взаимодействует с внешним миром.
  2. Встроенные средства отладки позволяют заглянуть внутрь ПЛИС. Такие инструменты есть у всех популярных производителей FPGA и называются они по-разному: у самого известного производителя, Xilinx, – это ChipScope, у Intel (ex. Altera) – SignalTap, у Microchip (ex. Microsemi) – продукт от Synopsys, который называется Identify RTL Debugger. Встроенные отладчики схожи по функциям.

Примеры встроенных отладчиков компаний Xilinx, Intel (ex. Altera) и Microchip (ex. Microsemi)

Три типичные ошибки процесса отладки fpga

А теперь рассмотрим типичные ошибки на этапе отладки. Если вам удастся их избежать, вы сэкономите массу проектного времени.

Вывод

Честно говоря, меня штормило как корабль в сильный шторм, когда я брался за столь мудреную тему. Я ни разу не профессионал, не имею докторских степеней и не участвовал в разработке БАК. Все мои знания компилировались с самого детства, швыряя меня от дрянной литературы, различных религиозных конфессий, занудного философствования и наконец, к фундаментальной науке.

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

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

Это не снимает вопросов и ложных показаний с естественных наук. Как и всякие учения, наука имеет в своем арсенале ошибки и погрешности, но стоит признать, что все остальные виды доктрин среди этого великана, фекалии с неприятным амбре. Хочу лишь добавить, что пофантазировать немного пришлось, но отступы от точных наук были минимальны.

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

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

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

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

И все-таки, какую сторону я выбрал? Если вы внимательно читали мою статью, я думаю, вы догадались что я сторонник детерминированного мира, построенного на взыскательной науке. Точнее это звучит так, вселенная это хаотическая система, строго детерминированная и упорядоченная законами природы в замкнутой системе.

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

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

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

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

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

https://www.youtube.com/watch?v=gULE3G-2ppg

Спасибо за внимание и терпение.

Оцените статью
Ты Леди!
Добавить комментарий