punk@1: signature MemTypes where { punk@1: import ¶Counter®¶; punk@1: punk@1: import ¶FIFOF_®¶; punk@1: punk@1: import ¶FIFOF®¶; punk@1: punk@1: import ¶FIFO®¶; punk@1: punk@1: import ¶Inout®¶; punk@1: punk@1: import ¶List®¶; punk@1: punk@1: import ¶Clocks®¶; punk@1: punk@1: import ¶ListN®¶; punk@1: punk@1: import ¶PrimArray®¶; punk@1: punk@1: import ¶Vector®¶; punk@1: punk@1: import ¶Connectable®¶; punk@1: punk@1: import ¶GetPut®¶; punk@1: punk@1: import ¶ClientServer®¶; punk@1: punk@1: import Trace; punk@1: punk@1: data (MemTypes.MemReq :: # -> # -> # -> *) addrSz tagSz dataSz = punk@1: MemTypes.LoadReq (MemTypes.¶MemReq_$LoadReq¶ addrSz tagSz dataSz) | punk@1: MemTypes.StoreReq (MemTypes.¶MemReq_$StoreReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUndefined®¶ (MemTypes.MemReq addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimDeepSeqCond®¶ (MemTypes.MemReq addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUninitialized®¶ (MemTypes.MemReq addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Eq®¶ (MemTypes.MemReq addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes (¶Prelude®¶.¶Add®¶ 1 _v103 _v100, punk@1: ¶Prelude®¶.¶Max®¶ _v101 _v104 _v103, punk@1: ¶Prelude®¶.¶Add®¶ _v105 _v104 _v103, punk@1: ¶Prelude®¶.¶Add®¶ _v102 _v101 _v103, punk@1: ¶Prelude®¶.¶Add®¶ addrSz _v106 _v104, punk@1: ¶Prelude®¶.¶Add®¶ tagSz dataSz _v106, punk@1: ¶Prelude®¶.¶Add®¶ addrSz tagSz _v101) => punk@1: ¶Prelude®¶.¶Bits®¶ (MemTypes.MemReq addrSz tagSz dataSz) _v100; punk@1: punk@1: struct (MemTypes.¶MemReq_$LoadReq¶ :: # -> # -> # -> *) addrSz tagSz dataSz = { punk@1: MemTypes.addr :: ¶Prelude®¶.¶Bit®¶ addrSz; punk@1: MemTypes.tag :: ¶Prelude®¶.¶Bit®¶ tagSz punk@1: }; punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUndefined®¶ (MemTypes.¶MemReq_$LoadReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimDeepSeqCond®¶ (MemTypes.¶MemReq_$LoadReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUninitialized®¶ punk@1: (MemTypes.¶MemReq_$LoadReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Eq®¶ (MemTypes.¶MemReq_$LoadReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes (¶Prelude®¶.¶Add®¶ _v101 _v104 _v100) => punk@1: ¶Prelude®¶.¶Bits®¶ (MemTypes.¶MemReq_$LoadReq¶ _v101 _v104 dataSz) _v100; punk@1: punk@1: struct (MemTypes.¶MemReq_$StoreReq¶ :: # -> # -> # -> *) addrSz tagSz dataSz = { punk@1: MemTypes.addr :: ¶Prelude®¶.¶Bit®¶ addrSz; punk@1: MemTypes.tag :: ¶Prelude®¶.¶Bit®¶ tagSz; punk@1: MemTypes.¡data¡ :: ¶Prelude®¶.¶Bit®¶ dataSz punk@1: }; punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUndefined®¶ (MemTypes.¶MemReq_$StoreReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimDeepSeqCond®¶ (MemTypes.¶MemReq_$StoreReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUninitialized®¶ punk@1: (MemTypes.¶MemReq_$StoreReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Eq®¶ (MemTypes.¶MemReq_$StoreReq¶ addrSz tagSz dataSz); punk@1: punk@1: instance MemTypes (¶Prelude®¶.¶Add®¶ _v101 _v100 _v103, ¶Prelude®¶.¶Add®¶ _v104 _v107 _v100) => punk@1: ¶Prelude®¶.¶Bits®¶ (MemTypes.¶MemReq_$StoreReq¶ _v101 _v104 _v107) _v103; punk@1: punk@1: data (MemTypes.MemResp :: # -> # -> *) tagSz dataSz = punk@1: MemTypes.LoadResp (MemTypes.¶MemResp_$LoadResp¶ tagSz dataSz) | punk@1: MemTypes.StoreResp (MemTypes.¶MemResp_$StoreResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUndefined®¶ (MemTypes.MemResp tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimDeepSeqCond®¶ (MemTypes.MemResp tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUninitialized®¶ (MemTypes.MemResp tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Eq®¶ (MemTypes.MemResp tagSz dataSz); punk@1: punk@1: instance MemTypes (¶Prelude®¶.¶Add®¶ 1 _v103 _v100, punk@1: ¶Prelude®¶.¶Max®¶ _v101 _v104 _v103, punk@1: ¶Prelude®¶.¶Add®¶ _v105 _v104 _v103, punk@1: ¶Prelude®¶.¶Add®¶ _v102 _v101 _v103, punk@1: ¶Prelude®¶.¶Add®¶ _v104 dataSz _v101) => punk@1: ¶Prelude®¶.¶Bits®¶ (MemTypes.MemResp _v104 dataSz) _v100; punk@1: punk@1: struct (MemTypes.¶MemResp_$LoadResp¶ :: # -> # -> *) tagSz dataSz = { punk@1: MemTypes.tag :: ¶Prelude®¶.¶Bit®¶ tagSz; punk@1: MemTypes.¡data¡ :: ¶Prelude®¶.¶Bit®¶ dataSz punk@1: }; punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUndefined®¶ (MemTypes.¶MemResp_$LoadResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimDeepSeqCond®¶ (MemTypes.¶MemResp_$LoadResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUninitialized®¶ (MemTypes.¶MemResp_$LoadResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Eq®¶ (MemTypes.¶MemResp_$LoadResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes (¶Prelude®¶.¶Add®¶ _v101 _v104 _v100) => punk@1: ¶Prelude®¶.¶Bits®¶ (MemTypes.¶MemResp_$LoadResp¶ _v101 _v104) _v100; punk@1: punk@1: struct (MemTypes.¶MemResp_$StoreResp¶ :: # -> # -> *) tagSz dataSz = { punk@1: MemTypes.tag :: ¶Prelude®¶.¶Bit®¶ tagSz punk@1: }; punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUndefined®¶ (MemTypes.¶MemResp_$StoreResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimDeepSeqCond®¶ (MemTypes.¶MemResp_$StoreResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶PrimMakeUninitialized®¶ (MemTypes.¶MemResp_$StoreResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Eq®¶ (MemTypes.¶MemResp_$StoreResp¶ tagSz dataSz); punk@1: punk@1: instance MemTypes ¶Prelude®¶.¶Bits®¶ (MemTypes.¶MemResp_$StoreResp¶ _v101 dataSz) _v101; punk@1: punk@1: type (MemTypes.AddrSz :: #) = 32; punk@1: punk@1: type (MemTypes.TagSz :: #) = 8; punk@1: punk@1: type (MemTypes.DataSz :: #) = 32; punk@1: punk@1: type (MemTypes.InstSz :: #) = 32; punk@1: punk@1: type (MemTypes.HostDataSz :: #) = 32; punk@1: punk@1: type (MemTypes.InstReq :: *) = MemTypes.MemReq MemTypes.AddrSz MemTypes.TagSz 0; punk@1: punk@1: type (MemTypes.InstResp :: *) = MemTypes.MemResp MemTypes.TagSz MemTypes.InstSz; punk@1: punk@1: type (MemTypes.DataReq :: *) = MemTypes.MemReq MemTypes.AddrSz MemTypes.TagSz MemTypes.DataSz; punk@1: punk@1: type (MemTypes.DataResp :: *) = MemTypes.MemResp MemTypes.TagSz MemTypes.DataSz; punk@1: punk@1: type (MemTypes.HostReq :: *) = MemTypes.MemReq MemTypes.AddrSz MemTypes.TagSz MemTypes.HostDataSz; punk@1: punk@1: type (MemTypes.HostResp :: *) = MemTypes.MemResp MemTypes.TagSz MemTypes.HostDataSz; punk@1: punk@1: type (MemTypes.MainMemAddrSz :: #) = 32; punk@1: punk@1: type (MemTypes.MainMemTagSz :: #) = 8; punk@1: punk@1: type (MemTypes.MainMemDataSz :: #) = 32; punk@1: punk@1: type (MemTypes.MainMemReq :: *) = punk@1: MemTypes.MemReq MemTypes.MainMemAddrSz MemTypes.MainMemTagSz MemTypes.MainMemDataSz; punk@1: punk@1: type (MemTypes.MainMemResp :: *) = MemTypes.MemResp MemTypes.MainMemTagSz MemTypes.MainMemDataSz; punk@1: punk@1: instance MemTypes Trace.Traceable (MemTypes.MemReq a b c); punk@1: punk@1: instance MemTypes Trace.Traceable (MemTypes.MemResp a b) punk@1: }