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

Если вы собираетесь собеседоваться в 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)


  1. Chetverovod
    12.03.2022 21:16
    +2

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


    1. YuriPanchul Автор
      12.03.2022 23:22
      +2

      Он к верификации относится тоже. Когда вы строите асинхронное FIFO с счетчиками Грея итд - вам нужно верифицировать, что логика full/empty работает правильно, не происходит переполнения FIFO, переданые данные появляются в правильном такте итд. Когда вы добавляете к этому FIFO кредитные счетчики, их работу тоже нужно верифицировать. Для всего этого нужно написать на SystemVerilog тестовое окружение (testbench) c генерацией двух тактовых сигналов разной частоты, написать тесты, тестовое покрытие (functional coverage), утверждения темпоральной логики (concurrent assertions) и проверять соответствие между поведением RTL (реализацией схемы на уровне регистровых передач) и модели (на уровне транзакций). Это работа верификатора.


      1. Chetverovod
        13.03.2022 19:57

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


  1. Chetverovod
    13.03.2022 08:45
    +2

    Лекция отличная, спасибо!


  1. schulzr
    13.03.2022 10:41

    Юрий, а предполагается дать всем доступ в гит с упражнениями? Если да, то можно попросить ссылку - я не смог отыскать. Спасибо.


    1. 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


      1. schulzr
        13.03.2022 11:33

        Спасибо


  1. te3s
    13.03.2022 20:19

    Львиная доля материалов в видео украдена из статьи Clifford E. Cummings, представленной на конференции SNUG-2008. Статья есть в открытом доступе здесь:
    http://www.sunburst-design.com/papers/CummingsSNUG2008Boston_CDC.pdf

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


    1. YuriPanchul Автор
      13.03.2022 20:30
      +2

      А вы внимательно читали пост, глазами, а не попой?

      Во-первых, я привел ссылку http://www.sunburst-design.com/systemverilog_training_schedule/ на семинар Клифа Каммингса в посте.

      Во-вторых, я черным по белому написал "в России группа энтузиастов подготовила бесплатный семинар, на основе как открытых статей автора американского семинара Клифа Каммингса, так и практикума из МИЭТ и собственных лабораторных занятий.

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

      Но я согласен, что и ссылку на статью из SNUG-2008 тоже нужно было привести. Я думал что Александр Силантьев эту ссылку привел, но сейчас посмотрел в слайды и увидел, что там ее нет. Я скажу ему чтобы поставил. Спасибо.


      1. te3s
        13.03.2022 20:50
        +2

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


        1. 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, этого тоже нет у Клифа Каммингса, это потом он добавит в репозиторий.


          1. vkni
            13.03.2022 23:07

            Правильно ли я понимаю, что это всё-таки не разработки 2008 года, а сильно раньше? Эта статья всё-таки "научно популярная", так?

            Юрий, как всегда, большое спасибо за вашу деятельность, несмотря на определённую критику.

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


            1. checkpoint
              14.03.2022 00:53

              Ждать не нужно, нужно брать и поддерживать - переносить свои проекты на Yosys/NextPNR увеличивая базу пользователей, дописывать софт и сопутствующие утилиты, реверсить ПЛИСы. Само ничего не народиться.


            1. YuriPanchul Автор
              14.03.2022 08:48

              *** Правильно ли я понимаю, что это всё-таки не разработки 2008 года, а сильно раньше? Эта статья всё-таки "научно популярная", так? ***

              Материалы Клифа Каммингса и мои с Александром Силантьевым примеры - это результат находок разных инженеров за последние 30 лет. Внутри каждой крупный электронной компании в каждой группе проектирования есть библиотека примитивов и асинхронные FIFO, как и другие блоки для CDC в них всегда есть. То есть это не научно-популярная статья и не изобретение Клифа Каммингса, а набор приемов и рецептов, который является ноу-хау всей индустрии.

              *** стоит ли ждать открытых аналогов всего того софта, который вы используете для работы? ***

              К сожалению сейчас открытый софт (Yosys , OpenLANE итд) находится примерно в таком же состоянии, в котором Linux находился по отношении к Windows а начале 1990-х. В обычных условиях пользоваться им имело смысл только для исследователей и аспирантов. Но в современных условиях России, когда санкции могут быть несколько лет, имело бы смысл сделать как российский аналог синтеза для FPGA, так усилить open-source ASIC design tools чтобы хоть как-то выкрутиться, производя микросхемы на зеленоградском Микроне. Тут нет ничего невозможного, но потребуется много сильных алгоритмически мыслящих программистов с пониманием хардвера и автоматизации проектирования, при плотной поддержке фаба.