-
Notifications
You must be signed in to change notification settings - Fork 5
Chisel3坑汇总
Jason Yu edited this page Jul 19, 2018
·
8 revisions
-
Mem.apply
和new Mem
的实现似乎不同。直接使用后者在仿真时可能导致key not found的内部错误。猜测Mem.apply
在new Mem
之外裹了一层别的操作,new Mem
本身只是提供给chisel库内部使用的。 -
UInt
不支持修改其中某一位,要达到这个效果需要用Vec(x.toBools)
转成Vec
然后再用asUInt
转回去。 - 信号(包括输入输出端口)没有初始化可以导致仿真时的内部错误。
- 试图定义首位为1(即负数)的32位UInt时不能直接用0xffffffff.U(32.W)的形式,大概是因为前半部分会被Scala转成-1. 正确做法是定义成SInt再asUInt.
- 在定义定宽UInt(width.W)时,如果.W漏写,虽然可以通过语法检查,但会导致chisel认为这是一个UInt常量,后续对其的任何赋值将报错(reassign to Data)。
- Bundle构造函数中无法传参。因此若想定义多态的Bundle,需要在包含它的Module中做。例见src/main/scala/sysbus/SysBusSlave.scala
-
log2Up
最小返回1。也就是说log2Up(1) === 1