3 == Ports ===========================================================
7 constant REPEAT_C1_V1: 0
8 constant REPEAT_C1_V2: 1
9 constant REPEAT_C2_V1: 2
10 constant REPEAT_C2_V2: 3
11 constant PASS_C1_V1: 4
12 constant PASS_C1_V2: 5
13 constant PASS_C2_V1: 6
14 constant PASS_C2_V2: 7
15 constant DROP_C1_V1: 8
16 constant DROP_C1_V2: 9
17 constant DROP_C2_V1: 10
18 constant DROP_C2_V2: 11
22 == Fleeterpreter ====================================================
23 public void service() { }
25 == FleetSim ==============================================================
27 == FPGA ==============================================================
29 reg [`DATAWIDTH-1:0] temp;
30 initial temp = {`DATAWIDTH{1'b1}};
33 wire op_count; assign op_count = inOp_d==12;
34 wire op_repeat; assign op_repeat = inOp_d[3:2]==0;
35 wire op_pass; assign op_pass = inOp_d[3:2]==1;
36 wire op_drop; assign op_drop = inOp_d[3:2]==2;
37 wire op_c1; assign op_c1 = (op_repeat || op_pass || op_drop) && !inOp_d[1];
38 wire op_c2; assign op_c2 = (op_repeat || op_pass || op_drop) && inOp_d[1];
39 wire op_v1; assign op_v1 = (op_repeat || op_pass || op_drop) && !inOp_d[0];
40 wire op_v2; assign op_v2 = (op_repeat || op_pass || op_drop) && inOp_d[0];
41 assign out_d_ = op_v1 ? in1_d : op_v2 ? in2_d : temp;
43 // FIXME: REPEAT with a count of zero will not work properly
45 always @(posedge clk) begin
51 if (!in1_r && in1_a) in1_a <= 0;
52 if (!in2_r && in2_a) in2_a <= 0;
53 if (!inOp_r && inOp_a) inOp_a <= 0;
54 if (!inOp_r && !inOp_a) full <= 0;
55 if (out_r && out_a) begin
57 if (op_count) temp <= temp - in2_d;
58 else temp <= temp - 1;
59 if (op_pass && op_v1) in1_a <= 1;
60 if (op_pass && op_v2) in2_a <= 1;
61 end else if (inOp_r && !inOp_a) begin
63 if (op_count && in1_r && !in1_a && in2_r && !in2_a) begin
64 temp <= in1_d[`DATAWIDTH-1:0] - in2_d[`DATAWIDTH-1:0];
67 end else if (op_c1 && in1_r && !in1_a) begin
68 temp <= in1_d[`DATAWIDTH-1:0]-1;
71 end else if (op_c2 && in2_r && !in2_a) begin
72 temp <= in2_d[`DATAWIDTH-1:0]-1;
76 end else if (temp[`DATAWIDTH-1]) begin
81 end else if (op_repeat && op_v1) begin
83 end else if (op_repeat && op_v2) begin
86 end else if (!out_r && !out_a) begin
89 end else if (op_v1 && in1_r && !in1_a) begin
90 if (op_drop) begin in1_a <= 1; temp <= temp-1; end
92 end else if (op_v2 && in2_r && !in2_a) begin
93 if (op_drop) begin in2_a <= 1; temp <= temp-1; end
101 == Test =================================================================
103 #ship counter : Counter
154 collect, send to debug.in;
157 == Contributors =========================================================
158 Adam Megacz <megacz@cs.berkeley.edu>