diff --git a/vram/MemArbiter.bsv b/vram/MemArbiter.bsv index 356d7b4..9807e94 100644 --- a/vram/MemArbiter.bsv +++ b/vram/MemArbiter.bsv @@ -1,5 +1,6 @@ package MemArbiter; +import Connectable::*; import Vector::*; export MemArbiterWrite(..); @@ -22,6 +23,18 @@ interface MemArbiterClient#(type request); method Action grant(); endinterface +instance Connectable#(MemArbiterClient#(req), MemArbiterServer#(req)); + module mkConnection(MemArbiterClient#(req) client, MemArbiterServer#(req) server, Empty ifc); + rule send_request; + server.request(client.request()); + endrule + + rule send_grant (server.grant()); + client.grant(); + endrule + endmodule +endinstance + typedef struct { Bool write; addr addr; diff --git a/vram/MemArbiter_Test.bsv b/vram/MemArbiter_Test.bsv index f415a5e..a622ac7 100644 --- a/vram/MemArbiter_Test.bsv +++ b/vram/MemArbiter_Test.bsv @@ -71,8 +71,6 @@ function TestCase testCase(String name, endfunction module mkTB(); - MemArbiter#(Addr) dut <- mkMemArbiter(); - Vector#(29, TestCase) tests = vec( testCase("All idle", idle, idle, idle, @@ -197,6 +195,8 @@ module mkTB(); read(0), idle, idle, -1, 0)); + MemArbiter#(Addr) dut <- mkMemArbiter(); + Reg#(UInt#(32)) idx <- mkReg(0); rule display_test (idx == 0);