1
0
Fork 0

some fixes and cleanup to stateless bridge

This commit is contained in:
Howard Mao 2016-07-21 18:33:46 -07:00
parent c31c650def
commit 75347eed56
4 changed files with 30 additions and 8 deletions

View File

@ -48,9 +48,9 @@ CONFIGS=DefaultConfig DefaultL2Config DefaultBufferlessConfig RoccExampleConfig
endif
ifeq ($(SUITE),GroundtestSuite)
CONFIGS=MemtestConfig MemtestBufferlessConfig FancyMemtestConfig \
CONFIGS=MemtestConfig MemtestBufferlessConfig MemtestStatelessConfig FancyMemtestConfig \
BroadcastRegressionTestConfig BufferlessRegressionTestConfig CacheRegressionTestConfig \
ComparatorConfig ComparatorBufferlessConfig ComparatorL2Config \
ComparatorConfig ComparatorBufferlessConfig ComparatorL2Config ComparatorStatelessConfig \
UnitTestConfig
endif

View File

@ -256,7 +256,7 @@ class BaseConfig extends Config (
dataBits = site(XLen))
case TLKey("L1toL2") =>
TileLinkParameters(
coherencePolicy = (if (site(NTiles) == 1)
coherencePolicy = (if (site(NCachedTileLinkPorts) <= 1)
new MEICoherence(site(L2DirectoryRepresentation)) else
new MESICoherence(site(L2DirectoryRepresentation))),
nManagers = site(NBanksPerMemoryChannel)*site(NMemoryChannels) + 1 /* MMIO */,
@ -381,12 +381,28 @@ class WithBufferlessBroadcastHub extends Config(
case OuterTLId => "L2toMC" })))
})
/**
* WARNING!!! IGNORE AT YOUR OWN PERIL!!!
*
* There is a very restrictive set of conditions under which the stateless
* bridge will function properly. There can only be a single tile. This tile
* MUST use the blocking data cache (L1D_MSHRS == 0) and MUST NOT have an
* uncached channel capable of writes (i.e. a RoCC accelerator).
*
* This is because the stateless bridge CANNOT generate probes, so if your
* system depends on coherence between channels in any way,
* DO NOT use this configuration.
*/
class WithStatelessBridge extends Config (
(pname, site, here) => pname match {
topDefinitions = (pname, site, here) => pname match {
case BuildL2CoherenceManager => (id: Int, p: Parameters) =>
Module(new ManagerToClientStatelessBridge()(p.alterPartial({
case InnerTLId => "L1toL2"
case OuterTLId => "L2toMC" })))
},
knobValues = {
case "L1D_MSHRS" => 0
case _ => throw new CDEMatchError
}
)

View File

@ -19,7 +19,9 @@ class WithGroundTest extends Config(
(pname, site, here) => pname match {
case TLKey("L1toL2") =>
TileLinkParameters(
coherencePolicy = new MESICoherence(site(L2DirectoryRepresentation)),
coherencePolicy = (if (site(NCachedTileLinkPorts) <= 1)
new MEICoherence(site(L2DirectoryRepresentation)) else
new MESICoherence(site(L2DirectoryRepresentation))),
nManagers = site(NBanksPerMemoryChannel)*site(NMemoryChannels) + 1,
nCachingClients = site(NCachedTileLinkPorts),
nCachelessClients = site(NUncachedTileLinkPorts),
@ -211,12 +213,16 @@ class ComparatorL2Config extends Config(
new WithL2Cache ++ new ComparatorConfig)
class ComparatorBufferlessConfig extends Config(
new WithBufferlessBroadcastHub ++ new ComparatorConfig)
class ComparatorStatelessConfig extends Config(
new WithStatelessBridge ++ new ComparatorConfig)
class MemtestConfig extends Config(new WithMemtest ++ new GroundTestConfig)
class MemtestL2Config extends Config(
new WithMemtest ++ new WithL2Cache ++ new GroundTestConfig)
new WithL2Cache ++ new MemtestConfig)
class MemtestBufferlessConfig extends Config(
new WithMemtest ++ new WithBufferlessBroadcastHub ++ new GroundTestConfig)
new WithBufferlessBroadcastHub ++ new MemtestConfig)
class MemtestStatelessConfig extends Config(
new WithNGenerators(0, 1) ++ new WithStatelessBridge ++ new MemtestConfig)
// Test ALL the things
class FancyMemtestConfig extends Config(
new WithNGenerators(1, 2) ++ new WithNCores(2) ++ new WithMemtest ++

2
uncore

@ -1 +1 @@
Subproject commit b4092a6ff8021b0e57ab5ce8c11ef6a6dafec1fb
Subproject commit 384655ea7b09f9d14014737a2cba1a9489151900