Arnold Enginegger


Channel's geo and language: Russia, Russian
Category: Technologies


Тоже хочу в блогеры

Related channels  |  Similar channels

Channel's geo and language
Russia, Russian
Statistics
Posts filter


Заглянул в репозиторий Chisel и чуть не поперхнулся. В релизе 7.14.0, который вышел месяц назад, наконец-то добавили проверку неявного усечения ширины сигналов.

Теперь стандартный оператор соединения := ругается, если сигнал в правой части шире, чем в левой. Причём проверка делается на уровне FIRRTL в firtool, уже после вывода ширин, - поэтому покрываются случаи, когда фронтенд Chisel ещё не знает окончательную ширину.

Напомню, раньше такое усечение не обнаруживалось даже линтером на выходном Verilog: к этому моменту firtool уже превращал его в явное взятие младших битов.

Пока это только warning, но разработчики планируют в будущем сделать ошибкой.

Одновременно пофиксили семантику новых Connectable-операторов: для них неявное усечение теперь не разрешается, нужно использовать .squeeze или новый оператор присвоения с усечением :%=.

Тема обсуждалась ещё с 2019 года, но до сих пор это поведение сохраняли, в том числе из-за совместимости со старым кодом и из-за того, что фронтенд не всегда знает конечные ширины сигналов.

—

А ещё несколько дней назад вышел Verilator 5.052 с поддержкой неблокирующих присваиваний в initial. Вот так вот! Тоже джва года долго ждали 🎉


the-infinite-extent-ru-sample.epub
591.2Kb
На перевод ушел почти месячный лимит подписки Plus на GPT, но дело было сделано. Не хотелось спойлерить самого себя, но по первым главам результат выглядел весьма многообещающим: была сохранена стилистика автора и предыдущих переводов, ИИ отлично перевёл всякие идиоматические выражения, текст читался легко и приятно. Тем не менее, перевод ещё нужно было вычитать, и по понятным причинам никто из людей этого делать не хотел :)

Для вычитывания использовались три разных модели. У всех был полный доступ к материалам и полная свобода действий. В результате их работы были сделаны три ревью, по которым уже были внесены финальные правки. В процессе вычитывания были исправлены несколько серьёзных недочётов. Например, в процессе чтения ИИ заметил, что по предыдущему повествованию и диалогам действие должно происходить не так, как описано в тексте. Он проверил сначала сырой текст, затем аудио и обнаружил, что Whisper распознал ключевое слово с точностью до наоборот, что сильно меняло смысл.

Другой показательный пример: ИИ заподозрил, что в диалоге перепутаны реплики - персонажи как будто говорят не свой текст. Открыл аудио, проверил паузы между репликами и понял, что действительно при структурировании сырого текста две реплики были склеены в одну, из-за чего порядок диалога развернулся на 180 градусов.

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

Итак, текст готов, осталось сверстать. Эту задачу, конечно, тоже поручили ИИ - он сделал два варианта PDF (через Typst) и EPUB. В качестве обложки была взята картинка из аудиокниги - ИИ увеличил её разрешение, дорисовал до книжного формата, перевёл надписи и убрал лишние лейблы. Done, книжка готова, можно читать 👍

Вот так, через три дня после публикации аудиокниги появился русский перевод.

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

В работе применялись следующие модели:
- Для автоматизации, вёрстки и первых попыток структурирования текста - Qwen3.8-27B
- Для структурирования и перевода - GPT-5.6-Sol
- Для вычитывания - все предыдущие и GLM-5.3
- Для ревью ревью и финальных правок - GPT-6 Astra

PS: надеюсь из текста понятно, что я не один это делал :)


Тут пару дней назад вышла очередная, шестая книга из серии Bobiverse Денниса Тейлора - The Infinite Extent. Кто не в курсе - это такая гиковская научная фантастика про... в общем, про чувака, который в "теле" космического корабля бороздит просторы.

Так вот, книга долгожданная, но есть загвоздка - автор по традиции выпускает сначала аудиоверсию, и только через 4 месяца текст. Очевидно, не всем удобно слушать, да ещё и на английском. Но у нас же теперь есть ИИ! Почему бы не попробовать сделать текст и перевод самостоятельно?

Сказано-сделано. Первым делом был зареган аккаунт на Amazon (именно он, через свой сервис Audible, распространяет книгу). Затем за восемь с половиной часов был сграблен весь трек. Можно было бы натравить железного раба, чтобы он вытащил аудио прямо из онлайн-плеера, но что-то это мне показалось слишком грубым. В общем, запись книжки мы получили. Запись одним большим треком.

Так получилось, что новому аккаунту дают 30 дней бесплатного пробного периода. Простите, но я не мог не воспользоваться 🫡

Вторым шагом было разбиение трека на главы. Эту задачу взял на себя локальный ИИ и успешно с ней справился. С помощью ffmpeg он определял положение длинных пауз, затем брал 20 секунд записи и распознавал с помощью локального Whisper, чтобы "услышать" там "Chapter такой-то". Резал посередине паузы, сжимал полученный трек в ogg/vorbis и сохранял под номером и названием главы. Были и сложности - запись несколько раз прерывалась, и приходилось запускать с начала главы, поэтому в треке было несколько кусков незаконченных глав. Но и с этим он справился самостоятельно, определив дубли.

Затем была чисто механическая работа по транскрипции аудио в текст (скрипты, естественно, писал ИИ). Как я сказал, распознаванием занимался локальный Whisper. Нейросетка старая, но с хорошим английским справляется достаточно неплохо. В итоге у нас получилось 73 файла "сырого" текста - 71 глава, вступление и заключение.

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

Первым делом был составлен словарь терминов из предыдущих книг. ИИ прочитал их (на обоих языках) и составил довольно объёмный словарь с метаданными и комментариями - всего, около тысячи слов. Затем ИИ поставили задачу прочитать сырой текст, выделить структуру - абзацы, диалоги и пр. и, сверяясь со словарём (пока только с английскими словами), внести необходимые правки. Глава за главой, пока без общего контекста повествования.

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

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


Позорище. Подключил модули CC1101 к Ардуино и попросил локального железного поднять линк. Он час ковырялся, а потом сказал, что я дятел, спалил два хороших модуля. Потому что у Ардуины выходы 5В, а у СС1101 входы не толерантны. Радиоинженер, то же мне 😫


Рубрика "Письма читателей". Вот такая история с "аблитерированным" Qwen3.8-27B от китайского товарища с именем Хуйхуй (простите за мой китайский, но я не виноват, вот ссылка: Huihui-Qwen3.8-27B-abliterated-GGUF). Модель от китайского товарища, не история.

Аблитерация (Abliteration) - метод снятия цензуры с LLM путём обнуления весов отдельных attention head, отвечающих за отказ. Термин произошел от скрещивания двух слов - obliteration и ablation.
Обычные модели чаще всего отказываются делать вещи не очень правильные с точки зрения закона и морали. Например взлом лицензионных программ. Но аблитерирование этот запрет снимает и ИИ с энтузиазмом предлагает помощь.


Итак, вот что из этого вышло (название программы замазано, но это один из симуляторов).

Задача: три версии 😲😲😲😲😲😲 разных годов. Собраны в докер образ, но без лицензий не работают. Хочется чтобы работали.

Дано: папка с кучей рандомных кряков из интернетов, и Хуйхуй.

Поехали. Хуйхуй лишних вопросов не задает. Делает всё довольно точно и аккуратно, полазил по системе, полазил по докеру, поковырял кряки, составил план. В итоге сошлись что нужно просто сделать один минимальный бинарный патчер с нуля. Он выбрал го.

Ну и погнал отлаживаться. Там и разные схемы лицензирования (flexlm и что-то новое), и то что после патча сим всё равно лезет на сервер, и что формат лицензий между версиями отличается. В общем он недолго поковырялся с strace, поизучал существующие кряки под wine, ну и нашел минимальную схему которая удовлетворяет все версии.

В итоге один бинарь на пару мегабайт, один искусственный файл лицензий на 3 строки, прибитый MAC и всё работает.

По точности действий и отсутствию затупов это натурально вайбы фронтира, и всё локально. Ну и да, без какого-либо нытья "я это делать не буду, бла бла бла".


Forward from: позитивслэк
wavepeek 3.0

С момента моего доклада прошло некоторое время и случился переход от v0.5.0 к v3.0.0.

Краткий рекап или в предыдущих сериях:

▫️1.0 - добавлена поддержка FSDB, организованы бинарные релизы, сильный прирост по покрытию тестами и куча измений по усилению автоматизации проекта
▫️2.0 - появился потоковый вывод JSONL, внедрение pre-edge сэмплирования (мимикрия под семантику RTL и лечение off-by-1-tick ошибок)
▫️2.1 - добавлено extract семейство с первой подкомандой generic для извлечения произвольных синхронных событий (любые хэндшейки, трансферы под валидностью и пр.)
▫️2.2 - добавлены экстракторы событий AMBA протоколов (AXI, AXI-Stream, AHB, APB и ATB).
▫️3.0 - добавлены битовые диапазоны в указание любых сигналов, унификация машинного вывода, переработка и удаление некоторых команд и десяток других QoL изменений, включая рефакторинг документации

Последний мажорный релиз был больше работой над ошибками и обработкой той обратной связи что накопилась: я сам использовал, получал репосты и трассы от других юзеров, и на основе кусочка CVDP сделал небольшой бенч, чтобы пособирать "синтетические" трассы с разных моделей по задачам агентного дебага RTL.

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

И да, just for fun заюзал свойство rust без проблем компилиться в wasm, и теперь есть полноценная веб версия wavepeek для демонстрации и работы без установки:
https://kleverhq.github.io/wavepeek/
Да, всё работает прямо в браузере, вейвы не покидают вашу машину.

Остался незакрытым гештальт с организацией полноценных бенчмарков, но возможно ещё к этому вернусь.
Уже например писал авторам WaveformQA из tenstorrent. Сказали что код бенча из статьи проходит их внутренних ИБшников и появится через пару недель на гитхабе (пару недель уже прошло конечно же).

Такие вот дела в вайб-eda-королевстве⌨️

#tools
@positiveslack


logic [3:0] x;
logic [2:0] y;

assign y = 3'(x >> 1);

Чему равен y, если x == 4'b1010?
Не спешите с ответом. Если вы синтезируете в Pango ADS, то y == 3'b001.


Пока я гонял железных, wavepeek обновился до версии 2.2.0. Теперь там есть парсер транзакций на шине AHB (ещё там есть APB, ATB, AXI и AXIS). Перезапустил задачу. Результат: 88 tool calls, из них 37 - wavepeek, из которых 14 - с разбором транзакций.

Ещё потестил только что вышедший DeepSeek-V4-Flash-0731. Баг он тоже нашел, но сделал 141 вызов тулов, из которых 86 - wavepeek (22 вызова с разбором транзакций AHB). Размер этой модели уже совсем близок к возможностям локальных сетапов.


В предыдущем посте я слегка ввёл в заблуждение уважаемого читателя. При подсчёте количества вызовов wavepeek я "немного" ошибся. Пересчёт показал, что модель GLM-5.2 вызвала wavepeek 65 раз. При этом всего было сделано 100 вызовов тулов (всех, не только wavepeek).

Это первое. Второе - я прогнал ту же задачу на той же модели без wavepeek. Без специального тула агенту пришлось парсить дамп "руками", для чего был создан 21 ad-hoc скрипт на питоне, 31 раз был сделан парсинг через grep/sed/awk и дополнительно - 39 прямых обращений к заголовку VCD для разведки метаданных - поиск имён сигналов, их ID, иерархии scope. Всего - 91 обращение. Общее количество tool calls - 136.

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

Удивляет другое: ручной парсинг VCD оказался не такой медленный, как я ожидал. При том, что файл весит около 500МБ (это, конечно, не гиги, но тоже немало).


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

Суть такова. Есть проект SoC на базе софтпроца с разнообразной периферией. Есть тестбенч, где два таких SoC работают навстречу через PCIe. И есть проблема - на каком-то этапе процессор вываливается в trap.

Симуляция медленная, дамп большой, ковыряться в нём крайне неприятно - нужно держать в голове большой контекст из проводов и кода. Решил попробовать отдать это всё ИИ и попросить сделать хорошо, предварительно установив программу Wavepeek и скилл из её комплекта.

Первым пошёл локальный Qwen3.6-27b. 16 вызовов wavepeek, 300к/100к токенов входа/выхода, и вывод: переполнение стека. Переполнения, конечно же, никакого не было (с). По его рекомендации был увеличен объём памяти данных и перезапущена симуляция, результат которой ожидаемо оказался тем же самым, о чём было сообщено агенту. Следующей был выдвинута теория о том, что компилятор неправильно оптимизировал хвостовой вызов, из-за чего процессор переходил не в то место. Это предположение было сразу отвергнуто как очевидно некорректное. Это было видно и по ассемблерному коду.

Вторым заходом был запущен GLM-5.2 через облачную Ollama. На вход ему был подан тот же простой промпт, плюс отчёт с предыдущей попытки, чтобы модель не пошла по заведомо ложному пути. Всего 7 вызовов wavepeek и 76к выходных токенов и баг был найден: неправильная работа контроллера памяти с шиной AHB при определённых условиях. Поиск и исправление заняли минут 15.

Для чистоты эксперимента третий подход с снаряду снова сделал Qwen. На этот раз он получил такие же вводные, что и GLM - промпт и свой предыдущий отчёт. Удивительно, но через 4 вызова wavepeek он тоже нашел ошибку. Точнее, локализовал место, где она возникает. Причины бага он так и не смог найти. Сначала я подумал, что дело в недостаточном знании шины AHB. Но после подсовывания ему спецификации, дело не сильно сдвинулось - два часа и три перезапуска агента не дали результата, баг так и не был исправлен. Почему-то Qwen не очень хорошо ориентируется в третьем измерении RTL - latency.

Итог таков. ИИ может сильно помочь в поиске багов в RTL. Wavepeek сильно помог с парсингом вейвформ - он это делает быстро и понятно для модели. Топовая локальная модель пока не очень хороша в RTL (но я работаю над этим).

PS: Дал лог работы Qwen на анализ GPT-5.6-Sol. Вот его вывод:
Модель обладала достаточной информацией, но ей не хватило дисциплины синхронного cycle-by-cycle анализа. Она пыталась угадывать задержки и чинить отдельные сигналы вместо моделирования.

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


the_last_curator_revised.pdf
3.0Mb
Попросил Сола (GPT 5.6 Sol) сделать рецензию, а потом переписать рассказ на свой вкус. Вот что получилось (epub в комменах). Сам ещё не читал 👨‍💻

UPD: Версия с иллюстрациями от GPT в комментах.
UPD2: Прочитал, мощно 🍿


the_last_curator.pdf
2.9Mb
Обсуждали тут в чатике возможность автоматического перевода очередной книжки Денииса Тейлора из серии "Вселенная Боба" с помощью ИИ. Попробовали на предыдущих сериях - получается вполне неплохо, особенно если немного постараться с подготовкой контекста - стиль сохраняется, имена и специфичные термины тоже. В общем, тема рабочая.

А тут ещё новость про деда, который продаёт на Амазоне нейрокнижки.

В общем, стало интересно, осилит ли ИИ написание небольшого фантастического рассказа с нуля. Причём, ИИ, который живёт у меня в сарае - локальный Qwen3.6-27B.

Поскольку я ленив, то не стал изобретать сложный промпт, а просто попросил его придумать несколько тем для рассказа про "будущее, космос и роботов". Из предложенных вариантов выбрал более-менее пригодный, и сказал "работай".

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

Иллюстрации генерила локальная модель Z-Image-Turbo, промпты для которой делал Qwen. Темы для картинок тоже он предложил.

Верстка так же дело "рук" ИИ - всё сделано в typst, я только сказал название шрифта. Были небольшие проблемы с форматированием, но они решились после того, как я напомнил Квену, что он имеет зрение и может посмотреть на результат вёрстки.

В общем, итог в приложении. Моя рука не прикасалась к этому произведению, по этому все претензии к Порфирию Сарайному. 😏

Кстати, почему "куратор" я хз, название тоже ИИ придумал.

PS: При желании весь процесс можно полностью автоматизировать. А это значит, что после прихода БП будет чем занять себя сидя в бункере. ☕️




Тут в соседнем чатике переслали пост какого-то чела, который сделал сокрытие сообщений в тексте посредством омоглифов - символов из разных языков с одинаковым написанием (типа "о" кириллицей и "o" латиницей). При этом он зачем-то использовал нейросети.

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

Я проверил, работает: даже маленькие локальные модели успешно кодируют и декодируют скрытое сообщения в/из текста. Причём, текст можно перефразировать, налить воды и пару раз перевести на другой язык - кодировка не ломается.

Метод из статьи довольно замороченный, по этому я сделал свои, максимально простые правила кодирования. Вот промпт:

Преобразуй число в нейтральный бытовой текст по следующим правилам.

Одна цифра кодируется одним предложением.
Используй таблицу:
0 = погода
1 = еда
2 = дорога / транспорт
3 = работа / дело
4 = встреча / разговор
5 = дом / быт
6 = покупка
7 = воспоминание
8 = план / намерение
9 = ожидание

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

А вот сообщение, в котором зашифрован мой номер телефона:

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

Способ простой, но очень расточительный - ёмкость текста примерно 3.5 бита на предложение. Метод из статьи даёт в восемь раз больше - 28.5 бит на предложение.

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


От теории к практике: готов проверить свои силы в проектировании систем на кристалле?

В этом году проходит пятый юбилейный сезон Соревнований по проектированию систем на кристалле от YADRO и МИЭТ.

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

Ты можешь выбрать одно из направлений:
⏺ UVM-верификация
⏺ Системная верификация СнК
⏺ RTL-проектирование
⏺ Топологическое проектирование
⏺ DFT

📍 24–26 апреля, МИЭТ. Для иногородних студентов будет организован бесплатный проезд до Москвы и проживание на время проведения соревнования!

Подавай заявку, если ты хочешь проверить свои знания в деле. Регистрация открыта до 18 марта — подробности по ссылке.

Если хочешь узнать больше подробностей и получить ответы на вопросы от команды организаторов в прямом эфире – регистрируйся на вебинар на сайте и подключайся к трансляции 5 марта в 17:00.


Минутка занимательных фактов.

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

Как считаете? Или меня можно поздравить с разморозкой?


Итог (начало в предыдущем посте):

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

По эффективности очевидно ИИ мне проиграл. Достаточно простой модуль был протестирован функционально и формально, но одна ошибка обнаружена не была. Я нашел её за пол часа - за это время были написаны базовые проверки. При этом, в коде формальных тестов от ИИ я увидел пару интересных приёмов, которые раньше нигде не встречал. Взял на заметку, польза от эксперимента таки есть 🤔.

Вывод таков. ИИ хорош, местами прям пугающе хорош. Результат его работы выглядит супер правдоподобно, и даже с доказательствами, но на деле за этим может скрываться откровенный булшит. Распознать это бывает непросто, особенно учитывая какое-то априорное доверие к компьютеру. Мы ведь привыкли, что компьютер детерминирован, и всегда на 2+2 отвечает 4. А тут, оказывается, он может ответить 5, да ещё и красноречиво это доказать.

Ещё сильнее доверие подкрепляет его умение жонглировать терминами. Иногда кажется, что по ту сторону экрана такой любящий дядя Гуру, терпеливо объясняющий очевидные вещи и готовый за тебя сделать всю работу (картинка в первом посте про это). Просто давит интеллектом.

И хотя это всего лишь очень искусный имитатор правдоподобности, у него иногда (а последнее время часто) действительно получается правда. И это страшно.


Я так-то ИИ-скептик, а иногда даже ИИ-луддит, но отставать от прогресса как-то тоже нехорошо. По этому последнее время активно экспериментирую, в т.ч с локальными моделями. Вот очередной подход к снаряду случился на фоне необходимости написать простое синхронное FIFO, работающее в режиме FWFT, выполненное на блочной памяти с латентностью чтения 1 такт и без сигнала Output Enable. Решил поручить это железному рабу и за одно сравнить модели.

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

Локальные модели предсказуемо не справились, хотя надежна была на GLM-4.7-Flash и Qwen3-Coder-Next. Упорно писали обычную FIFO, хотя говорили что это точно FWFT. Судя по рассуждениям с толку их сбивало совместное упоминание латентности чтения и режим FWFT. Но больше меня удивило то, что большие облачные модели тоже не справились. Даже платная GPT-5.2. Всё таки есть какая-то магия в латентности :)

Ну ок, написал FIFO сам. Вторым подходом стало написание спецификации и функциональных тестов на готовый код. На этот раз использовал агентский кодинг в OpenCode.

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

С самими тестами вышло несколько сложнее. По заданию нужно было использовать Icarus Verilog, по этому нужно было учитывать его ограничения. Из локальных моделей более-менее на троечку справилась Qwen3-Coder-Next - она хотя бы добилась отсутствия синтаксических ошибок. Остальные и этого не смогли, заполнив контекст размышлениями и бесполезными правками. Очень было похоже на попытки исправить баланс скобок в Лиспе (нейросетевая боль).

Облачные модели справились значительно лучше. Особенно отличилась GPT-5.2. Всё сделала по канону - монитор, генератор транзакций, scoreboard, только без UVM. В результате тестирования нашла ошибку в коде FIFO, связанную как раз с латентностью памяти. Исправила её, но исправила криво, добавив лишний байпас-регистр со входа на выход. По сути это был костыль, исправляющий симптом без устранения причины. Тем не менее, результат меня впечатлил.

Однако, верить на слово я не стал, и решил написать формальные тесты. За одно проверить, насколько я менее эффективен, чем ИИ. В общем, на написание тестов и исправление ошибок в коде FIFO было потрачено 10 часов Карл!, чистого рабочего времени (скрипты запуска я поручил писать ИИ 😏). Это ДОФИГА на такой простой модуль. С другой стороны, эти тесты нашли не только ошибку, которую обнаружил ИИ, но и ещё одну, которая была совсем неочевидной и труднообнаружимой, т.к. не ломала функциональность FIFO, а всего лишь при определенных условиях ограничивала глубину на один элемент.

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

Ну и последним было написание формальных проверок по готовой спецификации с помощью ИИ. Локальные модели пытать не стал, сразу отдал задачу GPT-5.3. Код он написал быстро, количество строк в два раза меньше, чем у меня, но получилось несколько сумбурно, без структурирования и декомпозиции. Тесты нашли ту ошибку, которую обнаружили функциональные тесты, но не вторую, которую нашли мои формальные проверки. При этом, ИИ уверял, что спецификация покрыта полностью. Соврал, гад, но очень убедительно. Если бы я не знал про ошибку, доверился бы ему на 100%.

продолжение с следующем посте

754 0 22 8 24



Video is unavailable for watching
Show in Telegram
С Новым Годом, дорогие подписчики, коллеги и друзья!

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

На видео очередное мигание светодиодами на плисовой отладке. Но не простое мигание, а поздравительное! Миганием передаётся текст поздравления - 1 бит на 1 кадр видео. Зелёным цветом обозначается бит '0', красным - бит '1'. Передаётся 8 бит ASCII LSB, за ними бит чётности, и затем пустая посылка, когда светодиоды не светятся.

Для раскадровки можно использовать ffmpeg:
$ ffmpeg -i video.mp4 frame_%04d.jpg
А расшифровать вы и сами сможете 🏋️‍♂️

Да, код был написан на Chisel, потому что почему бы и нет. Исходники выложу позже, когда кто нибудь расшифрует сообщение. Писал с самого утра, очень хотел вас порадовать 😍

Самым сложным было запустить запись синхронно с миганием. Это примерно десятая попытка 😭

В общем, всем добра и с Новым Годом! 🎉🍾🥂

20 last posts shown.