Как указать подстановочный знак AUTO_TEMPLATE для входов и выходов отдельно?

Обычная практика автоматического создания экземпляра модуля verilog с подстановочным знаком:

/* sub AUTO_TEMPLATE (
   .\(rg_.*\)   (\1_@),
); */   
sub sub
(/*AUTOINST*/);

Подстановочный знак в приведенном выше примере говорит: «Для любого имени порта, начинающегося с rg_, добавьте номер экземпляра. Обратите внимание, что это будет применяться как к входным, так и к выходным портам. Есть ли способ добавить какую-то директиву, чтобы приведенный выше шаблон применялся только к выводам? Я нашел что-то похожее здесь, но не могу понять этого.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно работать:

/* sub AUTO_TEMPLATE (
   .\(rg_.*\)   (@"(if (equal vl-dir \\"input\\") \\"\1\\" \\"\1_@\\")"[]),
   ); */   

Если направление порта (vl-dir) является входным, будет выбрано \1, в противном случае — \1_@. Обратите внимание, что кавычки должны быть \\". [] предназначен для автоматической обработки ширины шины.

Другие примеры @"", vl-dir и другие полезные советы доступны https://veripool.org/verilog-mode/help/

Привет, Грег, твой ответ подразумевает if true "1" else '1_@'. Я не хотел выполнять часть else, так как позже появятся другие условия шаблона. Но кажется, что без else выходные данные привязаны, а не шаблонизированы на основе других условий. Можно ли как-то достичь своей первоначальной цели без else? Также не могу понять, как добавить в оператор два условия: input и +width==1. Это не работает: (@"(if ((& (equal vl-dir \\"input\\") (equal vl-width 1))) \\"sync_\1\\")"),

Nazar 23.06.2024 03:21

В вашем вопросе не упоминаются другие условия. Простая стратегия — создать дополнительные правила шаблонов с более высоким приоритетом сопоставления. В худшем случае у вас может быть более сложная функция Lisp для обработки других условий шаблона.

Greg 23.06.2024 08:10

Другие вопросы по теме