1 | #ifndef _ALU_32_H |
---|
2 | #define _ALU_32_H |
---|
3 | #include "systemc.h" |
---|
4 | |
---|
5 | SC_MODULE(alu_32) |
---|
6 | { |
---|
7 | sc_in<sc_uint<32> > A; |
---|
8 | sc_in<sc_uint<32> > B; |
---|
9 | sc_in<sc_uint<3> > Aluop; |
---|
10 | sc_out<sc_uint<32> > Aluout; |
---|
11 | sc_out<bool> zero; |
---|
12 | |
---|
13 | SC_CTOR(alu_32) |
---|
14 | { |
---|
15 | SC_METHOD(mWrite); |
---|
16 | sensitive << A << B << Aluop ; |
---|
17 | } |
---|
18 | |
---|
19 | void mWrite() |
---|
20 | { |
---|
21 | sc_uint<32> result = 0 ; |
---|
22 | sc_uint<32> opA ; |
---|
23 | sc_uint<32> opB ; |
---|
24 | |
---|
25 | opA = A.read() ; |
---|
26 | opB = B.read() ; |
---|
27 | |
---|
28 | switch(Aluop.read()) |
---|
29 | { |
---|
30 | case 0: |
---|
31 | result = opA & opB ; |
---|
32 | break; |
---|
33 | case 1: |
---|
34 | result = opA | opB ; |
---|
35 | break; |
---|
36 | case 2: |
---|
37 | result = opA + opB ; |
---|
38 | break; |
---|
39 | case 6: |
---|
40 | result = opA - opB ; |
---|
41 | break; |
---|
42 | case 7: |
---|
43 | result = opA | opB ; |
---|
44 | break; |
---|
45 | default: |
---|
46 | cout << "aluop illegal" << endl ; |
---|
47 | break; |
---|
48 | |
---|
49 | } |
---|
50 | Aluout=result; |
---|
51 | zero=(result==0)?1:0; |
---|
52 | } |
---|
53 | }; |
---|
54 | #endif |
---|