限制(Limitations)
对于未计时的断言暂不支持, 但似乎很多代码在第三方验证例子中的的使用这种代码风格。
四、例子(Example)
class RegFileIntrExample extends Component{
val io = new Bundle{
val apb = slave(Apb3(Apb3Config(16,32)))
val int_pulse0, int_pulse1, int_pulse2, int_pulse3 = in Bool()
val int_level0, int_level1, int_level2 = in Bool()
val sys_int = out Bool()
val gpio_int = out Bool()
}
val busif = BusInterface(io.apb, (0x000,1 KiB), 0, regPre = "AP")
io.sys_int := busif.interruptFactory("SYS",io.int_pulse0, io.int_pulse1, io.int_pulse2, io.int_pulse3)
io.gpio_int := busif.interruptLevelFactory("GPIO",io.int_level0, io.int_level1, io.int_level2, io.sys_int)
def genDoc() = {
busif.accept(CHeaderGenerator("intrreg","Intr"))
busif.accept(HtmlGenerator("intrreg", "Interupt Example"))
busif.accept(JsonGenerator("intrreg"))
this
}
this.genDoc()
}
五、开发区域(Developers Area)
用户可以通过扩展BusIfVistor Trait来添加用户的文档类型。
case class Latex(fileName : String) extends BusIfVisitor{ ... }
BusIfVistor提供对BusIf.RegInsts的访问来实现用户所需的:
// lib/src/main/scala/lib/bus/regif/BusIfVistor.scala
trait BusIfVisitor {
def begin(busDataWidth : Int) : Unit
def visit(descr : FifoDescr) : Unit
def visit(descr : RegDescr) : Unit
def end() : Unit
}