Как использовать значение имени выбранного элемента в векторе chisel в сгенерированном Verilog

#chisel

#chisel

Вопрос:

Я пытаюсь сохранить значение имени сигнала в сгенерированном Verilog. Значение Val является динамически выбираемым элементом из вектора chisel (Vec). Ниже приведен мой код тестового примера:

 val myVec    = Reg(Vec(10,UInt(32.W)))
val selected = myVec(io.sel).suggestedName("selected")
  

Я вижу в сгенерированном verilog мультиплексор, который принимает выбранный элемент из myVec. Однако у него есть случайное имя _T something . suggestName() не помогло. Я также пробовал @chiselName без каких-либо улучшений.
Причина, по которой я хочу, чтобы у этого сигнала было значимое имя, заключается в целях отладки (функционально это правильно)

Ответ №1:

Это известная ошибка, извините за путаницу / разочарование. Замалчивая некоторые детали, для Chisel сложно определить разницу между динамическим индексом как значением правой руки (чтение) и значением левой руки (запись), что затрудняет его определение.

Вы можете обойти это, подключив вывод динамического индекса к Wire :

 val myVec    = Reg(Vec(10,UInt(32.W)))
val selected = WireInit(myVec(io.sel))
  

Имя Wire будет присвоено с помощью обычных механизмов so @chiselName , suggestName или будет работать стандартное отражающее именование.

Исполняемый пример с использованием Chisel v3.3.2: https://scastie.scala-lang.org/UWYCtq37ReaVcRrNBxRlOA