registerbank.dit

来自「可以自由开发的MIPS仿真器模型(.exe),指令执行动画显示.通过修改grap」· DIT 代码 · 共 78 行

DIT
78
字号
// a register bank
class CRegisterBank
{
	// inputs:
	
	// the register must be kinda clocked to work cause we cant guarantee that
	// the inputs are all correct
	// this is the clock input
	in Ph2:1
	
	in ReadRegister1:5
	in ReadRegister2:5
	
	// wb:
	in RegWrite:1
	in WriteRegister:5
	in WriteData
	
	
	// outputs:
	out ReadData1
	out ReadData2
	
	// ports for register view
	// maybe I should make the register bank in c++... But what fun would that be
	in vpRegNbr:5
	in vpWrite
	out vpRead
	out vpUpdate
	
	script
		
		// registers are stored in this array
		var R = new Array(32);
		R[0] = 0;

		function OnPh2()
			{
				
				// write back must be done first.
				var WbReg = WriteRegister.Get();
				if ( RegWrite.Get() && WbReg!=0 )
					{
						R[WbReg] = WriteData.Get();
						
						// notify the view
						vpUpdate.Set(WbReg);
					}
				
				// and the outputs next:
				ReadData1.Set( R[ReadRegister1.Get()] );
				ReadData2.Set( R[ReadRegister2.Get()] );
			}

	function OnVpRegNbr()
	{
		vpRead.Set(R[vpRegNbr.Get()]);
	}

	function OnVpWrite()
	{
		
		if ( vpRegNbr.Get()!=0 )
		{
			R[vpRegNbr.Get()] = vpWrite.Get();
			vpUpdate.Set(vpRegNbr.Get());
			ReadData1.Set( R[ReadRegister1.Get()] );
			ReadData2.Set( R[ReadRegister2.Get()] );
		}
	}
		
	end_script
	
	event Ph2 OnPh2()
	event vpRegNbr OnVpRegNbr()
	event vpWrite OnVpWrite();
}

⌨️ 快捷键说明

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