Если вы собираетесь собеседоваться в Apple или Байкал на одну из позиций по проектированию или верификации систем на кристалле (System-on-Chip - SoC), вам совершенно абсолютно точно нужно подготовиться к вопросам по пересечению тактового домена (Clock Domain Crossing- CDC). В SoC типа айфона есть много разных блоков, которые работают на разной тактовой частоте. Чтобы передача данных между ними не глючила, нужно 1) знать почему она может глючить; 2) владеть приемами, которые позволяют избегать этих глюков и 3) четко понимать как используемые приемы влияют на пропускную способность соединения.
Подготовиться к этой секции интервью нужно основательно. Если вы только почитаете про метастабильность в Харрис & Харрис и начнете выкручиваться в стиле ответов Алисы Тепляковой "а, метастабильность ... даа, синхронайзеры ... ммм ... асинхронные FIFO ..." - то тройку на экзамене у жалостливого преподавателя нетопового университета стран бывшего СССР вы может и вытяните, но хорошую работу в коммерческой компании не выиграете.
Как же подготовиться? В Америке по такому вопросу готовят на шестичасом семинаре, который стоит $800 с каждого ученика в классе. Но в России группа энтузиастов подготовила бесплатный семинар, на основе как открытых статей автора американского семинара Клифа Каммингса, так и практикума из МИЭТ и собственных лабораторных занятий.
Присоединяйтесь к следующему занятию Сколковской Школы Синтеза Цифровых Схем, которое пройдет 12 марта 2022 года в Капсуле №2 Технопарка Сколково с 12:00 до 15:00.
Школа 2021/22. Занятие 15. Асинхронные частоты, пересечение клоковых доменов и синхронизация. Ведет занятие Александр Силантьев, МИЭТ
Если вы хотите прийти на занятие в Сколково, напишите емейл Александру Биленко info@chipexpo.ru (это гарантирует место с компьютером и FPGA платой). Если вы не умеете работать с FPGA платами - не беда, бОльшая часть материала показывается с помощью симуляции.
Также желательно зарегистрироваться на сайте Школы. Зарегистрировавшиеся получат по емейлу упражнения для проверки своих знаний и умений.
Если не можете приехать - вот трансляция в Youtube, которая начнется в субботу в полдень.
Интересных занятий!
UPD: в комментах запросили ссылку на упражнения с CDC в репозитории Школы Синтеза. Вот они. А код для асинхронного FIFO есть в статьях Клифа Каммингса - первая, вторая.
Еще в комментах пожурили про отсутствие ссылки на статью Клифа Каммингса на SNUG. Я думал что ссылки я которую я привел выше на семинар Клифа Каммингса достаточно, но если хочется все четыре ссылки на Клифа Каммингса, то вот четвертая, на статью с SNUG.
Комментарии (14)
schulzr
13.03.2022 10:41Юрий, а предполагается дать всем доступ в гит с упражнениями? Если да, то можно попросить ссылку - я не смог отыскать. Спасибо.
YuriPanchul Автор
13.03.2022 11:17+2Упражнения с CDC в репозитории Школы Синтеза вот здесь:
https://github.com/DigitalDesignSchool/ce2020labs/tree/master/next_step/Sylantiev/cdc_lab
Правда там нет про асинхронное FIFO, но код для асинхронного FIFO есть в статьях Клифа Каммингса
http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO1.pdf
http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO2.pdf
te3s
13.03.2022 20:19Львиная доля материалов в видео украдена из статьи Clifford E. Cummings, представленной на конференции SNUG-2008. Статья есть в открытом доступе здесь:
http://www.sunburst-design.com/papers/CummingsSNUG2008Boston_CDC.pdf
Вообще поразительно просто. Что в этой статье у Панчула нет ссылки на первоисточник, что в видео, думаю, ни одной ссылки тоже нет (поправьте меня, если это не так). Хотя нагло украдено все, даже картинки свои поленились нарисовать, а просто выдрали из статьи. Пиарить свои семинары, используя чужой материал, причем из 2008 года, без упоминания авторства, ну-ну, хороший подход.YuriPanchul Автор
13.03.2022 20:30+2А вы внимательно читали пост, глазами, а не попой?
Во-первых, я привел ссылку http://www.sunburst-design.com/systemverilog_training_schedule/ на семинар Клифа Каммингса в посте.
Во-вторых, я черным по белому написал "в России группа энтузиастов подготовила бесплатный семинар, на основе как открытых статей автора американского семинара Клифа Каммингса, так и практикума из МИЭТ и собственных лабораторных занятий.
В-третьих, я привел ссылку на две другие статьи Клифа Каммингса в комменте выше.
Но я согласен, что и ссылку на статью из SNUG-2008 тоже нужно было привести. Я думал что Александр Силантьев эту ссылку привел, но сейчас посмотрел в слайды и увидел, что там ее нет. Я скажу ему чтобы поставил. Спасибо.
te3s
13.03.2022 20:50+2Я пробежал глазами и ссылку на самую главную статью так и не увидел, о чем и написал и попросил поправить меня, если это не так. Статья, действительно, очень важная, а самое главное, что находится в открытом доступе, в отличие от платного американского семинара. Про российский семинар просто еще раз отмечу, что странно построить практически весь семинар на чужой статье, выдрав даже картинки, не упоминая ту самую статью в открытом доступе. Надеюсь, что Александр Силантьев ссылку добавит.
YuriPanchul Автор
13.03.2022 21:00Обязательно добавит, я ему уже написал. При этом семинар построен, как я сразу сказал, не только на статье Клифа Каммингса, но и на лабах, которые я написал в 2019 году. Вот мой код, это не от Клифа Каммингса - я сначала показываю как без приемов CDC передача глючит, а потом с использованием приемов из статьи Клифа Каммингса, передача не глючит:
https://github.com/yuri-panchul/2019-examples/tree/master/next_step_examples/03_cdc/
Это же в репозитории школы:
https://github.com/DigitalDesignSchool/ce2020labs/tree/master/next_step/Sylantiev/cdc_lab
Кроме этого Александр Силантьев переносил это на FPGA, этого тоже нет у Клифа Каммингса, это потом он добавит в репозиторий.
vkni
13.03.2022 23:07Правильно ли я понимаю, что это всё-таки не разработки 2008 года, а сильно раньше? Эта статья всё-таки "научно популярная", так?
Юрий, как всегда, большое спасибо за вашу деятельность, несмотря на определённую критику.
Кстати, с учётом того, что OSS сильно уменьшает риски, стоит ли ждать открытых аналогов всего того софта, который вы используете для работы? То есть, надеяться, что ваша область придёт к тому же, к чему пришло компиляторостроение, когда наилучшие по качеству профессиональные инструменты открыты, а не закрыты.checkpoint
14.03.2022 00:53Ждать не нужно, нужно брать и поддерживать - переносить свои проекты на Yosys/NextPNR увеличивая базу пользователей, дописывать софт и сопутствующие утилиты, реверсить ПЛИСы. Само ничего не народиться.
YuriPanchul Автор
14.03.2022 08:48*** Правильно ли я понимаю, что это всё-таки не разработки 2008 года, а сильно раньше? Эта статья всё-таки "научно популярная", так? ***
Материалы Клифа Каммингса и мои с Александром Силантьевым примеры - это результат находок разных инженеров за последние 30 лет. Внутри каждой крупный электронной компании в каждой группе проектирования есть библиотека примитивов и асинхронные FIFO, как и другие блоки для CDC в них всегда есть. То есть это не научно-популярная статья и не изобретение Клифа Каммингса, а набор приемов и рецептов, который является ноу-хау всей индустрии.
*** стоит ли ждать открытых аналогов всего того софта, который вы используете для работы? ***
К сожалению сейчас открытый софт (Yosys , OpenLANE итд) находится примерно в таком же состоянии, в котором Linux находился по отношении к Windows а начале 1990-х. В обычных условиях пользоваться им имело смысл только для исследователей и аспирантов. Но в современных условиях России, когда санкции могут быть несколько лет, имело бы смысл сделать как российский аналог синтеза для FPGA, так усилить open-source ASIC design tools чтобы хоть как-то выкрутиться, производя микросхемы на зеленоградском Микроне. Тут нет ничего невозможного, но потребуется много сильных алгоритмически мыслящих программистов с пониманием хардвера и автоматизации проектирования, при плотной поддержке фаба.
Chetverovod
Обсуждаемый вопрос, на мой взгляд, скорей относится к разработчику, чем к специалисту по верификации. Сужу по моему опыту участия в двух проектах в качестве инженера по верификации.
YuriPanchul Автор
Он к верификации относится тоже. Когда вы строите асинхронное FIFO с счетчиками Грея итд - вам нужно верифицировать, что логика full/empty работает правильно, не происходит переполнения FIFO, переданые данные появляются в правильном такте итд. Когда вы добавляете к этому FIFO кредитные счетчики, их работу тоже нужно верифицировать. Для всего этого нужно написать на SystemVerilog тестовое окружение (testbench) c генерацией двух тактовых сигналов разной частоты, написать тесты, тестовое покрытие (functional coverage), утверждения темпоральной логики (concurrent assertions) и проверять соответствие между поведением RTL (реализацией схемы на уровне регистровых передач) и модели (на уровне транзакций). Это работа верификатора.
Chetverovod
В моем случае модули представлялись как черные ящики, тесты были интеграционные и системные. В описываемом вами случае получается, что верификатор должен понимать, что "сваял" разработчик лучше самого разработчика, быть эдаким гуру.