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

📄 aluctrl.cpp

📁 改进的基于6个mips核的NOC网络
💻 CPP
字号:
/*
 *  TU Eindhoven
 *  Eindhoven, The Netherlands
 *
 *  Name            :   aluctrl.cc
 *
 *  Author          :   Sander Stuijk (sander@ics.ele.tue.nl)
 *                  
 *
 *  Date            :   July 23, 2002
 *
 *  Function        :   ALU controller
 *
 *  History         :
 *      23-07-02    :   Initial version.
 *      13-12-02    :   Synthesizable version A.S.Slusarczyk@tue.nl
 *      15-12-04    :   Multiply instruction version Jose Prats - jprats@step.es
 *
 */
 
#include "aluctrl.h"

void ALUCTRL::aluctrl_thread()
{
	sc_uint<W_ALUCTRL> aluCtrl;
	sc_uint<W_ALUOP> aluop;
	sc_uint<W_SHAMT> shamt;
	sc_uint<W_FUNCCODE> functioncode;
	
	//-> while (true) {
		#ifdef VERBOSE
			clog << "ALUCTRL" << endl;
		#endif
		
		// Determine output
		aluop = ALUop.read();
		shamt = Shamt.read();
		
		switch (aluop) {
			case 0x0:	// Add signed
						aluCtrl = 0x2;
						break;
			
			case 0x1:	// Subtract unsigned
						aluCtrl = 0x6;
						break;
			
			case 0x2:	// R-type instruction, look to functionCode
						functioncode = functionCode.read();
						functioncode = functioncode.range(5,0); 
						switch (functioncode) {
							case 0x0:	// Sll
										switch (shamt) {
											case 1: aluCtrl = 0xA; break;
											case 2: aluCtrl = 0xB; break;
											case 8: aluCtrl = 0xC; break;
											default : aluCtrl = 0x0; break;
										}
										break;
							
							case 0x2:	// Srl
										switch (shamt) {
											case 1: aluCtrl = 0xD; break;
											case 2: aluCtrl = 0xE; break;
											case 8: aluCtrl = 0xF; break;
											default : aluCtrl = 0x0; break;
										}
										break;
							
							case 0x3:	// Sra
										switch (shamt) {
											case 1: aluCtrl = 0x10; break;
											case 2: aluCtrl = 0x11; break;
											case 8: aluCtrl = 0x12; break;
											default : aluCtrl = 0x0; break;
										}
										break;
										
							case 0x19:	// Unsigned Multiply
										aluCtrl = 0x13;
										break;
							
							case 0x20:	// Add signed
										aluCtrl = 0x2;
										break;
							
							case 0x21:	// Add unsigned
										aluCtrl = 0x3;
										break;
										
							case 0x23:	// Subtract unsigned
										aluCtrl = 0x6;
										break;
							
							case 0x24:	// And
										aluCtrl = 0x0;
										break;
							
							case 0x25:	// Or
										aluCtrl = 0x1;
										break;
							
							case 0x26:	// Xor
										aluCtrl = 0x4;
										break;
										
							case 0x2A:	// Set-on-less-than (2's complement)
										aluCtrl = 0x7;
										break;

							case 0x2B:	// Set-on-less-than (unsigned)
										aluCtrl = 0x8;
										break;
							default : aluCtrl = 0x0; break;
		
						}
						break;
			
			case 0x3:	// Add unsigned
						aluCtrl = 0x3;
						break;
			
			case 0x4:	// And
						aluCtrl = 0x0;
						break;
			
			case 0x5:	// Or
						aluCtrl = 0x1;
						break;
			
			case 0x6:	// Xor
						aluCtrl = 0x4;
						break;
			
			case 0x7:	// Slt
						aluCtrl = 0x7;
						break;
			
			case 0x8:	// Sltu
						aluCtrl = 0x8;
						break;
			
			case 0x9:	// Lui
						aluCtrl = 0x9;
						break;
			default : aluCtrl = 0x0; break;
		}
		
		// Set result on output
		ALUctrl.write(aluCtrl);
		
		// Wait for new event
		//-> wait();
//-> 	}
}

⌨️ 快捷键说明

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