コード例 #1
0
        public void translateCacheBlockTest()
        {
            //Cache L1 = new Cache(Constants.CACHE_TYPE.dL1Cache);
            //Cache L2 = new Cache(Constants.CACHE_TYPE.L2Cache);

            Cache L1 = new Cache(Constants.CACHE_TYPE.L2Cache);
            VL3Cache L2 = new VL3Cache();

            Random rand = new Random(1);

            const int NUM_BLOCKS = 512;

            //iterator vars
            ulong phys36;
            Block L1_Block;
            Block L2_Block;
            Block Result_Block;
            uint L1_Tag;
            uint L2_Tag;
            ushort L1_Set;
            ushort L2_Set;
            byte L1_Offs;
            byte L2_Offs;

            for (int i = 0; i < NUM_BLOCKS; i++)
            {

                phys36 = (ulong)rand.Next(int.MaxValue);
                L1_Tag = CacheFieldParser.getTagFromPhysAddr(phys36, L1.TAG_WIDTH);
                L1_Set = CacheFieldParser.getSetIdxFromPhysAddr(phys36, L1.SET_IDX_WIDTH);
                L1_Offs = CacheFieldParser.getBlockOffsetFromPhysAddr(phys36);

                L2_Tag = CacheFieldParser.getTagFromPhysAddr(phys36, L2.TAG_WIDTH);
                L2_Set = CacheFieldParser.getSetIdxFromPhysAddr(phys36, L2.SET_IDX_WIDTH);
                L2_Offs = CacheFieldParser.getBlockOffsetFromPhysAddr(phys36);

                L1_Block = new Block(0, L1_Set, L1_Offs, L1_Tag);
                L2_Block = new Block(0, L2_Set, L2_Offs, L2_Tag);

                Result_Block = CacheFieldParser.translateCacheBlock(L2_Block, L2, L1);

                Assert.AreEqual(L1_Block.block_offset, Result_Block.block_offset);
                Assert.AreEqual(L1_Block.set, Result_Block.set);
                Assert.AreEqual(L1_Block.tag, Result_Block.tag);

            }
        }
コード例 #2
0
        public static Block translateCacheBlock(Block inBlock, VL3Cache Source, Cache Target)
        {
            int SourceTagWidth = Source.TAG_WIDTH;
            int SourceSetIdxWidth = Source.SET_IDX_WIDTH;
            int TargetTagWidth = Target.TAG_WIDTH;
            int TargetSetIdxWidth = Target.SET_IDX_WIDTH;

            Tuple<uint, ushort> Phys36_Pair = generatePhysicalAddr36Pair(inBlock, SourceTagWidth, SourceSetIdxWidth);
            ulong Phys36 = generatePhysAddr36(Phys36_Pair.Item1, Phys36_Pair.Item2);

            ushort SetIdx = getSetIdxFromPhysAddr(Phys36, TargetSetIdxWidth);
            byte BlockOffset = getBlockOffsetFromPhysAddr(Phys36);
            uint Tag = getTagFromPhysAddr(Phys36, TargetTagWidth);

            Block retBlock = new Block(0, SetIdx, BlockOffset, Tag);

            return retBlock;
        }