@@ -172,7 +172,7 @@ void free_arch(t_arch* arch) {
172
172
vtr::free (arch->architecture_id );
173
173
174
174
if (arch->model_library ) {
175
- for (int i = 0 ; i < 4 ; ++i) {
175
+ for (int i = 0 ; i < 5 ; ++i) {
176
176
vtr::t_linked_vptr* vptr = arch->model_library [i].pb_types ;
177
177
while (vptr) {
178
178
vtr::t_linked_vptr* vptr_prev = vptr;
@@ -198,6 +198,12 @@ void free_arch(t_arch* arch) {
198
198
delete[] arch->model_library [3 ].inputs ;
199
199
vtr::free (arch->model_library [3 ].outputs ->name );
200
200
delete[] arch->model_library [3 ].outputs ;
201
+ vtr::free (arch->model_library [4 ].name );
202
+ vtr::free (arch->model_library [4 ].inputs [0 ].name );
203
+ vtr::free (arch->model_library [4 ].inputs [1 ].name );
204
+ delete[] arch->model_library [4 ].inputs ;
205
+ vtr::free (arch->model_library [4 ].outputs ->name );
206
+ delete[] arch->model_library [4 ].outputs ;
201
207
delete[] arch->model_library ;
202
208
}
203
209
@@ -1002,7 +1008,7 @@ e_power_estimation_method power_method_inherited(e_power_estimation_method paren
1002
1008
void CreateModelLibrary (t_arch* arch) {
1003
1009
t_model* model_library;
1004
1010
1005
- model_library = new t_model[4 ];
1011
+ model_library = new t_model[5 ];
1006
1012
1007
1013
// INPAD
1008
1014
model_library[0 ].name = vtr::strdup (MODEL_INPUT);
@@ -1034,7 +1040,7 @@ void CreateModelLibrary(t_arch* arch) {
1034
1040
model_library[1 ].next = &model_library[2 ];
1035
1041
model_library[1 ].outputs = nullptr ;
1036
1042
1037
- // LATCH
1043
+ // LATCH triggered at RISING EDGE
1038
1044
model_library[2 ].name = vtr::strdup (MODEL_LATCH);
1039
1045
model_library[2 ].index = 2 ;
1040
1046
model_library[2 ].inputs = new t_model_ports[2 ];
@@ -1055,6 +1061,7 @@ void CreateModelLibrary(t_arch* arch) {
1055
1061
model_library[2 ].inputs [1 ].min_size = 1 ;
1056
1062
model_library[2 ].inputs [1 ].index = 0 ;
1057
1063
model_library[2 ].inputs [1 ].is_clock = true ;
1064
+ model_library[2 ].inputs [1 ].trigg_edge = TriggeringEdge::RISING_EDGE;
1058
1065
1059
1066
model_library[2 ].instances = nullptr ;
1060
1067
model_library[2 ].next = &model_library[3 ];
@@ -1069,31 +1076,67 @@ void CreateModelLibrary(t_arch* arch) {
1069
1076
model_library[2 ].outputs [0 ].is_clock = false ;
1070
1077
model_library[2 ].outputs [0 ].clock = " clk" ;
1071
1078
1072
- // NAMES
1073
- model_library[3 ].name = vtr::strdup (MODEL_NAMES );
1079
+ // LATCH triggered at FALLING EDGE
1080
+ model_library[3 ].name = vtr::strdup (MODEL_LATCH );
1074
1081
model_library[3 ].index = 3 ;
1082
+ model_library[3 ].inputs = new t_model_ports[2 ];
1075
1083
1076
- model_library[3 ].inputs = new t_model_ports[1 ];
1077
1084
model_library[3 ].inputs [0 ].dir = IN_PORT;
1078
- model_library[3 ].inputs [0 ].name = vtr::strdup (" in " );
1079
- model_library[3 ].inputs [0 ].next = nullptr ;
1085
+ model_library[3 ].inputs [0 ].name = vtr::strdup (" D " );
1086
+ model_library[3 ].inputs [0 ].next = &model_library[ 3 ]. inputs [ 1 ] ;
1080
1087
model_library[3 ].inputs [0 ].size = 1 ;
1081
1088
model_library[3 ].inputs [0 ].min_size = 1 ;
1082
1089
model_library[3 ].inputs [0 ].index = 0 ;
1083
1090
model_library[3 ].inputs [0 ].is_clock = false ;
1084
- model_library[3 ].inputs [0 ].combinational_sink_ports = {" out" };
1091
+ model_library[3 ].inputs [0 ].clock = " clk" ;
1092
+
1093
+ model_library[3 ].inputs [1 ].dir = IN_PORT;
1094
+ model_library[3 ].inputs [1 ].name = vtr::strdup (" clk" );
1095
+ model_library[3 ].inputs [1 ].next = nullptr ;
1096
+ model_library[3 ].inputs [1 ].size = 1 ;
1097
+ model_library[3 ].inputs [1 ].min_size = 1 ;
1098
+ model_library[3 ].inputs [1 ].index = 0 ;
1099
+ model_library[3 ].inputs [1 ].is_clock = true ;
1100
+ model_library[3 ].inputs [1 ].trigg_edge = TriggeringEdge::FALLING_EDGE;
1085
1101
1086
1102
model_library[3 ].instances = nullptr ;
1087
- model_library[3 ].next = nullptr ;
1103
+ model_library[3 ].next = &model_library[ 4 ] ;
1088
1104
1089
1105
model_library[3 ].outputs = new t_model_ports[1 ];
1090
1106
model_library[3 ].outputs [0 ].dir = OUT_PORT;
1091
- model_library[3 ].outputs [0 ].name = vtr::strdup (" out " );
1107
+ model_library[3 ].outputs [0 ].name = vtr::strdup (" Q " );
1092
1108
model_library[3 ].outputs [0 ].next = nullptr ;
1093
1109
model_library[3 ].outputs [0 ].size = 1 ;
1094
1110
model_library[3 ].outputs [0 ].min_size = 1 ;
1095
1111
model_library[3 ].outputs [0 ].index = 0 ;
1096
1112
model_library[3 ].outputs [0 ].is_clock = false ;
1113
+ model_library[3 ].outputs [0 ].clock = " clk" ;
1114
+
1115
+ // NAMES
1116
+ model_library[4 ].name = vtr::strdup (MODEL_NAMES);
1117
+ model_library[4 ].index = 4 ;
1118
+
1119
+ model_library[4 ].inputs = new t_model_ports[1 ];
1120
+ model_library[4 ].inputs [0 ].dir = IN_PORT;
1121
+ model_library[4 ].inputs [0 ].name = vtr::strdup (" in" );
1122
+ model_library[4 ].inputs [0 ].next = nullptr ;
1123
+ model_library[4 ].inputs [0 ].size = 1 ;
1124
+ model_library[4 ].inputs [0 ].min_size = 1 ;
1125
+ model_library[4 ].inputs [0 ].index = 0 ;
1126
+ model_library[4 ].inputs [0 ].is_clock = false ;
1127
+ model_library[4 ].inputs [0 ].combinational_sink_ports = {" out" };
1128
+
1129
+ model_library[4 ].instances = nullptr ;
1130
+ model_library[4 ].next = nullptr ;
1131
+
1132
+ model_library[4 ].outputs = new t_model_ports[1 ];
1133
+ model_library[4 ].outputs [0 ].dir = OUT_PORT;
1134
+ model_library[4 ].outputs [0 ].name = vtr::strdup (" out" );
1135
+ model_library[4 ].outputs [0 ].next = nullptr ;
1136
+ model_library[4 ].outputs [0 ].size = 1 ;
1137
+ model_library[4 ].outputs [0 ].min_size = 1 ;
1138
+ model_library[4 ].outputs [0 ].index = 0 ;
1139
+ model_library[4 ].outputs [0 ].is_clock = false ;
1097
1140
1098
1141
arch->model_library = model_library;
1099
1142
}
0 commit comments