Какие преимущества предлагает Chisel по сравнению с классическими языками описания оборудования?

Chisel - это альтернатива классическим языкам описания аппаратных средств (HDL), таким как Verilog и VHDL. Мой опыт работы с Verilog и его распространенность как в промышленности, так и в научных кругах показывают, что это хорошо развитый зрелый язык.

Может ли кто-то, кто использовал Chisel в течение некоторого времени, поделиться своим опытом и помочь объяснить полезность Chisel по сравнению с классическими HDL?

До сих пор, будучи студентом, изучающим дизайн IC, я включал в себя:

  • Verilog является доминирующим в отрасли и имеет широкую поддержку моделирования
  • Долото не поддерживает все конструкции, которые Verilog имеет, например, аналоговые элементы
  • Параметризация долота обеспечивает эквивалентные возможности для Verilog

Ответ 1

Это невероятно сложный вопрос для ответа по ряду причин. Сообщество долот пытается объединиться на одном конкретном ответе, который легко понять. Есть два основных угла:

  • Повышение производительности благодаря новым языковым возможностям и доступности библиотек
  • Улучшенная специализация благодаря структуре аппаратного компилятора

Характеристика языка /Power Answer

Подумайте о следующем похожем вопросе: "Какую утилиту предоставляет Python поверх C?" Ответ, указывающий, что ни одна утилита, вероятно, не затронет следующие вопросы:

  1. Все, что я могу написать на C, я могу написать на Python. Оба имеют for, while и т.д., И код, который я пишу, выглядит одинаково: printf("hello\n") против print("hello")
  2. C имеет особенности, которые Python не любит встроенную сборку
  3. Оба завершены по Тьюрингу

Проблема с этим рассуждением состоит в том, что он игнорирует тот факт, что Python предоставляет новые парадигмы программирования, которые позволяют вам быть более продуктивным:

  • Объектно-ориентированное программирование
  • Функциональное программирование
  • Библиотеки

По сути, Python можно рассматривать как более мощный язык с точки зрения производительности проектирования и повторного использования кода. Языковая сила, как известно, трудно объективно оценить. Пол Грэхем описывает это как "парадокс Blub" в своем эссе "Обыгрывание средних". Тезис Грэма заключается в том, что инженер, владеющий менее мощным языком, не может оценить полезность более мощного языка.

Иными словами, наличие парадигм, перечисленных выше, не заставляет вас использовать их. Следовательно, вполне возможно написать Python, который выглядит и чувствует себя так же, как C (и использовать его для оправдания полного исключения Python!).

Chisel - это предметно-ориентированный язык (DSL) для описания аппаратных схем, встроенных в Scala. По своей природе он предоставляет эквивалентные конструкции для Verilog, такие как module, Input/Output, Reg и т.д. В связи с вашим вопросом это приводит к тому, что оба основных примера долота выглядят точно так же, как Verilog, а также позволяет людям писать долото, которое выглядит так же, как Verilog. Это часто используется в качестве аргумента для отклонения долота в пользу Verilog. Однако это аналогично выбору языка программирования на основе структуры примеров "Hello World".

Это означает, что лучше задать вопрос: "Что я могу построить с Python, который с C непреодолимо труден?"

Ответ на этот вопрос требует тематических исследований и (очень быстро) выходит за рамки сравнений "Hello World". Подумайте о создании библиотек машинного обучения в C и Python, например, "Как бы я создал Tensorflow в C?" Это было бы невероятно сложно из-за абстракций, которые требуются для чего-то вроде Tensorflow.

Вы можете подумать о подобных примерных сравнениях, взглянув на зрелые проекты Chisel. Два ярких примера - Rocket-Chip и Diplomacy. Первый является генератором произвольных схем System-on-Chip (SoC). Последний используется Rocket Chip для решения проблемы согласования параметров - в произвольном SoC Я хотел бы, чтобы параметры компонентов N, которые я соединяю вместе, были функцией того, чем я являюсь. соединение (например, ширина адреса, внутренняя логика, протокол когерентности). Важно отметить, что и Rocket-Chip, и Diplomacy могут быть использованы в качестве библиотек (с некоторыми трудностями, которые будут решены в будущем). Конкретно, это означает, что пользователь очень близок к возможности "просто импортировать микропроцессор RISC-V" так же, как он "просто импортирует библиотеку графов".

Из-за языковой функции/мощности в сочетании с доступностью библиотеки реальными метриками полезности становятся:

  • Сколько строк кода мне нужно, чтобы описать какой-то компонент?
  • Насколько сильны абстракции, которые язык позволяет мне строить?
  • В какой степени язык позволяет повторно использовать код?

Для неподдерживаемых конструкций, таких как объекты, запускаемые по отрицательному краю и асинхронные сбросыFIRRTL, и Зубило теперь поддерживают асинхронные сбросы), Зубило всегда предоставляет клудж аварийного люка через Verilog blackboxes. Однако все это на самом деле просто функции, которые нужно искать разработчику.

Ответ аппаратного компилятора

Зубило является частью структуры аппаратного компилятора, которая очень похожа на LLVM, применяемую для генерации оборудования. Процесс Chisel-to-Verilog является частью многоступенчатого компилятора. "Ступень/передний конец долота" компилирует долото в промежуточное представление circuit схемы, называемое FIRRTL (гибкое промежуточное представление для RTL). Затем "FIRRTL stage/mid-end" оптимизирует FIRRTL и применяет пользовательские преобразования. Наконец "Verilog stage/back-end" испускает Verilog на основе оптимизированного FIRRTL.

Несмотря на тонкость, эта структура компилятора допускает следующие вещи:

  • Фронт-энд и бэк-энд отделены друг от друга, что означает, что могут быть записаны другие интерфейсы и фоны. Внешний интерфейс Verilog существует через Yosys, и другие языки могут напрямую нацеливаться на FIRRTL, например, Magma - это собственный язык, похожий на долото в Python, который может нацеливаться на FIRRTL. Новые внешние интерфейсы получают все преимущества существующих оптимизаций среднего уровня и доступных внутренних компонентов. Также могут быть написаны новые бэкэнды, например, для бэкэнда VHDL нужен только один мотивированный разработчик, чтобы написать его.
  • Введение схемы IR позволяет автоматизировать специализацию/преобразование схем. Это использовалось для преобразования схем в версии, оптимизированные для FPGA, которые работают быстрее, чем неоптимизированные версии (Midas и FireSim), для включения аппаратных точек останова/утверждений (Dessert), и добавить настраиваемые возможности ввода ошибок во время выполнения (Chiffre). Выполнение этих оптимизаций непосредственно в Verilog было бы невероятно сложным и хрупким.

С этой точки зрения вопрос ближе к "Какую утилиту C++ и LLVM предоставляют поверх написанного на ассемблере?"

При обсуждении компиляторов обычно возникает вопрос о Chisel (языке конструирования аппаратных средств) и синтезе высокого уровня (HLS). Отличительным фактором здесь является то, что Chisel по-прежнему является мощным языком для описания схем, а HLS - это путь для преобразования программ в схемы.

Заключение

Вкратце, лучший способ думать об этом вопросе - "Что дает Чизель за пределами Verilog?" Этот сложный вопрос без содержательного ответа и требует сравнения набора парадигм программирования, которые обеспечивают оба языка. В настоящее время, и, исходя из собственного опыта, лучший способ справиться с этим - совершать глубокие погружения на зрелых базах кода Chisel и пытаться использовать его самостоятельно (и не принимать решения в течение нескольких месяцев). Сложность этих подходов заключается в том, что это требует времени. Кроме того, необходимые наборы навыков для чтения этих кодовых баз и принятия решений такого типа обычно не распространены в аппаратных инженерах. Специалисты по аппаратному обеспечению обычно очень хорошо владеют C, но, возможно, никогда не видели (с какой-либо глубиной) объектно-ориентированное программирование, функциональное программирование или написанные сложные проекты, использующие современные принципы разработки программного обеспечения. Это имеет тенденцию создавать предвзятость, когда люди ищут причины отклонить долото (или аналогичные языки), а не причины использовать его.

Дальнейшее чтение