Mercurial > pygar
view core/src/MemTypes.bsv @ 65:cf8bb3038cbd pygar svn.66
[svn r66] sim passes
author | punk |
---|---|
date | Tue, 11 May 2010 09:05:22 -0400 |
parents | 91a1f76ddd62 |
children |
line wrap: on
line source
2 import Trace::*;4 //----------------------------------------------------------------------5 // Basic memory requests and responses6 //----------------------------------------------------------------------8 typedef union tagged9 {10 struct { Bit#(addrSz) addr; Bit#(tagSz) tag; } LoadReq;11 struct { Bit#(addrSz) addr; Bit#(tagSz) tag; Bit#(dataSz) data; } StoreReq;12 }13 MemReq#( type addrSz, type tagSz, type dataSz )14 deriving(Eq,Bits);16 typedef union tagged17 {18 struct { Bit#(tagSz) tag; Bit#(dataSz) data; } LoadResp;19 struct { Bit#(tagSz) tag; } StoreResp;20 }21 MemResp#( type tagSz, type dataSz )22 deriving(Eq,Bits);24 //----------------------------------------------------------------------25 // Specialized req/resp for inst/data/host26 //----------------------------------------------------------------------28 typedef 32 AddrSz;29 typedef 08 TagSz;30 typedef 32 DataSz;31 typedef 32 InstSz;32 typedef 32 HostDataSz;34 typedef MemReq#(AddrSz,TagSz,0) InstReq;35 typedef MemResp#(TagSz,InstSz) InstResp;37 typedef MemReq#(AddrSz,TagSz,DataSz) DataReq;38 typedef MemResp#(TagSz,DataSz) DataResp;40 typedef MemReq#(AddrSz,TagSz,HostDataSz) HostReq;41 typedef MemResp#(TagSz,HostDataSz) HostResp;43 //----------------------------------------------------------------------44 // Specialized req/resp for main memory45 //----------------------------------------------------------------------47 typedef 32 MainMemAddrSz;48 typedef 08 MainMemTagSz;49 typedef 32 MainMemDataSz;51 typedef MemReq#(MainMemAddrSz,MainMemTagSz,MainMemDataSz) MainMemReq;52 typedef MemResp#(MainMemTagSz,MainMemDataSz) MainMemResp;54 //----------------------------------------------------------------------55 // Tracing Functions56 //----------------------------------------------------------------------58 instance Traceable#(MemReq#(a,b,c));60 function Action traceTiny( String loc, String ttag, MemReq#(a,b,c) req );61 case ( req ) matches62 tagged LoadReq .ld : $fdisplay(stderr, " => %s:%s l%2x", loc, ttag, ld.tag );63 tagged StoreReq .st : $fdisplay(stderr, " => %s:%s s%2x", loc, ttag, st.tag );64 endcase65 endfunction67 function Action traceFull( String loc, String ttag, MemReq#(a,b,c) req );68 case ( req ) matches69 tagged LoadReq .ld : $fdisplay(stderr, " => %s:%s Ld { addr=%x, tag=%x }", loc, ttag, ld.addr, ld.tag );70 tagged StoreReq .st : $fdisplay(stderr, " => %s:%s St { addr=%x, tag=%x, data=%x }", loc, ttag, st.addr, st.tag, st.data );71 endcase72 endfunction74 endinstance76 instance Traceable#(MemResp#(a,b));78 function Action traceTiny( String loc, String ttag, MemResp#(a,b) resp );79 case ( resp ) matches80 tagged LoadResp .ld : $fdisplay(stderr, " => %s:%s l%2x", loc, ttag, ld.tag );81 tagged StoreResp .st : $fdisplay(stderr, " => %s:%s s%2x", loc, ttag, st.tag );82 endcase83 endfunction85 function Action traceFull( String loc, String ttag, MemResp#(a,b) resp );86 case ( resp ) matches87 tagged LoadResp .ld : $fdisplay(stderr, " => %s:%s Ld { tag=%x, data=%x }", loc, ttag, ld.tag, ld.data );88 tagged StoreResp .st : $fdisplay(stderr, " => %s:%s St { tag=%x }", loc, ttag, st.tag );89 endcase90 endfunction92 endinstance