12 #ifndef DEFINITION_ELECTRICAL_H 13 #define DEFINITION_ELECTRICAL_H 22 FILE* parameter_flie_electrical;
23 FILE* configuration_file_electrical;
24 FILE* output_file_electrical;
27 double pcb_layer_height;
28 double pcb_trace_width;
29 double pcb_trace_height;
30 double pcb_trace_pair_pitch;
31 double pcb_loss_tangent;
32 double pcb_dielectric;
33 double package_pin_pitch;
36 double trace_half_depth_f;
37 double trace_characteristic_z;
38 double trace_unit_length_c;
39 double trace_direct_current_r;
40 double trace_input_impendance;
41 double electrical_pin_load_c;
44 double la_threshold_voltage;
45 double la_offset_coefficent;
46 double la_coefficent_margin;
47 double circuit_voltage;
50 double serdes_cur_electrical;
51 double serdes_area_electrical;
56 double length_electrical;
57 int serdes_ratio_electrical;
58 int number_of_parallel_traces;
61 double sensitivity_la;
62 double crosstalk_coefficient_electrical;
63 double total_attenuation_electrical;
64 double energy_consumption_electrical;
65 double area_density_electrical;
66 double linear_density_electrical;
67 double area_electrical;
68 double latency_value_electrical;
71 void read_parameter_electrical() {
72 printf(
"Electrical:\n");
73 char* name =
new char[50];
74 char* unit =
new char[20];
75 parameter_flie_electrical = fopen(
"../config/parameter_electrical.txt",
"r");
76 if (parameter_flie_electrical == NULL) {
77 printf(
"Cannot open file parameter_electrical.txt\n");
81 for (
int i = 0; i < 10; i++) {
84 getline(&line, &len, parameter_flie_electrical);
90 fscanf(parameter_flie_electrical,
"%s\n", name);
92 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &pcb_layer_height, name, unit);
93 printf(
"%s\t%f\t%s\n", name, pcb_layer_height, unit);
94 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &pcb_trace_width, name, unit);
95 printf(
"%s\t\t%f\t%s\n", name, pcb_trace_width, unit);
96 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &pcb_trace_height, name, unit);
97 printf(
"%s\t%f\t%s\n", name, pcb_trace_height, unit);
98 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &pcb_trace_pair_pitch, name, unit);
99 printf(
"%s\t%f\t%s\n", name, pcb_trace_pair_pitch, unit);
100 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &pcb_loss_tangent, name, unit);
101 printf(
"%s\t%f\t%s\n", name, pcb_loss_tangent, unit);
102 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &pcb_dielectric, name, unit);
103 printf(
"%s\t\t%f\t%s\n", name, pcb_dielectric, unit);
104 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &package_pin_pitch, name, unit);
105 printf(
"%s\t%f\t%s\n", name, package_pin_pitch, unit);
108 fscanf(parameter_flie_electrical,
"%s\n", name);
109 printf(
"%s\n", name);
110 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &trace_half_depth_f, name, unit);
111 printf(
"%s\t%f\t%s\n", name, trace_half_depth_f, unit);
112 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &trace_characteristic_z, name, unit);
113 printf(
"%s\t%f\t%s\n", name, trace_characteristic_z, unit);
114 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &trace_unit_length_c, name, unit);
115 printf(
"%s\t%f\t%s\n", name, trace_unit_length_c, unit);
116 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &trace_direct_current_r, name, unit);
117 printf(
"%s\t%f\t%s\n", name, trace_direct_current_r, unit);
118 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &trace_input_impendance, name, unit);
119 printf(
"%s\t%f\t%s\n", name, trace_input_impendance, unit);
120 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &electrical_pin_load_c, name, unit);
121 printf(
"%s\t%f\t%s\n", name, electrical_pin_load_c, unit);
124 fscanf(parameter_flie_electrical,
"%s\n", name);
125 printf(
"%s\n", name);
126 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &la_threshold_voltage, name, unit);
127 printf(
"%s\t%f\t%s\n", name, la_threshold_voltage, unit);
128 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &la_offset_coefficent, name, unit);
129 printf(
"%s\t%f\t%s\n", name, la_offset_coefficent, unit);
130 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &la_coefficent_margin, name, unit);
131 printf(
"%s\t%f\t%s\n", name, la_coefficent_margin, unit);
132 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &circuit_voltage, name, unit);
133 printf(
"%s\t\t%f\t%s\n", name, circuit_voltage, unit);
136 fscanf(parameter_flie_electrical,
"%s\n", name);
137 printf(
"%s\n", name);
138 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &serdes_cur_electrical, name, unit);
139 printf(
"%s\t%f\t%s\n", name, serdes_cur_electrical, unit);
140 fscanf(parameter_flie_electrical,
"%lf %s %s\n", &serdes_area_electrical, name, unit);
141 printf(
"%s\t%f\t%s\n", name, serdes_area_electrical, unit);
144 fclose(parameter_flie_electrical);
148 void read_configuration_electrical() {
162 ifstream parameter_flie_electrical(
"../config/configuration_electrical.txt");
165 for (
int i = 0; i < 10; i++) {
167 getline(parameter_flie_electrical, line);
176 parameter_flie_electrical >> data_rate_electrical;
177 parameter_flie_electrical >> name;
178 parameter_flie_electrical >> unit;
179 printf(
"%s\t%f\t%s\n", name, data_rate_electrical, unit);
180 parameter_flie_electrical >> length_electrical;
181 parameter_flie_electrical >> name;
182 parameter_flie_electrical >> unit;
183 printf(
"%s\t%f\t%s\n", name, length_electrical, unit);
184 parameter_flie_electrical >> serdes_ratio_electrical;
185 parameter_flie_electrical >> name;
186 parameter_flie_electrical >> unit;
187 printf(
"%s\t%d\t\t%s\n", name, serdes_ratio_electrical, unit);
188 parameter_flie_electrical >> number_of_parallel_traces;
189 parameter_flie_electrical >> name;
190 parameter_flie_electrical >> unit;
191 printf(
"%s\t\t%d\t\t%s\n", name, number_of_parallel_traces, unit);
194 parameter_flie_electrical.close();
198 void write_result_electrical() {
199 printf(
"Electrical:\n");
200 if ((output_file_electrical = fopen(
"output_electrical.txt",
"w")) == NULL) {
201 printf(
"Cannot open file output_electrical.txt\n");
205 fprintf(output_file_electrical,
"/*********************************************************************************");
206 fprintf(output_file_electrical,
"\n *");
207 fprintf(output_file_electrical,
"\n * File name: output_electrical.txt");
208 fprintf(output_file_electrical,
"\n * Version: 3.0");
209 fprintf(output_file_electrical,
"\n * Software: OEIL");
210 fprintf(output_file_electrical,
"\n * Authors: Zhehui Wang, Jiang Xu ");
211 fprintf(output_file_electrical,
"\n * Website: http://www.ece.ust.hk/~eexu/");
212 fprintf(output_file_electrical,
"\n * The copyright information of this program can be found in the file COPYRIGHT.");
213 fprintf(output_file_electrical,
"\n *");
214 fprintf(output_file_electrical,
"\n *********************************************************************************/");
215 fprintf(output_file_electrical,
"\n");
218 printf(
"sensitivity_la\t\t%lf\tmW\n", sensitivity_la);
219 fprintf(output_file_electrical,
"sensitivity_la\t\t%lf\tmW\n", sensitivity_la);
220 printf(
"crosstalk_coefficient\t%lf\tN/A\n", crosstalk_coefficient_electrical);
221 fprintf(output_file_electrical,
"crosstalk_coefficient\t%lf\tN/A\n", crosstalk_coefficient_electrical);
222 printf(
"total_attenuation\t%lf\tN/A\n", total_attenuation_electrical);
223 fprintf(output_file_electrical,
"total_attenuation\t%lf\tN/A\n", total_attenuation_electrical);
224 printf(
"\t\t\t%lf\tdB\n", -10 * log10(total_attenuation_electrical));
225 fprintf(output_file_electrical,
"\t\t\t%lf\tdB\n", -10 * log10(total_attenuation_electrical));
226 printf(
"energy_consumption\t%lf\tpJ/bit\n", energy_consumption_electrical);
227 fprintf(output_file_electrical,
"energy_consumption\t%lf\tpJ/bit\n", energy_consumption_electrical);
228 printf(
"area_density\t\t%lf\tGbps/mm^2\n", area_density_electrical);
229 fprintf(output_file_electrical,
"area_density\t\t%lf\tGbps/mm^2\n", area_density_electrical);
230 printf(
"linear_density\t\t%lf\tGbps/mm\n", linear_density_electrical);
231 fprintf(output_file_electrical,
"linear_density\t\t%lf\tGbps/mm\n", linear_density_electrical);
232 printf(
"area\t\t\t%lf\tmm^2\n", area_electrical);
233 fprintf(output_file_electrical,
"area\t\t\t%lf\tmm^2\n", area_electrical);
234 printf(
"latency\t\t\t%lf\tns\n", latency_value_electrical);
235 fprintf(output_file_electrical,
"latency\t\t\t%lf\tns\n", latency_value_electrical);
237 fclose(output_file_electrical);