设计中常常需要定义一些常量,给多个模块复用, rocketchip中通过trait+package object的方式定义常量
1. 首先在trait中定义consts常量
文件命名:const.scala
package freechips.rocketchip.rocket.constants
trait ScalarOpConstants {
def X = BitPat("b?")
def N = BitPat("b0")
def Y = BitPat("b1")
...
}
trait MemoryOpConstants {
val NUM_XA_OPS = 9
val M_SZ = 5
def M_X = BitPat("b?????");
def M_XRD = UInt("b00000"); // int load
def M_XWR = UInt("b00001"); // int store
...
}
2. 单独定义一个package object,打包trait中的常量
文件命名:package.scala
package freechips.rocketchip
package object rocket extends rocket.constants.ScalarOpConstants with rocket.constants.MemoryOpConstants
3. 使用方式:import 导入上述package object
import freechips.rocketchip.rocket._