Не привязан к исключению синтезируемого узла в памяти долота

Я получаю следующее исключение в коде долота.

[info] - should correctly write and read data *** FAILED ***
[info]   chisel3.core.Binding$BindingException: 'this' (chisel3.core.UInt@d7): Not bound to synthesizable node, currently only Type description
[info]   at chisel3.core.Binding$.checkSynthesizable(Binding.scala:184)
[info]   at chisel3.core.Data.connect(Data.scala:139)
[info]   at chisel3.core.Data.$colon$eq(Data.scala:204)
[info]   at Common.OnChipMemory$$anonfun$1.apply(memory.scala:88)
[info]   at Common.OnChipMemory$$anonfun$1.apply(memory.scala:60)
[info]   at scala.collection.immutable.Range.foreach(Range.scala:166)
[info]   at Common.OnChipMemory.<init>(memory.scala:60)
[info]   at Common.memoryTester$$anonfun$3$$anonfun$apply$1$$anonfun$apply$mcV$sp$1.apply(memoryTest.scala:32)
[info]   at Common.memoryTester$$anonfun$3$$anonfun$apply$1$$anonfun$apply$mcV$sp$1.apply(memoryTest.scala:32)
[info]   at chisel3.core.Module$.do_apply(Module.scala:35)

Из этой трассировки стека и некоторого тестирования методом проб и ошибок я обнаружил, что строка,

read_data := chipMem(data_idx) //line 88

вызывает проблему. Код, который непосредственно предшествует этому, размещен ниже.

val lsb_idx = log2Up(4) // index of lsb in address

val chipMem = Mem(Vec(4, UInt(width = 8)), num_lines)   // memory

val data_idx = req_addr >> UInt(lsb_idx)    //req_addr is a UInt

val read_data = Bits()

После этого мне не удалось найти причину проблемы. Я попытался изменить read_data на Vec of UInt и использовать read () для чтения из памяти.


person isururathnayaka    schedule 28.01.2017    source источник


Ответы (1)


Проблема связана с объявлением read_data. Bits() просто создает тип, а не фактическое аппаратное значение. Вам нужно сделать read_data фактическим Wire, а не только типом Bits. Также обратите внимание, что тип read_data должен быть таким же, как тип Mem, поэтому вы должны объявить read_data следующим образом:

val read_data = Wire(Vec(4, UInt(8.W)) 
person Jack Koenig    schedule 28.01.2017