-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main.java
141 lines (123 loc) · 5.18 KB
/
Main.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main{
public static boolean isXY;
public static FileWriter writer;
public static void main(String[] args) throws IOException {
// Reading file
File file = new File("input.txt");
Scanner sc1 = new Scanner(file);
Scanner sc2 = new Scanner(file);
int numberOfLines = 0;
// Reading number of lines ;
while(sc1.hasNextLine()){
numberOfLines++;
sc1.nextLine();
}
PayLoad[] inputPayload = new PayLoad[numberOfLines];
int i = 0;
while(sc2.hasNextLine()){
String[] data = sc2.nextLine().split(" ");
inputPayload[i] = new PayLoad(data[0], data[1], data[2], data[3]);
i++;
}
Arrays.sort(inputPayload, new Comparator<PayLoad>() {
@Override
public int compare(PayLoad o1, PayLoad o2) {
return Integer.parseInt(o1.cycle) - Integer.parseInt(o2.cycle);
}
});
writer = new FileWriter("Log.txt"); // Writting Log File
writer.write("Data has been divided in 12 packets , each of 8 bits\n");
writer.write('\n');
Scanner input = new Scanner(System.in);
System.out.print("Choose routing algorithm (XY/YX) : ");
String route = input.nextLine();
if(route.equals("XY")) isXY = true;
else if(route.equals("YX")) isXY = false;
else System.out.println("Run the simulation again!");
for(int j = 0; j<numberOfLines ; j++){
String[] data = {inputPayload[j].cycle, inputPayload[j].Src, inputPayload[j].Dst, inputPayload[j].data};
process process = new process(data);
process.run();
}
writer.close();
sc1.close();
sc2.close();
input.close();
}
}
class process{
public static String pointer;
public static int cycleNum;
String[] Data;
process(String[] data){
this.Data = data;
cycleNum = Integer.parseInt(data[0]);
}
public void run() throws IOException{
// Create Header
String[] head = {Data[1],Data[2]};
// Create Packets of size 8 bits each
// Data would be of 96 bits , so there would be 12 packets each of size 8 bits
Main.writer.write("Data has been entered in the NOC. The source of the data is PE "+head[0]+" and the destination is PE "+head[1]+'\n');
Main.writer.write("Cycle starts for this data transaction at "+cycleNum+'\n');
Main.writer.write('\n');
int k = 0;
for(int i = 0 ; i<12; i++){
String data = Data[3].substring(k,k+8);
k = k+8;
int tail = -1;
if(i==11) tail = 1;
String[][] payload = {head,{data},{Integer.toString(tail)}};
if(head[0].equals("1")){
RouterA routerA = new RouterA(payload);
pointer = "A";
cycleNum++;
Main.writer.write(" * "+"At cycle : "+cycleNum+" -- "+"Data flit : "+Arrays.toString(payload[0])+" "+data+" " +Arrays.toString(payload[2])+" transfered from "+head[0]+" to "+pointer+'\n');
routerA.switchallocator();
}
if(head[0].equals("2")){
RouterB routerB = new RouterB(payload);
pointer = "B";
cycleNum++;
Main.writer.write(" * "+"At cycle : "+cycleNum+" -- "+"Data flit : "+Arrays.toString(payload[0])+" "+data+" " +Arrays.toString(payload[2])+" transfered from "+head[0]+" to "+pointer+'\n');
routerB.switchallocator();
}
if(head[0].equals("3")){
RouterC routerC = new RouterC(payload);
pointer = "C";
cycleNum++;
Main.writer.write(" * "+"At cycle : "+cycleNum+" -- "+"Data flit : "+Arrays.toString(payload[0])+" "+data+" " +Arrays.toString(payload[2])+" transfered from "+head[0]+" to "+pointer+'\n');
routerC.switchallocator();
}
if(head[0].equals("4")){
RouterD routerD = new RouterD(payload);
pointer = "D";
cycleNum++;
Main.writer.write(" * "+"At cycle : "+cycleNum+" -- "+"Data flit : "+Arrays.toString(payload[0])+" "+data+" " +Arrays.toString(payload[2])+" transfered from "+head[0]+" to "+pointer+'\n');
routerD.switchallocator();
}
if(tail==1){
Main.writer.write("Data : "+Data[3]+" has been completed transfered from PE "+head[0]+" to PE "+head[1]+'\n');
Main.writer.write('\n');
}
}
}
}
class PayLoad{
String cycle;
String Src;
String Dst;
String data;
PayLoad(String a, String b, String c, String d){
this.cycle = a;
this.Src = b;
this.Dst = c;
this.data = d;
}
}