added Choice ship
[fleet.git] / ships / Alu1.ship
1 ship: Alu1
2
3 == Ports ===========================================================
4 data  in:   in
5 data  in:   inOp
6
7 data  out:  out
8
9 == Constants ========================================================
10 NEG:
11 INC:
12 DEC:
13 ABS:
14
15 == TeX ==============================================================
16 == Fleeterpreter ====================================================
17     public void service() {
18         if (box_in.dataReadyForShip() && box_inOp.dataReadyForShip()) {
19             int data   = box_in.removeDataForShip();
20             int opcode = box_inOp.removeDataForShip();
21             switch(opcode) {
22                 case 0: box_out.addDataFromShip(-1 * data);      // NEG
23                     break;
24                 case 1: box_out.addDataFromShip(data+1);         // INC
25                     break;
26                 case 2: box_out.addDataFromShip(data-1);         // DEC
27                     break;
28                 case 3: box_out.addDataFromShip(Math.abs(data)); // ABS
29                     break;
30                 default: box_out.addDataFromShip(0);
31                     break;
32             }
33         }
34     }
35
36 == FleetSim ==============================================================
37 == FPGA ==============================================================
38   reg                    have_a;
39   reg [(`DATAWIDTH-1):0] reg_a;
40   reg                    have_op;
41   reg [(`DATAWIDTH-1):0] reg_op;
42
43   always @(posedge clk) begin
44     if (!have_a) begin
45       `onread(in_r, in_a) have_a = 1; reg_a = in_d; end
46       end
47     if (!have_op) begin
48       `onread(inOp_r, inOp_a) have_op = 1; reg_op = inOp_d; end
49       end
50   
51     if (have_a && have_op) begin
52       case (reg_op)
53         0: out_d = -reg_a;
54         1: out_d = reg_a+1;
55         2: out_d = reg_a-1;
56         3: out_d = (reg_a<0) ? (-reg_a) : reg_a;
57         4: out_d = 37'b1111111111111111111111111111111111111;
58         default: out_d = 0;
59       endcase        
60       `onwrite(out_r, out_a)
61         have_a  = 0;
62         have_op = 0;
63       end
64     end
65   end
66
67
68 == Contributors =========================================================
69 Adam Megacz <megacz@cs.berkeley.edu>