В настоящее время нет. Тем не менее, оба предложения звучат как очень хорошие кандидаты для обсуждения для будущего внедрения в Chisel / FIRRTL.
SystemVerilog Struct Generation
Большая часть кода Чизеля, созданного в Verilog / SystemVerilog, будет использовать некоторую интерфейсную оболочку, которая занимается преобразованием необходимых имен сигналов, которые инстанциатор хочет использовать, в имена, дружественные к Чизелю. В качестве одного из примеров этого см. AcceleratorWrapper
. Это создает конкретный ускоритель и делает соединения с именами Verilog, которых ожидает экземпляр. В настоящее время вы не можете сделать это с помощью структур SystemVerilog, но вы можете сделать то же самое с помощью оболочки SystemVerilog, которая отображает структуры SystemVerilog на детерминированные имена долот. Это тот же тип проблемы / решения, с которым сталкивается / решает большинство людей при интеграции внешнего IP в свой проект.
Клуджес в сторону, то, о чем ты говоришь, возможно в будущем ...
Необходимо некоторое объяснение, почему это сложно:
Долото конвертируется в FIRRTL. FIRRTL затем понижается до сокращенного поднабора FIRRTL, называемого «низким» FIRRTL. Низкая FIRRTL затем отображается на Verilog. Часть этого процесса понижения выравнивает все пакеты, используя уникально определенные имена (обычно a.b.c
понижается до a_b_c
, но будет унифицирован, если возникнет конфликт пространства имен из-за понижения). Verilog не поддерживает структуры, поэтому это должно произойти. Кроме того, и что более важно, некоторые оптимизации происходят на уровне Low FIRRTL, такие как постоянное распространение и устранение мертвого кода, которые легче писать и обрабатывать там.
Однако SystemVerilog или другой язык, на который ориентирован бэкэнд FIRRTL, который поддерживает неплоские типы, выигрывает от использования функций этого языка для получения более удобочитаемого вывода. Существует два основных подхода к исправлению этого:
Пониженные типы сохраняют информацию о том, как они были изначально созданы с помощью аннотаций, а эмиттер SystemVerilog восстанавливает их. Это кажется не элегантным из-за понижения, а затем не опускания.
В эмиттере SystemVerilog используется другая последовательность преобразований FIRRTL, которая не полностью переходит к Low FIRRTL. Это потребовало бы переписывания некоторых оптимизирующих преобразований, работающих на Low FIRRTL, для работы на более высоких формах. Это послушно, но сложно.
Если вам нужна дополнительная информация о том, какие проходы выполняются на каждом этапе компиляции, взгляните на LoweringCompilers.scala
Перечисляемые типы
То, что вы упоминаете для Enum
, запланировано для бэкэнда Verilog. Идея здесь состояла в том, чтобы Enum
s испускали аннотации, описывающие, что они есть. Затем излучатель Verilog будет генерировать localparam
с. Предварительная работа для генерации аннотации была добавлена как часть StrongEnum
(chisel3#885
/ chisel3#892
), но часть аннотаций пришлось позднее отменить. Решение этой проблемы активно разрабатывается. Последующий PR для FIRRTL увеличит излучатель Verilog, чтобы использовать их. Итак, ищите это в будущем.
О взносах и пропаганде
Для вопросов, подобных этому, с (в настоящее время) отрицательными ответами, не стесняйтесь подавать проблему в соответствующее хранилище Chisel3 или FIRRTL. И даже лучше, чем RFC с последующей реализацией.