1
если у меня есть Io порт, который io.myoutput = UInt (ширина = 840)Присвоить VEC к UINT порты
Тогда у меня VAL а = vec.fill (140) {UInt (ширина = 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
Благодарности
законченные логический вывод (4) начать ширин проверки закончена шириной проверки начал flattenning закончили уплощение (941783) решения узлов к компонентам – yidiyidawu
спасибо много. Оно работает. Теперь я столкнулся с проблемой, что компилятор долота слишком медленный ... для решения узлов для компонентов требуется 4 часа. И сгенерированный файл verilog имеет 1 миллион строк. Является ли это тем, что вы делаете vec в долото? Похоже, что компилятор долота знает, как использовать «assign» в verilog. Он не знает, как оптимизировать код, используя «generate» в verilog – yidiyidawu
. Я не знаю, как выглядит ваш дизайн, поэтому я не могу точно сказать, разумно ли 4 часа. Однако, да, Vec, как правило, генерирует множество узлов. Вы должны взглянуть на сгенерированный Verilog, чтобы понять, почему (вкратце, Vec должен подробно описать порты чтения/записи и сигналы разрешения для каждого элемента в Vec, тогда как что-то вроде структуры Mem() обеспечивает очень быструю .read() и .write() (в любом случае на бэкэнде C++), чтобы войти и выйти из Mem. Конечно, Mem работает только если вы хотите Vec of Regs(), и вы не хотите указывать начальное значение). – Chris