public IEnumerator SingleMemoryRequest() { int testAddress = 0; // create two mock layers MemoryLayer upperLayer = MockLayer(new Vector3(50, 0, 50)); MemoryLayer lowerLayer = MockLayer(new Vector3(0, 0, 50)); // release for a frame so that start can be called on the layers yield return(null); // associate the layers with eachother upperLayer.layerBelow = lowerLayer; lowerLayer.layerAbove = upperLayer; // set the layer latencies to 1 which will make the packets arrive in a single update upperLayer.layerLatency = 1; lowerLayer.layerLatency = 1; // add some memory addresses to the upper layer upperLayer.AddMemoryLocation(testAddress); // make some requests on the lower layer lowerLayer.MakeRequest(testAddress); // wait until the request has been fulfilled yield return(new WaitForSeconds(1)); // Check that the lower layer now has the address in its list Assert.IsTrue(lowerLayer.CheckForAddress(testAddress) >= 0); }
public IEnumerator ElementReplacement() { // setup the layers MemoryLayer upperLayer = MockLayer(new Vector3(50, 0, 50)); MemoryLayer lowerLayer = MockLayer(new Vector3(0, 0, 50)); // release for a frame so that start can be called on the layers yield return(null); // associate the layers with eachother upperLayer.layerBelow = lowerLayer; lowerLayer.layerAbove = upperLayer; // set the layer latencies to 1 which will make the packets arrive in a single update upperLayer.layerLatency = 1; lowerLayer.layerLatency = 1; // add addresses to the upper layer upperLayer.AddMemoryLocation(0); upperLayer.AddMemoryLocation(1); upperLayer.AddMemoryLocation(2); upperLayer.AddMemoryLocation(3); upperLayer.AddMemoryLocation(4); // set the size of the lower layer to 3 lowerLayer.SetSize(3); // make three calls to fill the lower layer lowerLayer.MakeRequest(0); lowerLayer.MakeRequest(1); lowerLayer.MakeRequest(2); // wait for the requests to be handled yield return(new WaitForSeconds(1)); // make a new request which should cause a replacement lowerLayer.MakeRequest(3); // wait for the request to be handled yield return(new WaitForSeconds(1)); // the lower layer should now contain the most recently requseted address Assert.IsTrue(lowerLayer.CheckForAddress(3) >= 0); // it should also only contain three elements Assert.IsTrue(3 == lowerLayer.memoryLocations.Count); }
/* Causes the cpu to ask the next memory layer for a chunk of memory */ public virtual void MakeRequest(int address) { Debug.Log("Layer " + absoluteLayerNumber + ": Request received for address=" + address); if (CheckForAddress(address) >= 0) { Debug.Log("Layer " + absoluteLayerNumber + ": Have cached address=" + address); FulfillRequest(address); } else { Debug.Log("Layer " + absoluteLayerNumber + ": Address not in cache, passing on request for address=" + address); // animate the packet after this layers latency layerAbove.MakeRequest(address); } }