Комментарии 50
Если каждый школьник сможет поморгать лампочкой, написав программу на Scratch, а в каждой машине по умолчанию будет FPGA, то жить станет намного веселее.
Может хоть тогда запилят нормальные интерфейсы, вместо хтонического ужаса из 90х, с которым сейчас приходится иметь дело.
Дело в том, что и Verilog и VHDL — очень большие и сложные
Про VHDL полностью согласен, но на то есть свои причини (жёсткая типизация).
Про Verilog же категорически не соглашусь, а если быть точнее про его надстройку SystemVerilog. Он максимально гибок и предельно оптимизирован, если участь, что разработчик должен заниматься построением иерархических структурных моделей, а не лепить всю схему в один файл.
Опять таки структурное описание (на более высоком уровне) обусловлено как минимум двумя факторами:
1. Наличие проприетарных/авторских/встроенных IP ядер, которые часто и являются средством передачи различных технологий сторонним производителям без открытия «фирменных фишек»/патентов.
2. Более понятное с точки зрения електроники распределённое проектирование параллельных систем. Что также упрощает глобальное восприятие сложных проектов.
Так что приведённый пример нового языка физически плюсов никаких не приносит (если сравнивать по простоте с SV), а упрощение моделирования выглядит достаточно спорно как со стороны соответствия моделируемой конструкции реальному проекту, так и в дальнейшем применении (настоящие проблемы начинаются в месте когда виртуальные данные переходят в «железо»).
Опять же всё бы хорошо, если бы отраслевые предприятия (от Xilinx и Altera/Intel до Lattice и Gowin) стремились внедрить что-то новое. А так не все синтезаторы поддерживают стандарт VHDL-2002 (правила 2002 года) и весь функционал SystemVerilog. Что тогда говорить про кардинально новый язык.
P.S. Не подумайте я не злой хомяк, который отрицает всё новое. Просто мне кажется, что пройдёт ОЧЕНЬ много времени когда поддержу предложенного языка только начнут обговаривать. А до тех пор может случится так, что он уже и не понадобится ибо проектирование на HDL будет полностью вытеснено HLS'ами как это случилось с Ассемблером и его потомками
Про Verilog же категорически не соглашусь, а если быть точнее про его надстройку SystemVerilog. Он максимально гибок и предельно оптимизирован, если участь, что разработчик должен заниматься построением иерархических структурных моделей, а не лепить всю схему в один файл.Меня, как разработчика компилятора, «несколько» смущают 1275 страниц спецификации. Я не спорю, возможно гибкость действительно существует, но тот факт, что каждый проприетарный инструмент так или иначе реализует свой IR для работы намекает, что как машиночитаемый промежуточный формат Verilog не подходит.
С моей точки зрения, промежуточный формат должен быть максимально детерменированным, компактным и допускать возможность безболезненных преобразований. И удобство работы с ним не должно содержать никаких «если» и «мелкого шрифта под звездочкой».
Опять таки структурное описание (на более высоком уровне) обусловлено как минимум двумя факторамиТак никто же не отрицает! Если вы могли заметить LLHD IR на структурном уровне повторяет HDL. Разве что от генераторов отказались посчитав, что этим должен заниматься фронтенд входного языка.
Наличие проприетарных/авторских/встроенных IP ядерНе совсем понимаю, как тут может помочь или помешать высокоуровневый или промежуточный язык. Надо отдать IP — отдается netlist без каких либо пояснений кроме интерфейса.
Более понятное с точки зрения електроники распределённое проектирование параллельных систем. Что также упрощает глобальное восприятие сложных проектов.Возможно вы не поняли суть предлагаемого. LLHD это не «еще один новый язык, который всех порвет». Это промежуточное представление в которое может быть оттранслирован один из существующих или новых языков описания аппаратуры. Пользователю с ним работать не надо. Разработчики могут все так же писать свои дизайны на верилоге как и раньше. Выигрывает здесь в первую очередь экосистема: сокращаются издержки на поддержку новых платформ, уменьшаются баги.
Опять же всё бы хорошо, если бы отраслевые предприятия (от Xilinx и Altera/Intel до Lattice и Gowin) стремились внедрить что-то новое.Мой акцент был в первую очередь не на отраслевых предприятиях, а на open source. Ведь ровно то же самое проходили с языками программирования лет сорок назад. Был большой и серьезный фортран, были проприетарные компиляторы Си, были полностью закрытые до последнего транзистора архитектуры. Компиляторы писали разработчики самой платформы, а сторонние энтузиасты в лучшем случае были вынуждены писать трансляторы в Си, потому что иначе поддержать целевую архитектуру было нереально. А потом появились GCC и LLVM. Результат мы все знаем. Apple почему-то предпочитает делать процессоры сама, но в то же время для Clang и Swift использует и поддерживает LLVM, хотя у нее есть средства на самые радикальные меры.
В существующих условиях отраслевые предприятия могут продолжать делать то что и делают. Фокус в том что параллельно с титанами сейчас развивается альтернативная экосистема вокруг open source.
А так не все синтезаторы поддерживают стандарт VHDL-2002 (правила 2002 года) и весь функционал SystemVerilog.Ну вот вы же сами пишете, что «гибкий и предельно оптимизированный» язык оказывается полностью не поддерживается. Один вендор поддержал то, другое это. В итоге имеем войну браузеров со вкусом железа.
Просто мне кажется, что пройдёт ОЧЕНЬ много времени когда поддержу предложенного языка только начнут обговаривать.Если это будет выгодно, обговорят и применят. Как сейчас происходит с WebAssembly. Но фокус в том, что для совместного существования этого и не надо. При необходимости LLHD IR можно транслировать обратно в Verilog и скормить не поддерживающему LLHD инструменту. Страдает от этого только производительность которая будет уж точно не хуже текущего варианта когда каждое из звеньев вынуждено этим заниматься.
А до тех пор может случится так, что он уже и не понадобится ибо проектирование на HDL будет полностью вытеснено HLS'ами как это случилось с Ассемблером и его потомкамиРазве одно другому мешает? По моему как раз наоборот. Если будет универсальная и стандартная среда (как WebAssembly) в котороую можно транслировать любой входной язык и которую поддерживают все участники экосистемы, то в конечном итоге выживет самый приспособленный. JavaScript стал так популярен в вебе (и не только) не потому, что он самый быстрый или самый продуманный язык.
Если LLVM нужно какое-то внутреннее представление в собственном формате — ну пожалуйста, не жалко. Но так-то этот IR выглядит какой-то нечитаемой версией тех же классических HDL.
И тем не менее, почему по-вашему, ещё живёт и процветает VHDL? Причём он занимает чуть ли не половину проектов большой двойки. Всё потому что он настолько однозначен, что любая разработка на нём не принесёт двуякой трактовки и скрытых объявлений. А это зачастую решающий фактор в ответственных системах.
Ну и действительно, как сказал nerudo синтезируемые подмножество языка невелико. А вот разные примитивы для тестирования — они то и создают зачастую ненужные страницы описания.
Про перевод с HDL в LLHD не знал/недопонял. Идея неплохая, но ещё один слой в цепочке преобразований — ИМХО не самая лучшая идея. Опять таки повторюсь до момента получения синтезированного не листа — это лишь чрезвычайно малая доля разработки. Процентов этак 10-15 от силы. Самый большой геморрой начинается на уровне имплементации с констрейнами и плясками вокруг кривизны инструментов. Чего нельзя избежать ввиду проприетарности финальных этапов (P&R) для конкретного разработчика кристаллов
100% знакомых мне плисоводов пишет на SV и пытается узнать, кто вообще пишет на VHDL.
И хардварную реализацию WebGPU.
Не, я имею ввиду полностью открытый GPU, который реализует в первую очередь спецификацию WebGPU. Текущие реализации WebGPU уже реализованы над существующими GAPI. В плане кроссплатформенности самая продвинутая реализация: wgpu/wgpu-rs. Умеет работать поверх DX/Metal/Vulkan, а в будущем даже поверх OpenGL ES 3 (но это не точно). В ночных сборках браузеров (надо включить опции) оно тоже местами есть. В Firefox Nightly тоже с самых недавних пор.
Полностью хардварная реализация тут скорее как ачивка. И в данном случае тут будет важно иметь очень лёгкий порог вхождения (может быть даже целый туториал о создании собственного GPU).
Я скорее всего буду исследовать эту тему ближе к концу года, но никаких обещаний дать не могу.
Не знаю правда в чем будет практический смысл. Реализация на ПЛИС будет в десятки раз дороже чем сравнимая по мощности видеокарта прошлых лет.
Но как исследовательский проект конечно интересно.
Так то уже сейчас есть проект Kaze, который позволяет делать что-то подобное, но я хочу сделать это уровнем выше.
Надо бы в статьях сразу давать такие транскрипции.
Семен Семенович досконально изучил эту сторону психики проксимцев, беседуя с Христианом Христофоровичем Казе, академиком и главным инженером (пси)-ВМ. (На самом деле он был не Христиан Христофорович, а суть кристаллоида высшей сложности и надежности, не меняющая свои качества в любых нагрузочных режимах, от холостого хода до короткого замыкания — от х.х. до к.з. на языке электриков).
([Владимир Савченко, «Похитители сутей»])
То есть при первичной трансляции входного языка (Verilog) в IR прописывается метаинфа соответствия конструкций IR кода и элементов входного языка. Оное соответствие потом сохраняется вплоть до конечного синтеза.
Поэтому, если, скажем, роутер не может развести сигнальную линию, он будет ругаться по-человечески, мол, не могу развести такой-то сигнал, объявленный на такой-то строке такого-то вашего файла, а не потоком сознания на два экрана с идентификаторами по 200 символов.
По поводу еще одного языка: считаю, что это имеет смысл, если автору есть что сказать. Каждый новый язык должен иметь какую-то нетривиальную фишку или решать какую-то известную проблему. Иначе это бессмысленно.
Соответственно я могу представить прошивку для какого-нибудь Xilinx Zynq или Intel Xeon Scalable, где программная часть крутится на процессорных ядрах, а логическая часть на ПЛИС. При этом получаем один целостный проект, где типы согласованы а компилятор следит за тем чтобы все билось.
Использовать для тех же целей Haskell или Scala можно конечно, но это уже не будет иметь особых конкурентных преимуществ.
Другое дело верификация. Если цель создания нового HDL — упростить верификацию, то почему бы и нет
Далее, по поводу тулов. У тулов есть свое, внутреннее представление схем, это структурированная база данных. Структура сооответствует наиболее удобному представлению схемы в виде графа — блоки, выходы, выходы, провода, ассайны. Этот же граф и для STA используется. Сделано так, чтобы тул работал правильно, чтобы тулу было удобно на всех этапах, коих в маршруте множество. Совпадение или нет, но это внутреннее представление один в один транслируется в нетлист (который structural verilog), ни дать, ни отнять. И чтобы передать дизайн из одного тула в другой, верилог-нетлист подходит оптимальным образом. Альтернатива — передавать напрямую базу данных (open access, к примеру). Но никак не sv, чизел, vhdl или что то еще из известного мне. Конечно, наверное, все же можно и такие форматы сделать, но это существенно усложнит тулы (придется добавлять входной транслятор), так что нафига? Нет здесь никакой кривобокости. И нет потребности что то менять.
А выбор конкретного HDL — это, по сравнению с тулами, как симулирующими закрытые/зашифрованные IP блоки от вендоров, так и работающие непосредственно с железом — ну это уже мелочи. В мире софта перейти с одного языка на другой — не проблема. В мире железа точно так же.
При этом на простых дизайнах прототип JIT-симулятора LLHD показывал производительность в 2.4 раза лучше, чем десятилетиями полируемый проприетарный симулятор, и только на масштабной симуляции ядра RISC-V проприетарный симулятор заметно вырвался вперед.
Ну по табличке это совсем не так. То же пересечение тактовых доменов симулируется почему-то в 1.5x раза медленнее. Хотя там нет особого простора для оптимизации, имхо.
В оригинальной статье смысл был не в том, что на всех дизайнах быстрее, а что даже прототип умудрился на некоторых дизайнах показать в разы лучшую производительность. Я так понял, что авторы этого не ожидали и отставание в десятки раз на неоптимизированном прототипе считают нормальным, тем более по сравнению с инструментом, который вылизывали десятки лет.
По поводу отставания авторы еще пишут следующее:
Note that the lines of SystemVerilog code and simulation cycles do not always fully portray the complexity of a design: some SystemVerilog constructs can produce significantly more LLHD code than others, leading to significant differences in simulation time. Much of the complexity and engineering effort of our work lies in Moore, the HDL compiler frontend, which tackles the extensive SystemVerilog standard. Further extensions of Moore to implement additional SystemVerilog constructs can vastly increase the scope of designs that can be mapped to LLHD. Once a design is in LLHD, simulating it correctly is trivial.
Кстати мне кажется IR прекрасно бы встроился в технологическую цепочку разработки ПО для параллельных вычислителей с перестраиваемой архитектурой (https://parallel.ru/fpga/spo.html)
Проект LLHD — универсальный язык описания аппаратуры