Я записываю некоторые первые преобразования и использую аннотации для соединения выводов и проводов, например:
val named = ComponentName(inputWire.name, ModuleName(mod.name, CircuitName(top)))
val anno = Traversable(SinkAnnotation(named, pinName))
inputWire :
val inputWire = DefWire(NoInfo,localNS.newTemp, con.expr.tpe)
И pinName - это строка:
val pinName = namespace.newName(faultPinPrefix)
, где тип inputWire равен UIntType (IntWidth (2)) илиможет быть больше 2 в некоторых других случаях.
После этого преобразования я запускаю firrtl.passes.wiring.WiringTransform для выдачи соединений. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что вывод verilog выглядит следующим образом:
input faultPin_0
//...
//Some code
//..
assign _GEN_1 = {{1'd0}, faultPin_0};
Это не то поведение, которого я ожидаю. Он создает входной порт только в 1 бит и объединяет его, создает 2-битный сигнал. Возможно, проблема в том, что я не указываю тип порта, я позволяю компилятору выбрать его, и он автоматически создает 1-битный порт. Есть ли способ сделать это соединение с помощью аннотаций, или я должен сосредоточиться на поиске другого подхода, который является более осуществимым.