Жуткий сценарий использования ChatGPT
Вчера у меня в ленте на фейсбуке (жаль что в закрытом посте) проявился еще один аспект ChatGPT, жуть которого я не вполне осознавал. Представьте, что ваш менеджер присылает вам емейл: «я вот тут сгенерил с помощью ChatGPT код на языке описания аппаратуры SystemVerilog, который реализует мою идею, ты его поправь немного и в продакшн, а то нас сроки поджимают».
Почему это жутко? Потому что в обсуждаемом посте ChatGPT сгенерил так называемый несинтезируемый код. Это означает: код вроде и есть, и после массажирования даже будет компилироваться в симуляторе, но вот чип из него сделать нельзя. Никак, вообще никак. Для решения этой задачи нужно написать совсем другой код, у которого не будет ни одной строчки общего с тем, что прислал менеджер.
То есть менеджер думает, что вместе с ChatGPT сделал за вас 90% работы, а на самом деле это (даже если убрать ошибки типа путаницы в семантике модуля и функции) в лучшем случае — высокоуровневая спецификация того, что нужно сделать. Потому что тип «string» не обрабатывается синтезатором, а если его заменить на большие битовые вектора и развернуть циклы, то получится комбинаторное облако, чип из которого будет размером с чемодан, а задержка на котором будет не пикосекунды, а секунды. Собственно с этим кодом хардверный дизайн еще даже не начинается.
Для хардверного дизайна алгоритм нужно превратить в конечные автоматы, конвейеры, очереди FIFO итд. Вообще, превратить несинтезируемый код в синтезируемый пытались десятки компаний и университетских проектов последние 35 лет. Эта область называется «high level synthesis». Результаты этой движухи довольно мизерные, учитывая что сейчас все топ-электронные компании пишут синтезируемый код вручную, кроме нишевых областей.
Зачем же в SystemVerilog есть несинтезируемые конструкции? Для писания тестов и моделей, с которыми сравнивается поведение синтезируемых блоков.
По сути, SystemVerilog — это несколько языков в одном. В нем есть подмножество для определения netlist (графа логических элементов), подмножество для уровня регистровых передач (оно же — синтезируемое подмножество), поведенческое подмножество (у которого есть синтезируемая и несинтезируемая части) и отдельные язычки для constraint solvers, coverage bins и темпоральной логики continuous assertions (три последние я не буду расшифровывать). Ну и еще подмножество для switches и аналоговое расширение, но я это не использовал.
Так вот. Менеджмент ChatGPT нанял армию контракторов в дешевых странах , но на тренировку на SystemVerilog они наверное поставили человека, который решил прикрутить понимание питона или джавы, посколько из таких языков в SystemVerilog натащили кучу фич для несинтезируемого подмножества.
Но попытайтесь объяснить это менеджеру, который это не понимает. Он будет отмахиваться «это все детали, почти все сделано, ты просто отлыниваешь, боишься новых технологий, работай давай, и с сегодняшнего для ежедневные статус-репорты, а не то переведу на «программу улучшения производительности работника» (это такой эвфемизм для предупреждения об увольнении)». Работник, в котором теплится хоть какая-то инженерная способность, после такого диалога будет конечно сразу рассылать резюме.
Слава богу, это не моя личная ситуация, потому что три уровня менеджмента надо мною прекрасно знают что такое синтезируемое и несинтезируемое подмножества SystemVerilog-а.