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