classdataTextendsBundle{ val data = UInt(32.W) val valid = Bool() }
classTest[T<:Data](eleT:T) extendsModule{ val io = IO(newBundle { val in = Input(Vec(2, eleT)) val out = Output(Vec(2, eleT)) }) val reg0 = Reg(eleT) val reg1 = Reg(eleT) reg0 := io.in(0) reg1 := io.in(1) io.out(0) := reg0 io.out(1) := reg1 }
objectMainextendsApp{ (new chisel3.stage.ChiselStage).emitVerilog(newTest(new dataT)) }
有助于对模块内硬件类型的参数化,比如在fifo中
然后是chisel3的赋值语句
比如下面的语句
1 2 3 4 5 6 7 8 9 10
classTestextendsModule{ val io = IO(newBundle{ val in = Input(UInt(32.W)) val out = Output(UInt(32.W)) }) val reg = Reg(UInt(32.W)) reg:= io.in io.out := reg io.out := io.in }
classTestextendsModule{ val io = IO(newBundle{ val in0 = Input(UInt(32.W)) val in1 = Input(UInt(32.W)) val en0 = Input(Bool()) val en1 = Input(Bool()) val out = Output(UInt(32.W)) }) val reg = Reg(UInt(32.W))
classTestextendsModule{ val io = IO(newBundle{ val in0 = Input(UInt(32.W)) val in1 = Input(UInt(32.W)) val en0 = Input(Bool()) val en1 = Input(Bool()) val out = Output(UInt(32.W)) }) val reg = Reg(UInt(32.W))
class Test extends Module{ val io = IO(new Bundle{ val in = Input(UInt(32.W)) val out = Output(UInt(32.W)) }) val reg = Wire(UInt(32.W)) reg := io.in io.out := reg }
class Test_Test extends AnyFlatSpec with ChiselScalatestTester { behavior of "Module" it should "work" in { //添加如下语句可以生成仿真波形图到本地,可以用gtkwave打开 test(new Test).withAnnotations(Seq(WriteVcdAnnotation)) { dut => dut.io.in.poke(12.U) dut.clock.step(1) dut.io.out.expect(12.U) } } }