⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 varblockcache.java

📁 Java Op Processor java vhdl processor
💻 JAVA
字号:
/****	Simulation of simple cache (as in JOP)**/package com.jopdesign.tools;public class VarBlockCache extends Cache {	int[] ctag;//	int[] clen;		// for different replace policy	int next = 0;	int currentBlock = 0;	int numBlocks;	int blockSize;	int mask;	boolean stackNext;	VarBlockCache(int[] main, JopSim js, int size, int num, boolean stkNxt) {		mem = main;		sim = js;		numBlocks = num;		blockSize = MAX_BC*size/numBlocks;		mask = 0;		for (int i=(MAX_BC*size)>>1; i>0; i >>>= 1) {			mask <<= 1;			mask |= 1;		}		bc = new byte[MAX_BC*size];		ctag = new int[numBlocks];		for (int i=0; i<numBlocks; ++i) {			ctag[i] = 0;		}		stackNext = stkNxt;	}	int corrPc(int pc) {		// save block relative pc on invoke// System.out.println("corr pc:" +((pc - currentBlock*blockSize) & mask));		return (pc - currentBlock*blockSize) & mask;	}	int invoke(int start, int len) {		int off = testCache(start, len);// System.out.println("invoke: "+off);		return off;	}	int ret(int start, int len, int pc) {/*	stack-next policy*/		if (stackNext) {			next = currentBlock;		}		int off = testCache(start, len);// System.out.println("return pc: "+((off+pc) & mask));		return (off+pc) & mask;	}	int testCache(int start, int len) {		for (int i=0; i<numBlocks; ++i) {			if (ctag[i]==start) {	// HIT				currentBlock = i;// System.out.println("hit in "+i+" off: "+(currentBlock*blockSize));				return currentBlock*blockSize;			}		}		// not found		currentBlock = next;		for (int i=0; i<=len*4/blockSize; ++i) {			ctag[next] = 0;				// block in use			++next;			next %= numBlocks;// System.out.print(i+" "+next+" - ");		}		ctag[currentBlock] = start;		// start block// for (int i=0; i<4; ++i) System.out.print(ctag[i]+" "); System.out.println("next="+next+" len="+len);		int off = currentBlock*blockSize;		loadBc(off, start, len);		return off;	}// a different version of loadBc !!!	void loadBc(int off, int start, int len) {// high byte of word is first bc!!!		for (int i=0; i<len; ++i) {			int val = sim.readInstrMem(start+i);			for (int j=0; j<4; ++j) {				bc[(off+i*4+(3-j)) & mask] = (byte) val;				val >>>= 8;			}		}		memRead += len*4;		memTrans++;	}	byte bc(int addr) {		++cacheRead;		return bc[addr & mask];	}	public String toString() {/*		return super.toString()+" ("+(bc.length/1024)+" KB "+			(numBlocks<10 ? " " : "")+numBlocks+" blks)";		return "Variable block cache "+numBlocks+ " blocks & "+			(bc.length/1024)+" KB";*/		return "Variable block cache "+(bc.length/1024)+" KB & "+numBlocks;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -