blob: 07f55f6b4949db0b47d7bb31e42a6ec78635222d [file] [log] [blame]
package tilelink
import org.scalatest._
import chiseltest._
import chisel3._
import merl.uit.tilelink.{Arbiter, TLConfiguration}
class ArbiterTest extends FlatSpec with ChiselScalatestTester with Matchers {
implicit val tl_conf = TLConfiguration()
behavior of "Arbiter connecting multiple hosts to single device"
it should "connect host 0 with device" in {
test(new Arbiter(2)) { c =>
c.io.req_i(0).poke(false.B)
c.io.req_i(1).poke(true.B)
// Host 1 data
c.io.data_i(0).a_data.poke(0.U)
c.io.data_i(0).a_mask.poke("b1111".U)
c.io.data_i(0).a_address.poke(0.U)
c.io.data_i(0).a_source.poke(0.U)
c.io.data_i(0).a_size.poke(2.U)
c.io.data_i(0).a_param.poke(0.U)
c.io.data_i(0).a_opcode.poke(4.U)
c.io.data_i(0).a_valid.poke(true.B)
c.io.data_i(0).d_ready.poke(true.B)
// Host 2 data
c.io.data_i(1).a_data.poke(10.U)
c.io.data_i(1).a_mask.poke("b1111".U)
c.io.data_i(1).a_address.poke(4.U)
c.io.data_i(1).a_source.poke(0.U)
c.io.data_i(1).a_size.poke(2.U)
c.io.data_i(1).a_param.poke(0.U)
c.io.data_i(1).a_opcode.poke(1.U)
c.io.data_i(1).a_valid.poke(true.B)
c.io.data_i(1).d_ready.poke(true.B)
// the slave is ready to accept the data
c.io.ready_i.poke(true.B)
c.io.gnt_o(0).expect(false.B)
c.io.gnt_o(1).expect(true.B)
c.io.valid_o.expect(true.B)
c.io.data_o.a_opcode.expect(1.U)
}
}
}