annotate core/src/MemTypes.bsv @ 1:91a1f76ddd62 pygar svn.2

[svn r2] Adding initial lab 5 source
author punk
date Tue, 13 Apr 2010 17:34:33 -0400
parents
children
rev   line source
punk@1 1
punk@1 2 import Trace::*;
punk@1 3
punk@1 4 //----------------------------------------------------------------------
punk@1 5 // Basic memory requests and responses
punk@1 6 //----------------------------------------------------------------------
punk@1 7
punk@1 8 typedef union tagged
punk@1 9 {
punk@1 10 struct { Bit#(addrSz) addr; Bit#(tagSz) tag; } LoadReq;
punk@1 11 struct { Bit#(addrSz) addr; Bit#(tagSz) tag; Bit#(dataSz) data; } StoreReq;
punk@1 12 }
punk@1 13 MemReq#( type addrSz, type tagSz, type dataSz )
punk@1 14 deriving(Eq,Bits);
punk@1 15
punk@1 16 typedef union tagged
punk@1 17 {
punk@1 18 struct { Bit#(tagSz) tag; Bit#(dataSz) data; } LoadResp;
punk@1 19 struct { Bit#(tagSz) tag; } StoreResp;
punk@1 20 }
punk@1 21 MemResp#( type tagSz, type dataSz )
punk@1 22 deriving(Eq,Bits);
punk@1 23
punk@1 24 //----------------------------------------------------------------------
punk@1 25 // Specialized req/resp for inst/data/host
punk@1 26 //----------------------------------------------------------------------
punk@1 27
punk@1 28 typedef 32 AddrSz;
punk@1 29 typedef 08 TagSz;
punk@1 30 typedef 32 DataSz;
punk@1 31 typedef 32 InstSz;
punk@1 32 typedef 32 HostDataSz;
punk@1 33
punk@1 34 typedef MemReq#(AddrSz,TagSz,0) InstReq;
punk@1 35 typedef MemResp#(TagSz,InstSz) InstResp;
punk@1 36
punk@1 37 typedef MemReq#(AddrSz,TagSz,DataSz) DataReq;
punk@1 38 typedef MemResp#(TagSz,DataSz) DataResp;
punk@1 39
punk@1 40 typedef MemReq#(AddrSz,TagSz,HostDataSz) HostReq;
punk@1 41 typedef MemResp#(TagSz,HostDataSz) HostResp;
punk@1 42
punk@1 43 //----------------------------------------------------------------------
punk@1 44 // Specialized req/resp for main memory
punk@1 45 //----------------------------------------------------------------------
punk@1 46
punk@1 47 typedef 32 MainMemAddrSz;
punk@1 48 typedef 08 MainMemTagSz;
punk@1 49 typedef 32 MainMemDataSz;
punk@1 50
punk@1 51 typedef MemReq#(MainMemAddrSz,MainMemTagSz,MainMemDataSz) MainMemReq;
punk@1 52 typedef MemResp#(MainMemTagSz,MainMemDataSz) MainMemResp;
punk@1 53
punk@1 54 //----------------------------------------------------------------------
punk@1 55 // Tracing Functions
punk@1 56 //----------------------------------------------------------------------
punk@1 57
punk@1 58 instance Traceable#(MemReq#(a,b,c));
punk@1 59
punk@1 60 function Action traceTiny( String loc, String ttag, MemReq#(a,b,c) req );
punk@1 61 case ( req ) matches
punk@1 62 tagged LoadReq .ld : $fdisplay(stderr, " => %s:%s l%2x", loc, ttag, ld.tag );
punk@1 63 tagged StoreReq .st : $fdisplay(stderr, " => %s:%s s%2x", loc, ttag, st.tag );
punk@1 64 endcase
punk@1 65 endfunction
punk@1 66
punk@1 67 function Action traceFull( String loc, String ttag, MemReq#(a,b,c) req );
punk@1 68 case ( req ) matches
punk@1 69 tagged LoadReq .ld : $fdisplay(stderr, " => %s:%s Ld { addr=%x, tag=%x }", loc, ttag, ld.addr, ld.tag );
punk@1 70 tagged StoreReq .st : $fdisplay(stderr, " => %s:%s St { addr=%x, tag=%x, data=%x }", loc, ttag, st.addr, st.tag, st.data );
punk@1 71 endcase
punk@1 72 endfunction
punk@1 73
punk@1 74 endinstance
punk@1 75
punk@1 76 instance Traceable#(MemResp#(a,b));
punk@1 77
punk@1 78 function Action traceTiny( String loc, String ttag, MemResp#(a,b) resp );
punk@1 79 case ( resp ) matches
punk@1 80 tagged LoadResp .ld : $fdisplay(stderr, " => %s:%s l%2x", loc, ttag, ld.tag );
punk@1 81 tagged StoreResp .st : $fdisplay(stderr, " => %s:%s s%2x", loc, ttag, st.tag );
punk@1 82 endcase
punk@1 83 endfunction
punk@1 84
punk@1 85 function Action traceFull( String loc, String ttag, MemResp#(a,b) resp );
punk@1 86 case ( resp ) matches
punk@1 87 tagged LoadResp .ld : $fdisplay(stderr, " => %s:%s Ld { tag=%x, data=%x }", loc, ttag, ld.tag, ld.data );
punk@1 88 tagged StoreResp .st : $fdisplay(stderr, " => %s:%s St { tag=%x }", loc, ttag, st.tag );
punk@1 89 endcase
punk@1 90 endfunction
punk@1 91
punk@1 92 endinstance
punk@1 93