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

📄 alu.cpp

📁 国外开源的一个片上网络系统的源代码
💻 CPP
字号:
/* *  TU Eindhoven *  Eindhoven, The Netherlands * *  Name            :   alu.cc * *  Author          :   Sander Stuijk (sander@ics.ele.tue.nl) * *  Date            :   July 23, 2002 * *  Function        :   Arithmetic  Logic Unit * *  History         : *      23-07-02    :   Initial version. *      13-12-02    :   Synthesizable version A.S.Slusarczyk@tue.nl * */#include "alu.h" void ALU::alu_thread(){	sc_bv<DWORD> 			result;	sc_bv<1> 				zero, sign;	sc_uint<DWORD> 			s;	sc_uint<DWORD> 			t;	sc_uint<W_ALUCTRL>		ctrl_t;	sc_bv<2> sign2(0);	sc_bv<8> sign8(0);		//-> while (true) {		#ifdef VERBOSE			clog << "ALU" << endl;		#endif				// Read the inputs		s = a.read();		t = b.read();		ctrl_t = ctrl.read();		result = 0;		// Calculate result using selected operation		switch (ctrl_t) {			case 0x0:	// And						result = s & t;						break;			case 0x1:	// Or						result = s | t;						break;			case 0x2:	// Add						result = sc_int<DWORD>(s) + sc_int<DWORD>(t);						break;			case 0x3:	// Add unsigned						result = s + t;						break;									case 0x4:	// Xor						result = s ^ t;						break;									case 0x6:	// Subtract unsigned 						result = s - t;						break;			case 0x7:	// Set-on-less-than						if (sc_int<DWORD>(s) < sc_int<DWORD>(t))							result = 1;						else							result = 0;						break;						case 0x8:	// Set-on-less-than unsigned						if (s < t)							result = 1;						else							result = 0;						break;						case 0x9:	// Load upper immediate						result = t << 16;						break;						case 0xA:	// SLL (1 bit)						result = t << 1;						break;			case 0xB:	// SLL (2 bit)						result = t << 2;						break;									case 0xC:	// SLL (8 bit)						result = t << 8;						break;			case 0xD:	// SRL (1 bit)						result = t >> 1;						break;			case 0xE:	// SRL (2 bit)						result = t >> 2;						break;			case 0xF:	// SRL (8 bit)						result = t >> 8;						break;			case 0x10:	// SRA (1 bit)						sign = t.range(DWORD-1,DWORD-1);						result = t >> 1;						result.range(DWORD-1,DWORD-1) = sign;						break;			case 0x11:	// SRA (2 bit)						sign = t.range(DWORD-1,DWORD-1);						result = t >> 2;						result.range(DWORD-1,DWORD-2) = (sign, sign);						break;			case 0x12:	// SRA (8 bit)						sign = t.range(DWORD-1,DWORD-1);						result = t >> 8;                        for(int i=0; i<8; i++) sign8[i] = sign[0];						result.range(DWORD-1,DWORD-8) = sign8;						break;		}		// Calculate the zero output		if (sc_uint<DWORD>(result) == 0)			zero = 1;		else			zero = 0;		// Write results to output		r.write(result);		z.write(zero);				// Wait for next event		//-> wait();//-> 	}}

⌨️ 快捷键说明

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