Как стать автором
Обновить

Комментарии 12

спасибо за статью)
Статья интересная, но существенных преимуществ не вижу. Может в будущем добавят что-то стоящее.
Преимущество (на мой взгляд) очень простое. Разработчики железа часто пишут кучу говнокода на tcl, питоне, и прочих скриптовых языках для сборки и настройки своих библиотек под какой-то конкретный проект. Ну не позволяют верилог и vhdl делать нормальную параметризацию компонентов! Вот народ и извращается как умеет. Если бы всё это удалось запихнуть в такой мощный язык как scala, это сразу сильно бы облегчило жизнь. Во всяком случае я так понимаю. Хотя сразу скажу, с chisel не знаком, только собираюсь с ним познакомиться. Так что могу и ошибаться.
Не знаю кому как, но мне пример на Verilog кажется и проще, и нагляднее. Кроме того, автоматическое своевольное добавление chisel-ом логики тактовой частоты и ресета мне кажется странной практикой. В аппаратных делах всё же лучше, когда всё чётко делается своими руками. Чтобы не приходилось играть со средой разработки в игру «кто кого умнее».

Вообще, идея притянуть ООП в проектирование аппаратуры мне не очень нравится. Хотя вопрос, конечно, спорный.

Я нуб и извините, если скажу чушь, но всё же...


Чтобы не приходилось играть со средой разработки в игру «кто кого умнее».

Когда я читал книгу Harris&Harris, у меня сложилось впечатление, что на Verilog тоже нужно писать не просто по стандарту, а по идиомам, иначе компилятор не поймёт. В этом смысле язык, в котором бы идиомы явно записывались в коде, был бы, наверное, шагом вперёд (не утверждаю, что это Chisel). Ну и здесь это поведение, во всяком случае, детерминированное, а не какие-то эвристики.


автоматическое своевольное добавление chisel-ом логики тактовой частоты и ресета мне кажется странной практикой.

Со своей, программистской, колокольни: ассемблер нагляднее C с точки зрения того, что в итоге получится, и можно, например, в каждую функцию предавать параметры, как в данном случае удобно. Можно договориться о calling convention и аккуратно везде её соблюдать. А можно писать на C, и там нужно исхитриться, чтобы не соблюсти calling convention. Последнее мне кажется более безопасным, хотя и может помешать, например, написанию низкоуровневого кода ядра ОС — ну так на то и ассемблерные вставки и отдельный ассемблерные файлы.

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

Под связкой C-ассемблер я имел в виду просто два языка программирования разного уровня. То есть не "напишем всё на Чизеле, а потом вручную поправим ниже уровнем". Я имел в виду "что удобно, быстро напишем на Чизеле, что неудобно — допишем на Verilog/VHDL" — я же не предлагаю выкинуть классические HDL-языки и заменить их на Chisel. А вот с количеством ресурсов — это да, остаётся надеяться разве, что компилятор выкинет всё лишнее (как компилятор C вычисляет константные выражения и т.д., образовавшиеся после раскрытия макросов). Ну и на то, что взамен это хотя бы даст то железо (или FPGA-дизайны), которое раньше было сильно сложно сделать (ну или простое, но полезное и много видов) за счёт упрощения процесса разработки.

Компилятор С++, конечно, выкидывает всякую мелочёвку типа константных выражений, но при этом раскопипащивает темплейты так, что простенькая хренька, коей красная цена 10 кил после компиляции внезапно даёт мегабайт бинарника.

Упрощение процесса разработки — да, чрезвычайно ценно. Рабочее время на вес золота, а туда-сюда гигабайт — копейки. Но поговаривают, что нужно потихоньку отвыкать закладываться на развитие элементной базы.
Переусложнение и интеллектуализация технологий разработки софта (плюс, конечно же, идеологическая победа ООП) уже привели к тому, что те программы, для которых хватало мегабайта, теперь еле помещаются в сто. Такого же эффекта в аппаратуре как-то совсем не хочется.

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

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

Да, и это тоже…
Вообще, идея притянуть ООП в проектирование аппаратуры мне не очень нравится

А вот тут не знаю… Проектирование аппаратуры это как раз та область, где объекты вполне очевидны и выделимы. И ООП тут должно рулить. Будете долго смеяться, но свою первую прогу на С++ (имеется в виду абсолютно добровольное и сознательное использование ООП, а не потому что такой стиль навязали разработчики библиотек), я написал когда понадобилось конвейризовать алгоритм Кули-Тюки (быстрое преобразование Фурье), для запихивания оного в FPGA.
Спасибо, очень интересно. Хотя с первого раза всего не понял, надо будет перечитывать. Сразу скажу. Что с примерами многоканального счетчика и далее так и не разобрался. Когда я вижу код на верилоге, то могу примерно представить себе во что это выльется в железе. С кодом на chisel это у меня не получилось (получилось только с самым первым примером простого счетчика). В чём тут дело — черт его знает. Может привычки. А может самого языка… Кстати Rust у меня не пошел по той же самой причине. Нет в нём той прозрачности, которая есть в С (плюс небольшое подмножество С++). А для эмбеддера это например очень важно… О чём хотелось бы почитать, так это о Вашем личном впечатлении о юзабельности самого инструмента. Скажем насколько это ускоряет разработку, насколько облегчает повторное использование кода и т.п. Сам хочу как будет время сделать на нём небольшой хобби-проект, по мотивам вот этой книги.
… Кстати Rust у меня не пошел по той же самой причине..

А что и где вы пробовали, просто интерес? У rust есть какие-то crates для какого-то железа?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории