📄 aluctrl.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 + -