| //- @Bus defines/binding Bus |
| //- Bus.node/kind interface |
| interface Bus; |
| //- @Addr defines/binding Addr |
| //- @Data defines/binding Data |
| logic [7:0] Addr, Data; |
| //- @RWn defines/binding Rwn |
| logic RWn; |
| endinterface |
| |
| //- @TestRAM defines/binding _ |
| module TestRAM; |
| x y; |
| //- @#0Bus ref Bus |
| //- @TheBus defines/binding TheBus |
| Bus TheBus(); |
| |
| //- @mem defines/binding Mem0 |
| logic[7:0] mem[0:7]; |
| |
| //- @#0RAM ref Ram |
| //- @TheRAM defines/binding _ |
| //- @MemBus ref MemBus |
| //- @TheBus ref TheBus |
| RAM TheRAM (.MemBus(TheBus)); |
| |
| initial |
| begin |
| //- @TheBus ref TheBus |
| //- @RWn ref Rwn |
| TheBus.RWn = 0; |
| |
| //- @TheBus ref TheBus |
| //- @Addr ref Addr |
| TheBus.Addr = 0; |
| |
| //- @#0I defines/binding I |
| //- @#1I ref I |
| //- @#2I ref I |
| for (int I=0; I<7; I++) |
| //- @#0TheBus ref TheBus |
| //- @#0Addr ref Addr |
| //- @#1TheBus ref TheBus |
| //- @#1Addr ref Addr |
| TheBus.Addr = TheBus.Addr + 1; |
| |
| //- @TheBus ref TheBus |
| //- @RWn ref Rwn |
| TheBus.RWn = 1; |
| |
| //- @TheBus ref TheBus |
| //- @Data ref Data |
| //- @mem ref Mem0 |
| TheBus.Data = mem[0]; |
| end |
| endmodule |
| |
| //- @RAM defines/binding Ram |
| //- @#0Bus ref Bus |
| //- @MemBus defines/binding MemBus |
| module RAM (Bus MemBus); |
| //- @mem defines/binding Mem |
| logic [7:0] mem[0:255]; |
| |
| always @* |
| //- @MemBus ref MemBus |
| //- @RWn ref Rwn |
| if (MemBus.RWn) |
| //- @#0MemBus ref MemBus |
| //- @Data ref Data |
| //- @#1MemBus ref MemBus |
| //- @Addr ref Addr |
| //- @mem ref Mem |
| MemBus.Data = mem[MemBus.Addr]; |
| else |
| //- @#0MemBus ref MemBus |
| //- @Addr ref Addr |
| //- @#1MemBus ref MemBus |
| //- @Data ref Data |
| //- @mem ref Mem |
| mem[MemBus.Addr] = MemBus.Data; |
| endmodule |