OpenCores
URL https://opencores.org/ocsvn/instruction_list_pipelined_processor_with_peripherals/instruction_list_pipelined_processor_with_peripherals/trunk

Subversion Repositories instruction_list_pipelined_processor_with_peripherals

[/] [instruction_list_pipelined_processor_with_peripherals/] [trunk/] [hdl/] [alu.v] - Blame information for rev 9

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 maheshpalv
 
2
`include "timescale.v"
3
`include "defines.v"
4
 
5 6 maheshpalv
        module alu (input [`aluOpcodeLen-1:0] aluOpcode, input [7:0] op1, input [7:0] op2, input aluEn,
6 3 maheshpalv
                                output [7:0] aluOut, output carryOut);
7
 
8
 
9
                wire [8:0] operand1 = {1'b0, op1};
10
                wire [8:0] operand2 = {1'b0, op2};
11
 
12
                wire [8:0] addRes = operand1 + operand2;
13
                wire [8:0] subRes = operand1 - operand2;
14
 
15 9 maheshpalv
                reg [8:0] aluOut = 0;
16
                reg carryOut = 0;
17 3 maheshpalv
 
18 7 maheshpalv
                always @ (aluEn or addRes or subRes or op1 or op2 or aluOpcode)
19 3 maheshpalv
                begin
20
 
21
 
22 6 maheshpalv
                if (aluEn)
23
                begin
24
 
25
                                case (aluOpcode)
26
 
27
                                `AND_alu        :       begin
28 9 maheshpalv
                                                                aluOut = op1 & op2;
29 6 maheshpalv
                                                                end
30
 
31
                                `OR_alu         :       begin
32 9 maheshpalv
                                                                aluOut = op1 | op2;
33 6 maheshpalv
                                                                end
34
 
35
                                `XOR_alu        :       begin
36 9 maheshpalv
                                                                aluOut = op1^op2;
37 6 maheshpalv
                                                                end
38
 
39
                                `GT_alu         :       begin
40 9 maheshpalv
                                                                aluOut = op1>op2 ? 1'b1 : 1'b0;
41 6 maheshpalv
                                                                end
42
 
43
                                `GE_alu         :       begin
44 9 maheshpalv
                                                                aluOut = op1>=op2 ? 1'b1 : 1'b0;
45 6 maheshpalv
                                                                end
46
 
47
                                `EQ_alu         :       begin
48 9 maheshpalv
                                                                aluOut = op1==op2 ? 1'b1 : 1'b0;
49 6 maheshpalv
                                                                end
50
 
51
                                `LE_alu         :       begin
52 9 maheshpalv
                                                                aluOut = op1<=op2 ? 1'b1 : 1'b0;
53 6 maheshpalv
                                                                end
54
 
55
                                `LT_alu         :       begin
56 9 maheshpalv
                                                                aluOut = op1<op2 ? 1'b1 : 1'b0;
57 6 maheshpalv
                                                                end
58
 
59
                                `ADD_alu        :       begin
60 9 maheshpalv
                                                                aluOut = addRes[7:0];
61
                                                                carryOut = addRes[8];
62 6 maheshpalv
                                                                end
63
 
64
                                `SUB_alu        :       begin
65 9 maheshpalv
                                                                aluOut = subRes[7:0];
66
                                                                carryOut = subRes[8];
67 6 maheshpalv
                                                                end
68
 
69
                                `LD_data        :       begin
70 9 maheshpalv
                                                                aluOut = op2;
71 6 maheshpalv
                                                                end
72
 
73
                                default         :       begin
74 9 maheshpalv
                                                                aluOut = 16'b0;
75 8 maheshpalv
                                                                $write ("\nUnknown operation. \tmodule : ALU");
76 6 maheshpalv
                                                                end
77
                                endcase
78
 
79
                        end
80
                        else
81
                        begin
82
 
83 9 maheshpalv
                                aluOut = aluOut;
84 6 maheshpalv
                        end
85
 
86 3 maheshpalv
                end
87
 
88
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.