massive overhaul of fpga code
[fleet.git] / src / edu / berkeley / fleet / fpga / FpgaPath.java
1 package edu.berkeley.fleet.fpga;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.two.*;
4 import edu.berkeley.fleet.*;
5 import java.lang.reflect.*;
6 import java.util.*;
7 import java.io.*;
8 import static edu.berkeley.fleet.two.FleetTwoFleet.*;
9 import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
10
11
12 public class FpgaPath extends Path {
13
14     private boolean[] path;
15     private FpgaDestination dest;
16     public final BitVector signal;
17
18     public Dock        getSource() { throw new RuntimeException("not implemented"); }
19     public Destination getDestination() { return dest; }
20     
21     private FpgaPath(boolean[] path, FpgaDestination dest, BitVector signal) {
22         this.signal = signal;
23         this.path = path;
24         this.dest = dest;
25     }
26
27     public long toLong() {
28         long ret = 0;
29         for(int i=0; i<path.length; i++) {
30             if (path[i]) ret |= (1 << i);
31         }
32         if (signal != null)
33             for(int i=0; i<signal.length(); i++) {
34                 if (signal.get(i))
35                     ret |= (1L << (i+11));
36             }
37         return ret;
38     }
39
40     public String toString() {
41         StringBuffer ret = new StringBuffer();
42         for(int i=0; i<path.length; i++) {
43             if (i>0) ret.append('_');
44             ret.append(path[i] ? "1" : "0");
45         }
46         return ret.toString()+(signal==null?"":(":"+signal));
47     }
48
49     public FpgaPath prepend(boolean b) {
50         boolean[] newpath = new boolean[path.length+1];
51         System.arraycopy(path, 0, newpath, 1, path.length);
52         newpath[0] = b;
53         return new FpgaPath(newpath, dest, signal);
54     }
55     public FpgaPath append(boolean b, FpgaDestination newdest) {
56         boolean[] newpath = new boolean[path.length+1];
57         System.arraycopy(path, 0, newpath, 0, path.length);
58         newpath[newpath.length-1] = b;
59         return new FpgaPath(newpath, newdest, signal);
60     }
61
62     public int getBufferingAmount() {
63         throw new RuntimeException("not implemented");
64     }
65
66     public int getLatencyMetric() {
67         return 0;
68     }
69
70     public static FpgaPath emptyPath(FpgaDestination dest, BitVector signal) {
71         return new FpgaPath(new boolean[0], dest, signal);
72     }
73
74     public BitVector getSignal() { return null; }
75
76 }