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

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

Send message

Это с помощью ChatGPT писалось?

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

"Для того чтобы вы поняли мой ответ, у вас должна быть база. Рекомендации как получить базу я уже дал (см. ниже). Альтернативные способы получения базы ничем не лучше. Получать базу с помощью новых неотлаженных тулов неэффективно, потому что вы будите натыкаться на больше проблем, чем с обычными тулами. На ваши дальнейшие ответы я буду отвечать, когда вы сделаете упражнения 1 и 2 с симулятором, а также приобритете дешевую FPGA плату, запустите на ней примеры 1-5 и 7-10 и пришлете мне видео запуска".

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

*** отому что в железе всё равно не воплотить в домашних условиях. ***

Можно на FPGA но это полезно только для специфического класса задач, а также для обучения на ASIC дизайнера.

*** Скомпилировал пример &, посмотрел результаты, подумал "а чё, круто!", вспомнил университет и практику по дискретной математике ***

Пример с & к сожалению не помогает оценить дух деятельности, а даже вводит в некоторое заблуждение, потому что начинает казаться, что там все комбинационная логика, хотя там основа - это схемы с последовательностной логикой (то есть комбинационная + элементы состояния / D-триггеры), и уж из них строятся структуры следущего уровня - конечные автоматы, конвейеры с очередями итд.

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

Хорошо, простой вопрос вам. Что делать с человеком, который полгода пару раз в неделю присылает сообщения, которые включают: 1. вопрос что я думаю про технологию XYZ, при том что я знаю, что короткий ответ он не поймет, а длинный c отсылками на учебники не будет читать (пример: FireSim выше), 2. рекомендации игнорирует и вместо этого спрашивает мнение про альтернативы, 3. спрашивает когда я могу выбрать время чтобы "серьезно поговорит? Разговор с анализом его уровня и сравнениями учебников был полгода назад и с тех пор никакой новой информации не появилось, потому что он не сделал ни одного упражнения ни по какому учебнику - ни по рекомендованным, но по альтернативным.

Моя цель не просто мотивировать всякого, а находить для себя помощников для создания примеров для образовательных программ, которые я помогаю вести в России и других странах. Если в процессе обучения человек вырастает до уровня, когда он может пройти интервью в электронную компанию, я даю ему рекомендацию. По моей рекомендации люди устроились в Samsung, MIPS, Imagination (а потом Apple), выучились и устроились в Syntacore и другие компании.

Но что мне делать, если человек полгода не следует моим рекомендациям, а не делает даже первого шага и при этом задает мне дурацкие вопросы? Я ему сказал: потратьте 10 минут, скачайте Icarus Verilog, сделайте на нем первое упражнение, добавьте 2 строчки верилога. Теоретическая база находится в главе 4 Харрис & Харрис.

Что человек делает вместо этого? Он игнорирует рекомендацию и через некоторое время спрашивает мое мнение про FireSim (ускоритель симуляции для больших проектов) и еще дюжину продуктов такого рода. Как мне на это отвечать, если у него нет базы, отправной точки для сравнения, с которой я ему посоветовал начать? Что мне ему ответить? Так и сказать "это для больших проектов"? Или методично разжевывать для каких проектов икаруса недостаточно и почему FireSim являтся cycle functional accurate, но непригоден для оценки максимальной тактовой частоты симулированного с ускорением ASIC-а? А чем это отчается от проповеди птицам (чем занимался святой Франциск), если товарищ за полгода не удосужился сделать ни один пример ни с обычным симулятором, ни с FPGA платой?

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

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

Итак мой совет (который я ему повторял несколько раз, он его игнорирует и спрашивает снова):

The steps:

  1. get a cheap FPGA board,

  2. read a textbook like https://www.amazon.com/Digital-Design-Computer-Architecture-RISC-V/dp/0128200642 ,

  3. In parallel start from the first example https://github.com/yuri-panchul/basics-graphics-music/tree/main/labs/01_and_or_not_xor_de_morgan

  4. then go to the second.

  5. After https://github.com/yuri-panchul/basics-graphics-music/tree/main/labs/10_hex_counter start look to the homework exercises https://github.com/yuri-panchul/systemverilog-homework

  6. Eventually get another textbook https://www.amazon.com/Digital-Design-Systems-Approach-2012-09-17/dp/B01FIWOYVU/ and start doing exercises with pipelines and fifos.

  7. Extend to the simplest CPU cores https://github.com/zhelnio/schoolRISCV then to more complicated cores.

Do everything in small steps, but in a systematic way. After several months you will know what to do better.

Это он по-видимому и делает, и я ему написал, что если он хочет участвовать в создании обучающих примеров и использовать созданный им пример как основу для темы диплома, то это прекрасно. Но как он собирается написать диплом без написания кода? И как он собирается писать код, если он не выучил основы технологии? Если бы он начал по моим рекомендациям делать упражнения по верилогу 6 месяцев назад (симулятор + FPGA платы) то сейчас он бы мог сделать пример использования генетических алгоритмов для генерации простых последовательностных схем. Но этого нельзя делать, если не знать что такое последовательностная схема и как ее можно мутировать. А чтобы это узнать нужно делать упражнения, например вот такое. А без упражнений можно только сделать жульничество какое-нибудь словестное с чатом гпт. Но при устройстве на работу это не пройдет.

Это использование CPLD для "склеивания" шин в системе. Я понимаю такое применение, но я не ориентируюсь на людей, которые используют верилог только для таких случаев. Я работаю в команде графического процессора GPU в самсунговских телефонах, в котором больше миллиона строк на верилоге и оно все состоит вот из таких конструкций как я описал выше (конвейеры данных и шейдеров, очереди, конечные автоматы итд). Соотвественно я и оптимизирую программу обучения под то, чтобы студент мог пройти интервью на джуна в такой проект.

А для этого нужно чтобы он в голове представлял как в стадии конвейера старое состояние переходит в новое. Оно конечно не обязательно выражается парой always-блоков (комбинационным и clocked), а может состоять из графа continuous assignments, которые потом входят в D-вход D-триггера, но и в таком случае в графе нет комбинационных циклов, то есть его всегда можно представить как функцию new_state = f (old_state).

И эта "f" ведет себя как программа. Сложность для программиста чтобы представить что это происходит во всех стадиях конвейера одновременно. Но когда этот ментальный блок пробит, дальше все становится детерминированным и более-менее понятным.

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

Просто нужна правильная ментальная модель. Код на верилоге - это функция преобразования текущего состояния (состояние D-триггеров дизайна в текущем такте) в новое состояние (состояние D-триггеров дизайна в следущем такте).

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

Упражнения на которые я его отправил начинаются по уровню сложности не выше hdlbits, но потом идут дальше, до конвейерных блоков и очередей - см. https://github.com/yuri-panchul/systemverilog-homework

А также, параллельно с ними, занятия на FPGA плате по https://github.com/yuri-panchul/basics-graphics-music

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

Это вы явно каким-то кривым маршрутом шли. Вы что, взяли реализацию x86 ядра на VHDL и начали его оживлять? Таким образом вы до уровня чтобы проходить интервью в электронную компанию не доучитесь. Потому что на интервью в Apple, NVidia, AMD, Samsung, Juniper итд итп спрашивают вопросы про конвейерные блоки, очереди, статический анализ тайминга, немного FSM и (для более продвинутых позиций) пересечение тактового домена, кодирования для экономии динамического энергопотребления итд. А не как мастерить на VHDL и Xilinx старую неконвейерную IBM PC XT и играть на ней в Leisure Suit Larry in the Land of the Lounge Lizards.

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

Это можно делать на разном уровне - на уровне абстрактного нетлиста (графа логических элементов и D-триггеров), на уровне RTL в HDL описаниях - или даже просто паттернов в памяти конфигурации. Но каким бы образом не пойти, у него не получится проскочить изучение основ - комбинационной и последовательностной логики с упражнениями на fpga плате, с симулятором и анализом тайминга.

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

Вводный роадмап довольно понятен - читать Харрис & Харрис или Цифровой Синтез и параллельно делать примеры на FPGA плате и домашнюю работу из вот этих двух репозиторий, которые мы сделали с сотоварищами. В общем все ссылки:

https://dmkpress.com/catalog/electronics/circuit_design/978-5-97060-961-3/

https://dmkpress.com/catalog/electronics/circuit_design/978-5-93700-282-2/

Репозитории

https://github.com/yuri-panchul/basics-graphics-music

https://github.com/yuri-panchul/systemverilog-homework

Еще пара полезных книжек:

https://dmkpress.com/catalog/electronics/cad/978-5-97060-619-3/

https://www.amazon.com/Digital-Design-Approach-William-Dally/dp/0521199506

Курс

https://engineer.yadro.com/chip-design-school/

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

Я не согласен. Логические операции и D-триггеры можно вводить параллельно с верилогом - у меня в такого рода семинарах опыт. Конечно, если есть время, полезно для введения показать логические элементы, D-триггеры, сумматоры, мультиплексоры, приоритетные декодеры, счетчики и сдвиговые регистры на микросхемах малой степени интеграции (7400 или cmos 4000), но для этого достаточно три дня занятий, а потом точно нужно переходить на ПЛИС и показывать остальное там. А если времени мало, можно сразу на ПЛИС.

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

Ну дык и советовал, и показывал платы, но он только продолжает присылать вопросы - а может такую плату выбрать? А может другую? (Я согласен что нужно начинать с платы, а не симулятора)

UART это прекрасное упражнение, но для человека который не знает простейшего синтаксиса (порты, always-блоки, семантику блокирующих, неблокирующих и continous assignments) - это явно не первое упражнение. До UART ему нужно поделать всякие мигания кнопочками и упражнения по последовательностной логике на симуляторе типа https://github.com/yuri-panchul/systemverilog-homework/blob/main/02_sequential_basics/02_04_serial_adder_with_vld.sv

Например? Кто-то хочет, чтобы он задавал мне дурацкие вопросы? Типа у него научный руководитель в институте сам неадекват и хочет от него чего-то странного, типа исследовать FPGA XC6200 1995-го года?

Я ему уже несколько раз повторил один и тот же совет. Воспроизведу его ниже. Он его молча игнорирует и через неделю присылает еще один вопрос "а что вы думаете про курс такой-то? А что вы думаете про тул такой-то? А что вы думаете про плату такую-то?" А также раз в месяц "я хочу с вами серьезно поговорить, обсудить план". Я ему уже дал план, почему я ему должен давать другой план? Или говорить об альтернативных планах? Чем плох мой план, что он его игнорирует и спрашивает про другой план? Плюс про неактуальный мусор типа XC6200.

Итак мой совет:

The steps:

  1. get a cheap FPGA board,

  2. read a textbook like https://www.amazon.com/Digital-Design-Computer-Architecture-RISC-V/dp/0128200642 ,

  3. In parallel start from the first example https://github.com/yuri-panchul/basics-graphics-music/tree/main/labs/01_and_or_not_xor_de_morgan

  4. then go to the second.

  5. After https://github.com/yuri-panchul/basics-graphics-music/tree/main/labs/10_hex_counter start look to the homework exercises https://github.com/yuri-panchul/systemverilog-homework

  6. Eventually get another textbook https://www.amazon.com/Digital-Design-Systems-Approach-2012-09-17/dp/B01FIWOYVU/ and start doing exercises with pipelines and fifos.

  7. Extend to the simplest CPU cores https://github.com/zhelnio/schoolRISCV then to more complicated cores.

Do everything in small steps, but in a systematic way. After several months you will know what to do better.

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

Для студента 23 лет, который 1) не знает что такое LUT и 2) не может купить платы с UltraScale потому что она стоит $3000, а ему жалко $50 на плату с Cyclone IV?

Я ему написал "структура UltraScale хорошо документирована". Это достаточно?

Все это похоже на странное развлечение: гуглить всякий мусор, а потом спрашивать слишком терпеливых людей "что вы думаете про XYZ?"

1
23 ...

Information

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