@@ -172,7 +172,7 @@ void free_arch(t_arch* arch) {
172172 vtr::free (arch->architecture_id );
173173
174174 if (arch->model_library ) {
175- for (int i = 0 ; i < 4 ; ++i) {
175+ for (int i = 0 ; i < 5 ; ++i) {
176176 vtr::t_linked_vptr* vptr = arch->model_library [i].pb_types ;
177177 while (vptr) {
178178 vtr::t_linked_vptr* vptr_prev = vptr;
@@ -198,6 +198,12 @@ void free_arch(t_arch* arch) {
198198 delete[] arch->model_library [3 ].inputs ;
199199 vtr::free (arch->model_library [3 ].outputs ->name );
200200 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 ;
201207 delete[] arch->model_library ;
202208 }
203209
@@ -1002,7 +1008,7 @@ e_power_estimation_method power_method_inherited(e_power_estimation_method paren
10021008void CreateModelLibrary (t_arch* arch) {
10031009 t_model* model_library;
10041010
1005- model_library = new t_model[4 ];
1011+ model_library = new t_model[5 ];
10061012
10071013 // INPAD
10081014 model_library[0 ].name = vtr::strdup (MODEL_INPUT);
@@ -1034,7 +1040,7 @@ void CreateModelLibrary(t_arch* arch) {
10341040 model_library[1 ].next = &model_library[2 ];
10351041 model_library[1 ].outputs = nullptr ;
10361042
1037- // LATCH
1043+ // LATCH triggered at RISING EDGE
10381044 model_library[2 ].name = vtr::strdup (MODEL_LATCH);
10391045 model_library[2 ].index = 2 ;
10401046 model_library[2 ].inputs = new t_model_ports[2 ];
@@ -1055,6 +1061,7 @@ void CreateModelLibrary(t_arch* arch) {
10551061 model_library[2 ].inputs [1 ].min_size = 1 ;
10561062 model_library[2 ].inputs [1 ].index = 0 ;
10571063 model_library[2 ].inputs [1 ].is_clock = true ;
1064+ model_library[2 ].inputs [1 ].trigg_edge = TriggeringEdge::RISING_EDGE;
10581065
10591066 model_library[2 ].instances = nullptr ;
10601067 model_library[2 ].next = &model_library[3 ];
@@ -1069,31 +1076,67 @@ void CreateModelLibrary(t_arch* arch) {
10691076 model_library[2 ].outputs [0 ].is_clock = false ;
10701077 model_library[2 ].outputs [0 ].clock = " clk" ;
10711078
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 );
10741081 model_library[3 ].index = 3 ;
1082+ model_library[3 ].inputs = new t_model_ports[2 ];
10751083
1076- model_library[3 ].inputs = new t_model_ports[1 ];
10771084 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 ] ;
10801087 model_library[3 ].inputs [0 ].size = 1 ;
10811088 model_library[3 ].inputs [0 ].min_size = 1 ;
10821089 model_library[3 ].inputs [0 ].index = 0 ;
10831090 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;
10851101
10861102 model_library[3 ].instances = nullptr ;
1087- model_library[3 ].next = nullptr ;
1103+ model_library[3 ].next = &model_library[ 4 ] ;
10881104
10891105 model_library[3 ].outputs = new t_model_ports[1 ];
10901106 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 " );
10921108 model_library[3 ].outputs [0 ].next = nullptr ;
10931109 model_library[3 ].outputs [0 ].size = 1 ;
10941110 model_library[3 ].outputs [0 ].min_size = 1 ;
10951111 model_library[3 ].outputs [0 ].index = 0 ;
10961112 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 ;
10971140
10981141 arch->model_library = model_library;
10991142}
0 commit comments