@@ -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;
@@ -194,10 +194,16 @@ void free_arch(t_arch* arch) {
194194 vtr::free (arch->model_library [2 ].outputs ->name );
195195 delete[] arch->model_library [2 ].outputs ;
196196 vtr::free (arch->model_library [3 ].name );
197- vtr::free (arch->model_library [3 ].inputs ->name );
197+ vtr::free (arch->model_library [3 ].inputs [0 ].name );
198+ vtr::free (arch->model_library [3 ].inputs [1 ].name );
198199 delete[] arch->model_library [3 ].inputs ;
199200 vtr::free (arch->model_library [3 ].outputs ->name );
200201 delete[] arch->model_library [3 ].outputs ;
202+ vtr::free (arch->model_library [4 ].name );
203+ vtr::free (arch->model_library [4 ].inputs ->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 ];
@@ -1047,6 +1053,7 @@ void CreateModelLibrary(t_arch* arch) {
10471053 model_library[2 ].inputs [0 ].index = 0 ;
10481054 model_library[2 ].inputs [0 ].is_clock = false ;
10491055 model_library[2 ].inputs [0 ].clock = " clk" ;
1056+ model_library[2 ].inputs [0 ].trigg_edge = TriggeringEdge::RISING_EDGE;
10501057
10511058 model_library[2 ].inputs [1 ].dir = IN_PORT;
10521059 model_library[2 ].inputs [1 ].name = vtr::strdup (" clk" );
@@ -1055,6 +1062,7 @@ void CreateModelLibrary(t_arch* arch) {
10551062 model_library[2 ].inputs [1 ].min_size = 1 ;
10561063 model_library[2 ].inputs [1 ].index = 0 ;
10571064 model_library[2 ].inputs [1 ].is_clock = true ;
1065+ model_library[2 ].inputs [1 ].trigg_edge = TriggeringEdge::RISING_EDGE;
10581066
10591067 model_library[2 ].instances = nullptr ;
10601068 model_library[2 ].next = &model_library[3 ];
@@ -1068,32 +1076,71 @@ void CreateModelLibrary(t_arch* arch) {
10681076 model_library[2 ].outputs [0 ].index = 0 ;
10691077 model_library[2 ].outputs [0 ].is_clock = false ;
10701078 model_library[2 ].outputs [0 ].clock = " clk" ;
1079+ model_library[2 ].outputs [0 ].trigg_edge = TriggeringEdge::RISING_EDGE;
10711080
1072- // NAMES
1073- model_library[3 ].name = vtr::strdup (MODEL_NAMES );
1081+ // LATCH triggered at FALLING EDGE
1082+ model_library[3 ].name = vtr::strdup (MODEL_LATCH );
10741083 model_library[3 ].index = 3 ;
1084+ model_library[3 ].inputs = new t_model_ports[2 ];
10751085
1076- model_library[3 ].inputs = new t_model_ports[1 ];
10771086 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 ;
1087+ model_library[3 ].inputs [0 ].name = vtr::strdup (" D " );
1088+ model_library[3 ].inputs [0 ].next = &model_library[ 3 ]. inputs [ 1 ] ;
10801089 model_library[3 ].inputs [0 ].size = 1 ;
10811090 model_library[3 ].inputs [0 ].min_size = 1 ;
10821091 model_library[3 ].inputs [0 ].index = 0 ;
10831092 model_library[3 ].inputs [0 ].is_clock = false ;
1084- model_library[3 ].inputs [0 ].combinational_sink_ports = {" out" };
1093+ model_library[3 ].inputs [0 ].clock = " clk" ;
1094+ model_library[3 ].inputs [0 ].trigg_edge = TriggeringEdge::FALLING_EDGE;
1095+
1096+ model_library[3 ].inputs [1 ].dir = IN_PORT;
1097+ model_library[3 ].inputs [1 ].name = vtr::strdup (" clk" );
1098+ model_library[3 ].inputs [1 ].next = nullptr ;
1099+ model_library[3 ].inputs [1 ].size = 1 ;
1100+ model_library[3 ].inputs [1 ].min_size = 1 ;
1101+ model_library[3 ].inputs [1 ].index = 0 ;
1102+ model_library[3 ].inputs [1 ].is_clock = true ;
1103+ model_library[3 ].inputs [1 ].trigg_edge = TriggeringEdge::FALLING_EDGE;
10851104
10861105 model_library[3 ].instances = nullptr ;
1087- model_library[3 ].next = nullptr ;
1106+ model_library[3 ].next = &model_library[ 4 ] ;
10881107
10891108 model_library[3 ].outputs = new t_model_ports[1 ];
10901109 model_library[3 ].outputs [0 ].dir = OUT_PORT;
1091- model_library[3 ].outputs [0 ].name = vtr::strdup (" out " );
1110+ model_library[3 ].outputs [0 ].name = vtr::strdup (" Q " );
10921111 model_library[3 ].outputs [0 ].next = nullptr ;
10931112 model_library[3 ].outputs [0 ].size = 1 ;
10941113 model_library[3 ].outputs [0 ].min_size = 1 ;
10951114 model_library[3 ].outputs [0 ].index = 0 ;
10961115 model_library[3 ].outputs [0 ].is_clock = false ;
1116+ model_library[3 ].outputs [0 ].clock = " clk" ;
1117+ model_library[3 ].outputs [0 ].trigg_edge = TriggeringEdge::FALLING_EDGE;
1118+
1119+ // NAMES
1120+ model_library[4 ].name = vtr::strdup (MODEL_NAMES);
1121+ model_library[4 ].index = 4 ;
1122+
1123+ model_library[4 ].inputs = new t_model_ports[1 ];
1124+ model_library[4 ].inputs [0 ].dir = IN_PORT;
1125+ model_library[4 ].inputs [0 ].name = vtr::strdup (" in" );
1126+ model_library[4 ].inputs [0 ].next = nullptr ;
1127+ model_library[4 ].inputs [0 ].size = 1 ;
1128+ model_library[4 ].inputs [0 ].min_size = 1 ;
1129+ model_library[4 ].inputs [0 ].index = 0 ;
1130+ model_library[4 ].inputs [0 ].is_clock = false ;
1131+ model_library[4 ].inputs [0 ].combinational_sink_ports = {" out" };
1132+
1133+ model_library[4 ].instances = nullptr ;
1134+ model_library[4 ].next = nullptr ;
1135+
1136+ model_library[4 ].outputs = new t_model_ports[1 ];
1137+ model_library[4 ].outputs [0 ].dir = OUT_PORT;
1138+ model_library[4 ].outputs [0 ].name = vtr::strdup (" out" );
1139+ model_library[4 ].outputs [0 ].next = nullptr ;
1140+ model_library[4 ].outputs [0 ].size = 1 ;
1141+ model_library[4 ].outputs [0 ].min_size = 1 ;
1142+ model_library[4 ].outputs [0 ].index = 0 ;
1143+ model_library[4 ].outputs [0 ].is_clock = false ;
10971144
10981145 arch->model_library = model_library;
10991146}
0 commit comments