2013-10-15 6 views
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 

Благодарности

ответ

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

Метод "toBits" является то, что вы хотите. Он выравнивает Vec в свои исходные бит.

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

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

Что выдает сообщение об ошибке.

+0

законченные логический вывод (4) начать ширин проверки закончена шириной проверки начал flattenning закончили уплощение (941783) решения узлов к компонентам – yidiyidawu

+0

спасибо много. Оно работает. Теперь я столкнулся с проблемой, что компилятор долота слишком медленный ... для решения узлов для компонентов требуется 4 часа. И сгенерированный файл verilog имеет 1 миллион строк. Является ли это тем, что вы делаете vec в долото? Похоже, что компилятор долота знает, как использовать «assign» в verilog. Он не знает, как оптимизировать код, используя «generate» в verilog – yidiyidawu

+0

. Я не знаю, как выглядит ваш дизайн, поэтому я не могу точно сказать, разумно ли 4 часа. Однако, да, Vec, как правило, генерирует множество узлов. Вы должны взглянуть на сгенерированный Verilog, чтобы понять, почему (вкратце, Vec должен подробно описать порты чтения/записи и сигналы разрешения для каждого элемента в Vec, тогда как что-то вроде структуры Mem() обеспечивает очень быструю .read() и .write() (в любом случае на бэкэнде C++), чтобы войти и выйти из Mem. Конечно, Mem работает только если вы хотите Vec of Regs(), и вы не хотите указывать начальное значение). – Chris