Назначьте vec портам UInt

если у меня есть порт io, который равен io.myoutput = UInt (width = 840)

Тогда у меня есть val a = vec.fill (140) {UInt (width = 6)}

Как мне назначить весь vec на выходной порт? Я пробовал цикл с

for (i = 0 until 140){ 
io.myoutput(i*6+5,i*6) := a(i)}

Но это дает мне

finished inference (1)
start width checking
finished width checking
started flattenning
finished flattening (2)
Lbi.scala:37: error: reassignment to Node in class TutorialExamples.Lbi
Lbi.scala:37: error: reassignment to Node in class TutorialExamples.Lbi
Lbi.scala:37: error: reassignment to Node in class TutorialExamples.Lbi

Спасибо


person yidiyidawu    schedule 15.10.2013    source источник


Ответы (1)


val x = Vec.fill(140){UInt(1, width=6)}
io.myoutput := x.toBits

Вам нужен метод toBits. Он расплющивает Vec на необработанные части.

Я не совсем уверен, что вызывает сообщение об ошибке, но в целом вы не можете переназначить определенные биты в проводе в Chisel.

val y = Bits(0,width=32)
y(1) := UInt(0)
y(3) := UInt(3)
etc.

Это вызовет ошибку.

person Chris    schedule 15.10.2013
comment
завершение вывода (4) проверка начальной ширины проверка окончательной ширины начало развертки завершение развертки (941783) разрешение узлов на компоненты - person yidiyidawu; 16.10.2013
comment
Большое спасибо. Оно работает. Теперь я столкнулся с проблемой, что компилятор chisel работает слишком медленно ... преобразование узлов в компоненты занимает более 4 часов. И сгенерированный файл verilog имеет 1 миллион строк .. Это характерно для vec in chisel? Похоже, что компилятор chisel знает, как использовать назначение только в verilog. Он не знает, как оптимизировать код с помощью генерации в verilog - person yidiyidawu; 16.10.2013
comment
Я не знаю, как выглядит ваш дизайн, поэтому я не могу точно сказать, разумно ли 4+ часа. Однако да, Vec обычно генерирует много узлов. Вам следует взглянуть на сгенерированный Verilog, чтобы понять, почему (короче говоря, Vec должен подробно описывать порты чтения / записи и разрешающие сигналы для каждого элемента в Vec; тогда как что-то вроде структуры Mem () обеспечивает очень быстрое .read () и .write () (в любом случае в бэкэнде C ++) для входа и выхода из Mem. Конечно, Mem работает только в том случае, если вам нужен Vec of Regs (), и вы не хотите указывать начальное значение). - person Chris; 17.10.2013
comment
Есть несколько причин, по которым ваша компиляция может быть медленной. Возможно, вы используете свопинг на своем компьютере; возможно, вам следует предоставить java JVM больше памяти для работы; возможно, вы используете более старый компилятор, у которого низкая производительность при компиляции длинных функций (предполагается, что вы используете gcc4.8). Если нет ни одной из этих проблем, вы можете опубликовать свой код, чтобы получить отзыв. - person Chris; 17.10.2013
comment
Покажу выложу коды. Я пробовал разные компьютеры с разным оборудованием и ОС (Ubuntu, macOS). Если я запускаю его на компьютере с небольшой памятью (2 ГБ на моем MacBook Air), jvM выдаст мне ошибку нехватки памяти. - person yidiyidawu; 17.10.2013