|
楼主 |
发表于 2021-9-10 21:26:04
|
显示全部楼层
测试代码:
class MyArbiterTester(m:MyArbiter[UInt]) extends PeekPokeTester(m) {
poke(m.io.enq(0).valid,false)
poke(m.io.enq(1).valid,false)
poke(m.io.deq.ready,false)
println(s"启动:")
println(s"\tenq(0).ready=${peek(m.io.enq(0).ready)}, enq(1).ready=${peek(m.io.enq(1).ready)}")
println(s"\tenq(0).valid=${peek(m.io.enq(0).valid)}, enq(1).ready=${peek(m.io.enq(1).valid)}")
poke(m.io.enq(0).bits,18) //producer0的数据先输入在此,不变动
poke(m.io.enq(1).valid,true) //producer1的valid有效
poke(m.io.enq(1).bits,17)
poke(m.io.deq.ready,true) //下游发出ready
println(s"producer1有效:")
println(s"\tenq(0).ready=${peek(m.io.enq(0).ready)}, enq(1).ready=${peek(m.io.enq(1).ready)}")
println(s"deq.valid=${peek(m.io.deq.valid)},deq.bits=${peek(m.io.deq.bits)}")
poke(m.io.enq(0).valid,true)
println(s"producer1和2都有效:")
println(s"\tenq(0).ready=${peek(m.io.enq(0).ready)}, enq(1).ready=${peek(m.io.enq(1).ready)}")
println(s"deq.valid=${peek(m.io.deq.valid)},deq.bits=${peek(m.io.deq.bits)}")
poke(m.io.enq(1).valid,false)
println(s"producer0有效:")
println(s"\tenq(0).ready=${peek(m.io.enq(0).ready)}, enq(1).ready=${peek(m.io.enq(1).ready)}")
println(s"deq.valid=${peek(m.io.deq.valid)},deq.bits=${peek(m.io.deq.bits)}")
}
class DownTickerSpec extends ChiselFlatSpec {
"MyArbiter" should "pass" in {
iotesters.Driver(()=>new MyArbiter(UInt(8.W),2))(t => new MyArbiterTester(t))
}
}
显示如下:
[info] [0.003] 启动:
[info] [0.005] enq(0).ready=0, enq(1).ready=0
[info] [0.005] enq(0).valid=0, enq(1).ready=0
[info] [0.006] producer1有效:
[info] [0.007] enq(0).ready=1, enq(1).ready=1
[info] [0.007] deq.valid=1,deq.bits=17
[info] [0.007] producer1和2都有效:
[info] [0.008] enq(0).ready=1, enq(1).ready=0
[info] [0.009] deq.valid=1,deq.bits=18
[info] [0.009] producer0有效:
[info] [0.010] enq(0).ready=1, enq(1).ready=0
[info] [0.011] deq.valid=1,deq.bits=18 |
|