Pull to refresh
344
85.7
Юрий Панчул / Yuri Panchul @YuriPanchul

Проектировщик CPU, GPU, сетевых микросхем

Send message

На асиках сейчас чаще синхронный чем асинхронный ресет по моему опыту

На моих последних трех работах сброс был синхронный, а не асинхронный. См. дискуссию в статье Synchronous Resets? Asynchronous Resets? I am so confused! How will I ever know which to use? Clifford E. Cummings Don Mills.

Про отсутствие инициализации в ASIC-ах (только сброс) согласен.

В больших компаниях чаще всего С++ модели на самопальных библиотеках, которые общаются с верилогом тремя способами:

  1. Verilog wrapper + DPI интерфейс + Bus Functional Model (BFM) для преобразования транзакций в модели на изменение сигналов на враппере.

  2. SystemC wrapper на верхнем уровне модели + BFM. У SystemC есть нативная интеграция с Xcelium и VCS поэтому не нужно возиться с DPI.

  3. C++ модель пишет в текстовый лог/ dump, который потом в отдельной симуляции подают через чтение этого лога в верилог.

Таким образом можно моделировать все: сетевые, графические чипы и CPU.

При этом процессорные компании (CPU) еще используют для верификации Instruction Set Simulators типа Imperas, с которым они делают сравнение следующим макаром: при каждом instruction retire / instruction graduation в RTL (котороче когда инструкция заканчивает исполнение и обновляет архитектурные регистры), проверяется что в регистрах модели те же значения (тут есть нюансы сравнения). В принципе в качестве такой модели можно использовать и QEMU, но в нем слишком много несоответствий с архитектурными спецификациями, поэтому это идея так себе.

В приципе последние 15-20 лет транзакционные модели можно писать на SystemVerilog не хуже чем на C++, а лучше (это то что я рекомендую, если вы используете быстрый симулятор - Cadence или Synopsys), но в больших компаниях как правило код этих C++ моделей тянется из 1990-х или нулевых, плюс на рынке больше программистов на C++ чем на SystemVerilog c advanced modeling skills.

Есть всякие стартапы которые пишут модели на питоне, но это пока они маленькие - потом это превращается в регрессии на несколько дней вместо часов.

Я был таким программистом в 1996 году (см. коммент выше)

Я ровно такой же пример написал, но только на C++ , аж в 1996 году. Тоже class counter : module { Input<4> a; итд. Пошёл к Расселу Клайну, маркетеру в Mentor Graphics. Он мне сказал: это очень мило, но рынок хочет другого. И он был прав. Это вообще первая идея, которая приходит каждому ООП программисту при виде верилога (переписать verilog или vhdl на c++ или джаву)

Дизайнеры матюкались на SystemC сразу в 1998-1999, когда менеджеры просили их попробовать то, что им впаривали продажники Synopsys. Поэтому продажники стали пробовать другие категории пользователей, но я знаю абсолютно точно, что они не продали ничего за деньги, потому что в 2002 году шел по коридору, заглянул на презентацию продажников и увидел там жирный ноль. То есть до этого они четыре года пытались, чтобы клиенты пользовали это бесплатно, но те отбрыкивались даже так. При этом синопсис в статьях говорили "вся индустрия выстроилась за нами". Потом они нашли писателей моделей в Европе и смогли продать им историю про "более высокий уровень моделирования" используя абстракции для интерфейсов от CoWare.

Про скалу - слова class, extends, new не дают никакой информации для схемы и являются артифактами OOP. Не покупаю такое.

А теперь вернемся к "устоявшейся традиции" описывать отдельный блок always для каждого регистра

Нет такой устоявшейся традиции. Просто нет. То есть абсолютно. Я не видел ни в одной компании. Есть компании (Интел, MIPS), где в некотором старом коде были instances для регистров и куча assigns, и есть компании, где бОльшую часть комбинационной логики описывают в always_comb и потом небольшое количество кода в always_ff обновляет регистры, но так чтобы на каждый регистр - отдельно always-блок - такого не видел. Отдельные блоки для resettable flip-flops и не-resettable - да, бывают. Но не always на каждый регистр.

А зачем использовать выдачу автоматического конвертера для сравнения? В причесанном виде этот код выглядит так. И я вообще не покупаю аргумент что Spinal якобы понятнее. Для Scala - программиста - может быть, но я знаю 1 Scala программиста и сотни Verilog пользователейю

module MyTopLevel
(
  input              io_cond0,
  input              io_cond1,
  output             io_flag,
  output logic [7:0] io_state,
  input              clk,
  input              reset
);

  assign io_flag = io_state == '0 | io_cond1;

  always_ff @(posedge clk or posedge reset)
    if (reset)
      io_state <= '0;
    else if (io_cond0)
      io_state <= io_state + 1'b1;

endmodule

Комбинационная и последовательностная логика, выраженная в reg и wire, что для вычислительных конвейеров, что для FSM, что для интерфейсов типа AXI должны работать одинаково в принципе.

"Попробуйте - узнаете" я не принимаю. Всегда должен быть пример кода, в котором получается более кратко, чем с SystemVerilog generate например. Мне такое показывали с строенным в верилог перлом и пример когда Chisel генерит интерконнект для большого количества регионов памяти.

С 2019 по 2023 год, от GPT-2 до GPT-4, был пройден путь от моделей с интеллектом дошкольника до моделей, сравнимых с одаренным старшеклассником.

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

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

А в чем классность Spinal HDL? На первый взгляд куча лишнего синтаксиса:

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

SystemC изначально написали вроде два каких-то студента из Германии в 1996 году и у меня ощущение, что они вдохновлялись вышедшей в том время библиотекой Микрософта для Windows MFC. А Synopsys взяли это под крылышко чтобы вытянуть другой непопулярный продукт (Behavioral Compiler) и вероятно под влиянием маркетеров. Там много стремных вещей, например возможность дедлоков если использовать не SC_THREAD, а SC_METHOD (долго рассказывать). Кое-что есть в моем посте https://panchul.livejournal.com/473865.html

Да, разумеется, просто SystemC настолько известен, что я его пропустил. Сейчас добавлю. При этом в SystemC event queue есть, то есть это не просто update каждый такт старого значения на новое и перевычисление нового.

Да, разумеется, просто SystemC настолько известен, что я его пропустил. Сейчас добавлю. При этом в SystemC event queue есть, то есть это не просто update каждый такт старого значения на новое и перевычисление нового.

Поздно что? Местные русские в Силиконовой Долине в основном называют ее Силиконовой и отмахнуться от этого не получится, если вы не проектируете силикон сами. Не хотите отвечать про динамическое энергопотребление, решите задачку: для какого сценария использования можно при пересечении тактового домена использовать очередь FIFO ширины 0?

1
23 ...

Information

Rating
65-th
Location
Sunnyvale, California, США
Date of birth
Registered
Activity