Added "findBy" function to allow grouping parameters by location (e.g. L1D vs L1I), rather than grouping by field (e.g. NSets vs NWays)
This commit is contained in:
		| @@ -8,8 +8,11 @@ import rocket._ | ||||
| import rocket.Util._ | ||||
|  | ||||
| class DefaultConfig extends ChiselConfig { | ||||
|   type PF = PartialFunction[Any,Any] | ||||
|   val topDefinitions:World.TopDefs = { | ||||
|     (pname,site,here) => pname match { | ||||
|     (pname,site,here) => { | ||||
|       def findBy(sname:Any):Any = here[PF](site[Any](sname))(pname) | ||||
|       pname match { | ||||
|         //RocketChip Parameters | ||||
|         case BuildTile => (r:Bool) => {new RocketTile(resetSignal = r)} | ||||
|         //HTIF Parameters | ||||
| @@ -30,28 +33,32 @@ class DefaultConfig extends ChiselConfig { | ||||
|         case MIFAddrBits => Dump("MEM_ADDR_BITS", site(PAddrBits) - site(CacheBlockOffsetBits)) | ||||
|         case MIFDataBeats => site(TLDataBits)/site(MIFDataBits) | ||||
|         //Params used by all caches | ||||
|         case NSets => findBy(CacheName) | ||||
|         case NWays => findBy(CacheName) | ||||
|         case RowBits => findBy(CacheName) | ||||
|         case BlockOffBits => findBy(CacheName) | ||||
|         case ECCCode => None | ||||
|         case WordBits => site(XprLen) | ||||
|         case Replacer => () => new RandomReplacement(site(NWays)) | ||||
|       case BlockOffBits => site(CacheName) match { | ||||
|         case "L1I" | "L1D" => log2Up(site(TLDataBits)/8) | ||||
|         case "L2" => 0 | ||||
|       } | ||||
|       case NSets => site(CacheName) match { | ||||
|         case "L1I" => 128 | ||||
|         case "L1D" => Knob("L1D_SETS") //128 | ||||
|         case "L2" => 512  | ||||
|       } | ||||
|       case NWays => site(CacheName) match { | ||||
|         case "L1I" => 2 | ||||
|         case "L1D" => Knob("L1D_WAYS") //4 | ||||
|         case "L2" => 8 | ||||
|       } | ||||
|       case RowBits => site(CacheName) match { | ||||
|         case "L1I" => 4*site(CoreInstBits) | ||||
|         case "L1D" => 2*site(CoreDataBits) | ||||
|         case "L2" => site(TLDataBits) | ||||
|       } | ||||
|         //Cache-Specific Params | ||||
|         case "L1I" => { | ||||
|           case NSets => 128 | ||||
|           case NWays => 2 | ||||
|           case RowBits => 4*site(CoreInstBits) | ||||
|           case BlockOffBits => log2Up(site(TLDataBits)/8) | ||||
|         }:PF | ||||
|         case "L1D" => { | ||||
|           case NSets => Knob("L1D_SETS") //128 | ||||
|           case NWays => Knob("L1D_WAYS") //4 | ||||
|           case RowBits => 2*site(CoreDataBits) | ||||
|           case BlockOffBits => log2Up(site(TLDataBits)/8) | ||||
|         }:PF | ||||
|         case "L2" => { | ||||
|           case NSets => 512  | ||||
|           case NWays => 8 | ||||
|           case RowBits => site(TLDataBits) | ||||
|           case BlockOffBits => 0 | ||||
|         }:PF | ||||
|         //L1InstCache | ||||
|         case NITLBEntries => 8 | ||||
|         case NBTBEntries => 62 | ||||
| @@ -117,6 +124,7 @@ class DefaultConfig extends ChiselConfig { | ||||
|         case Coherence => new MSICoherence(() => new NullRepresentation) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   override val knobValues:Any=>Any = { | ||||
|     case "NTILES" => 1 | ||||
|     case "NBANKS" => 1 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user