Pull to refresh

Comments 24

Я совершенно далёк от этой области, но меня всегда интересовало, а каким образом дорогущие fpga защищаются от кз на ножках или вентилях?

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

КМК, сигналы с ПЛИС почти никогда не выводятся во "внешний мир" напрямую. Соответственно - защиты обеспечивают другие ИМС.

А в случае "Synopsis за сотни нефти" - это забота квалифицированных инженеров.

Я очень поверхностно понимаю эту область, но, грубо говоря, если у нас есть набор программируемых вентилей, то что мешает из-за бага в программе сделать их постоянно открытыми между live & ground? Т.е. дело даже не во внешнем мире, а в рамках самой микросхемы. Насколько я мне мой "школьный электронный" подсказывает, если я открываю транзистор без нагрузки в линии, и одна нога у него на землю, а другая на питание, то там протекает максимально возможный ток. Вот от этого как защищаются?

Для I/O пинов применяются схемы защиты на диодах. Поищите такие топики: ESD protection devices, transient voltage surge suppressors, clamping diodes.

Я очень поверхностно понимаю эту область, но, грубо говоря, если у нас есть набор программируемых вентилей, то что мешает из-за бага в программе сделать их постоянно открытыми между live & ground?
В классическом КМОП такая схемотехника, что такой вариант невозможен. Условно говоря, nMOS и pMOS транзисторы всегда соединены парами, и вы физически не можете соединить землю с питанием.

imageВот тут посмотрите, не существует такой комбинации входов, когда земля закорочена с питанием.
В настоящих FPGA все чуть-чуть по-другому, но принцип тот же.

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

А-а-а! Внутри одного вентиля это невозможно, как разъясняет @amartology . А вариант "два устройства одновременно передают на внутренюю шину" - должен(?) отсеиваться при логическом моделировании.

Однажды рассказали, что при разработке забыли подтяжки/"bus keeper" на внутренней шине поставить. И инжерерные образцы ИМС некоторое время работали, а потом "на ровном месте, в простое" выпускали дым...

вариант «два устройства одновременно передают на внутренюю шину» — должен(?) отсеиваться при логическом моделировании.
должен отсеиваться при разработке стандарта внутренней шины.

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

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

Раньше меня тоже интересовал этот вопрос, поскольку несмотря на посты выше, в микросхемах постоянно происходят КЗ в логике, в основном в инверторах. Инветоры используются в виде усилителя сигнала, так в цепи клока их до 99% (буфер считаем за два инвертора), они есть в составе большинства логических селлов и триггеров - опять же в виде выходных усилителей. Момент переключения инвертора - всегда КЗ. Спасает здесь то, что сопротивление открытого канала транзистора - десятки килоОм (pmos), сопротивление цепей питания до транзистора порядка килоОма плюс реактивное за счет паразитных емкостей, плюс надо учесть что события эти не одновременны, т.е. размазаны во времени и по площади чипа.

Т.е. таки КЗ присутствуют, причем постоянно. Но это нормально.

поскольку несмотря на посты выше, в микросхемах постоянно происходят КЗ в логике, в основном в инверторах
Давайте разбираться с терминологией. Если вы называете серозной ток при переключении КЗ, то оно происходит на каждом переключении каждого логического элемента, а не «в основном в инверторах».
Но только это не КЗ, потому что оно не статично. А ситуация, когда в стандартной КМОП-логике возникает именно статичное короткое замыкание земли с питанием, в нормальных обстоятельствах невозможна.

КЗ - короткое замыкание. Деление на статическое и динамическое КЗ мне не понятно. Во временах работы цифровых схем, время переключения инвертора, сопровождающееся открытыми NMOS и PMOS можно считать статическим - ведь за это время происходит полный перезаряд паразитной емкости выхода элемента. Т.е. вполне себе короткое замыкание. Другой пример: если задержка (latency) в цепи клока больше периода, то можно утверждать что в каждый момент времени какой то из элементов цепи дерева коротит питание на землю - т.е. 100% времени мы имеем КЗ в цепи клока. Довольно неожиданный вывод, верно? Однако, ничего страшного в этом нет.
Про каждый логический элемент - не согласен. КЗ при переключении происходит всегда - в инверторах (и выходных усилителях), и только изредка - в первом каскаде многовходовых логических элементов. Очевидно что для этого требуется одновременное переключение потенциала на всех входах - статистически маловероятное событие, зависящее от множества параметров (температура, питание и т.д.). Чем больше входов у логического элемента, тем реже можно увидеть КЗ. А вот в инверторе - на каждом переключении. Если питание выше Vth, разумеется, т.е. речь про нормальный режим работы.

Давайте продолжим говорить об определениях:
Коро́ткое замыка́ние (КЗ) — электрическое соединение двух точек электрической цепи с различными значениями потенциала, не предусмотренное конструкцией устройства и нарушающее его нормальную работу

Ну и это не говоря о том, что вы сами отметили: импеданс одного открытого транзистора довольно велик, и рассматривать переключение инвертора как короткое замыкание — концептуально неправильно.

Очевидно что для этого требуется одновременное переключение потенциала на всех входах — статистически маловероятное событие
В nand на втором статичном входе (или входах) должна быть единица (единицы), в nor — ноль (ноли). Не такое маловероятное событие, как вам кажется.

Рассматривая инвертор как логический элемент на двух ключах и отбрасывая имплементацию (КМОП, БП, электромеханический ключ), мы говорим о событии, когда оба ключа открыты, т.е. КЗ в определении википедии. Если считать инвертер просто аналоговым усилителем (в контексте имплементации), то не КЗ. Но мы говорим о цифре. Получается, что КЗ здесь - очень даже концептуальное

Хочу немного прояснить для себя, что именно симулируется в ПЛИС. Я правильно понимаю, что ядро ARM поставляется в виде множества файлов на языках Verilog, SystemVerilog, VHDL. Вы их компилирует и получаете битстрим для десятка ПЛИС которые в связке симулируют все восемь ядер будущего микропроцессора до последнего вентиля. Или же ARM ядра поставляются в виде blackbox-ов с описанным интерфейсом, их симуляция не производится совсем (используются готовые ядра "в кремнии" или эмулируются средствами встроенных PowerPC ядер в Xilinx Virtex-7), а в ПЛИС симулируется только разработанная вами часть "обвеса" ?

Ядра поставляются в виде верилога. Все восемь ядер не поместятся в указанную конфигурацию HAPS, 2 или 4 помещаются. Но ядра это меньше трети площади кристалла. Критически важно проверить обозначенные сценарии загрузки в составе, например: сервисный процессор-загрузчик, 2 ядра Arm, когерентный интерконнект, низкоскоростная периферия, контроллер DDR. И да, самописный "обвес" везде присутствует. В RTL симуляторах симулируется все, и даже для самых критически важных сценариев синтезированный нетлист.

Прототипирование у нас используется прежде всего для системной валидации и ранней разработки ПО, такого как программы загрузчиков сервисного процессора, загрузчиков Arm TF, UEFI, ОС Linux.

Получается, что системноая валидация и ранней разработки ПО выполнялась без несинтезабельных блоков (вроде SRAM, PHY...), заменённых ресурсами ресурсах FPGA. Так ?

Верно, но также см. ссылку в начале заметки на нашу статью о косимуляции несинтезабельных в FPGA частей дизайна. Там отлаживали ПО на оригинальных DDR phy в RTL симуляторе + синтезабельный топ дизайна на HAPS. И конечно же на RTL симуляторе верифицировались все оригинальные phy, SRAM и пр. как на уровне отдельных подсистем, так и на топе.

Небольшой вопрос — почему был выбран именно Synopsys, а не более мелкие «акулы», к примеру profpga?

На момент выбора платформы в индустрии HAPS был безусловным лидером. Это и зрелость платформы в несколько поколений, масштабтруемость, наличие дочерних карт, наличие своего уникального софта для партишенинга. Плюс нативная интеграция с EDA тулами в Байкале, которые тогда все были от Synopsys. Байкал был первым во всей Европе, у кого появился HAPS-70 в 2014г.

В плис тестируется только RTL, или этапы имплементации тоже? К примеру, DFT: режим скан, компрессоры/декомпрессоры, мультиплексоры клоков, оболочки а-ля ieee 1500, jtag tap, граничное сканирование, mbist, и т.д.

Только RTL, ведь главная цель - ранняя отладка софта. Ловля багов побочная цель, для этого есть верификаторы. Симуляция отлично покрывает сканы и mbist в приемлемые рантаймы.

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

Sign up to leave a comment.