Я получаю следующее исключение в буровом коде.Не связано с синтезируемым исключением узла в памяти долота
[info] - should correctly write and read data *** FAILED ***
[info] chisel3.core.Binding$BindingException: 'this' ([email protected]): 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() для чтения из памяти.