39#include <boost/format.hpp>
80#define ALLOW_OPCODE_EDITING
104 " id INTEGER PRIMARY KEY,"
105 " architecture REFERENCES fu_architecture(id),"
106 " cost_function REFERENCES cost_function_plugin(id));";
109 "CREATE TABLE fu_architecture("
110 " id INTEGER PRIMARY KEY);";
113 "CREATE TABLE pipeline_resource("
114 " id INTEGER PRIMARY KEY,"
115 " fu_arch REFERENCES fu_architecture(id) NOT NULL);";
118 "CREATE TABLE operation_pipeline("
119 " id INTEGER PRIMARY KEY,"
120 " fu_arch REFERENCES fu_architecture(id) NOT NULL,"
121 " operation REFERENCES operation(id) NOT NULL);";
124 "CREATE TABLE pipeline_resource_usage("
125 " id INTEGER PRIMARY KEY,"
126 " cycle INTEGER NOT NULL,"
127 " resource REFERENCES pipeline_resource(id) NOT NULL,"
128 " pipeline REFERENCES operation_pipeline(id) NOT NULL);";
131 "CREATE TABLE io_usage("
132 " id INTEGER PRIMARY KEY,"
133 " cycle INTEGER NOT NULL,"
134 " io_number INTEGER NOT NULL,"
135 " action BOOLEAN NOT NULL,"
136 " pipeline REFERENCES operation_pipeline(id) NOT NULL);";
139 "CREATE TABLE operation("
140 " id INTEGER PRIMARY KEY,"
141 " name TEXT UNIQUE NOT NULL);";
144 "CREATE TABLE fu_data_port("
145 " id INTEGER PRIMARY KEY,"
146 " triggers BOOLEAN NOT NULL,"
147 " sets_opcode BOOLEAN NOT NULL,"
148 " guard_support BOOLEAN NOT NULL,"
150 " fu_arch REFERENCES fu_architecture(id));";
153 "CREATE TABLE io_binding("
154 " id INTEGER PRIMARY KEY,"
155 " io_number INTEGER NOT NULL,"
156 " port REFERENCES fu_data_port(id) NOT NULL,"
157 " operation REFERENCES operation(id) NOT NULL);";
160 "CREATE TABLE fu_implementation("
161 " id INTEGER PRIMARY KEY,"
162 " name TEXT NOT NULL,"
164 " clk_port TEXT NOT NULL,"
165 " rst_port TEXT NOT NULL,"
166 " glock_port TEXT NOT NULL,"
167 " glock_req_port TEXT,"
168 " fu REFERENCES fu(id) UNIQUE NOT NULL);";
171 "CREATE TABLE opcode_map("
172 " id INTEGER PRIMARY KEY,"
173 " opcode INTEGER NOT NULL,"
174 " operation REFERENCES operation(id) NOT NULL,"
175 " fu_impl REFERENCES fu_implementation(id) NOT NULL);";
178 "CREATE TABLE fu_port_map("
179 " id INTEGER PRIMARY KEY,"
180 " name TEXT NOT NULL,"
181 " width_formula TEXT NOT NULL,"
184 " fu_impl REFERENCES fu_implementation(id) NOT NULL,"
185 " arch_port REFERENCES fu_data_port(id) NOT NULL,"
186 " UNIQUE (name, fu_impl));";
189 "CREATE TABLE fu_external_port("
190 " id INTEGER PRIMARY KEY,"
191 " name TEXT NOT NULL,"
192 " direction TEXT NOT NULL,"
193 " width_formula TEXT NOT NULL,"
195 " fu_impl REFERENCES fu_implementation(id) NOT NULL, "
196 " UNIQUE (name, fu_impl));";
199 "CREATE TABLE rf_external_port("
200 " id INTEGER PRIMARY KEY,"
201 " name TEXT NOT NULL,"
202 " direction TEXT NOT NULL,"
203 " width_formula TEXT NOT NULL,"
205 " rf_impl REFERENCES rf_implementation(id) NOT NULL, "
206 " UNIQUE (name, rf_impl));";
209 "CREATE TABLE fu_implementation_parameter("
210 " id INTEGER PRIMARY KEY,"
211 " name TEXT NOT NULL,"
214 " fu_impl REFERENCES fu_implementation(id) NOT NULL);";
217 "CREATE TABLE rf_implementation_parameter("
218 " id INTEGER PRIMARY KEY,"
219 " name TEXT NOT NULL,"
222 " rf_impl REFERENCES rf_implementation(id) NOT NULL);";
225 "CREATE TABLE fu_ext_port_parameter_dependency("
226 " id INTEGER PRIMARY KEY,"
227 " port REFERENCES fu_external_port(id) NOT NULL,"
228 " parameter REFERENCES fu_implementation_parameter(id) NOT NULL);";
231 "CREATE TABLE rf_ext_port_parameter_dependency("
232 " id INTEGER PRIMARY KEY,"
233 " port REFERENCES rf_external_port(id) NOT NULL,"
234 " parameter REFERENCES rf_implementation_parameter(id) NOT NULL);";
238 " id INTEGER PRIMARY KEY,"
239 " architecture REFERENCES rf_architecture(id),"
240 " cost_function REFERENCES cost_function_plugin(id));";
243 "CREATE TABLE rf_architecture("
244 " id INTEGER PRIMARY KEY,"
247 " read_ports INTEGER NOT NULL,"
248 " write_ports INTEGER NOT NULL,"
249 " bidir_ports INTEGER NOT NULL,"
250 " latency INTEGER NOT NULL,"
251 " max_reads INTEGER NOT NULL,"
252 " max_writes INTEGER NOT NULL,"
253 " guard_support BOOLEAN NOT NULL,"
254 " guard_latency INTEGER NOT NULL,"
255 " zero_register BOOLEAN DEFAULT FALSE);";
258 "CREATE TABLE rf_implementation("
259 " id INTEGER PRIMARY KEY,"
260 " name TEXT NOT NULL,"
263 " clk_port TEXT NOT NULL,"
264 " rst_port TEXT NOT NULL,"
265 " glock_port TEXT NOT NULL,"
267 " rf REFERENCES rf(id) NOT NULL,"
268 " sac_param INTEGER DEFAULT 0);";
271 "CREATE TABLE rf_data_port("
272 " id INTEGER PRIMARY KEY,"
273 " name TEXT NOT NULL,"
274 " direction TEXT NOT NULL,"
275 " load_port TEXT NOT NULL,"
276 " opcode_port TEXT NOT NULL,"
277 " opcode_port_width_formula TEXT NOT NULL,"
278 " rf_impl REFERENCES rf_implementation(id),"
279 " UNIQUE (name, rf_impl));";
282 "CREATE TABLE block_source_file("
283 " id INTEGER PRIMARY KEY,"
284 " file TEXT NOT NULL,"
285 " format REFERENCES format(id));";
288 "CREATE TABLE rf_source_file("
289 " id INTEGER PRIMARY KEY,"
290 " rf_impl REFERENCES rf_implementation(id),"
291 " file REFERENCES block_source_file(id));";
294 "CREATE TABLE fu_source_file("
295 " id INTEGER PRIMARY KEY,"
296 " fu_impl REFERENCES fu_implementation(id),"
297 " file REFERENCES block_source_file(id));";
300 "CREATE TABLE format("
301 " id INTEGER PRIMARY KEY,"
302 " format TEXT NOT NULL);";
306 " id INTEGER PRIMARY KEY);";
309 "CREATE TABLE socket ("
310 " id INTEGER PRIMARY KEY);";
313 "CREATE TABLE cost_function_plugin("
314 " id INTEGER PRIMARY KEY, "
315 " description TEXT, "
317 " plugin_file_path TEXT NOT NULL, "
318 " type STRING NOT NULL);";
321 "CREATE TABLE cost_estimation_data("
322 " id INTEGER PRIMARY KEY, "
323 " plugin_reference REFERENCES cost_function_plugin(id), "
324 " rf_reference REFERENCES rf(id), "
325 " fu_reference REFERENCES fu(id), "
326 " bus_reference REFERENCES bus(id), "
327 " socket_reference REFERENCES socket(id), "
332 "CREATE INDEX fu_port_map_arch_index ON fu_port_map(arch_port)";
335 "CREATE INDEX fu_impl_entry_index ON fu_implementation(fu)";
338 "CREATE INDEX rf_impl_entry_index ON rf_implementation(rf)";
341 "CREATE TABLE operation_implementation_resource_source_file("
342 " id INTEGER PRIMARY KEY,"
343 " resource REFERENCES operation_implementation_resource(id),"
344 " file REFERENCES block_source_file(id)"
348 "CREATE TABLE operation_implementation_source_file("
349 " id INTEGER PRIMARY KEY,"
350 " operation REFERENCES operation_implementation(id),"
351 " file REFERENCES block_source_file(id)"
355 "CREATE TABLE operation_implementation_resource("
356 " id INTEGER PRIMARY KEY,"
357 " name TEXT NOT NULL"
361 "CREATE TABLE operation_implementation("
362 " id INTEGER PRIMARY KEY,"
363 " name TEXT NOT NULL"
367 "CREATE TABLE operation_implementation_resources("
368 " id INTEGER PRIMARY KEY,"
369 " operation REFERENCES operation_implementation(id),"
370 " resource REFERENCES operation_implementation_resource(id),"
371 " count INTEGER NOT NULL"
375 "CREATE TABLE operation_implementation_variable("
376 " id INTEGER PRIMARY KEY,"
377 " operation REFERENCES operation_implementation(id),"
378 " name TEXT NOT NULL,"
379 " width TEXT NOT NULL,"
380 " type TEXT NOT NULL,"
381 " language TEXT NOT NULL"
395 : db_(new
SQLite()), dbConnection_(NULL), hdbFile_(hdbFile) {
397 string errorMsg =
"File '" + hdbFile +
"' doesn't exist.";
402 string errorMsg =
"File '" + hdbFile +
"' has no read rights.";
427 "INSERT INTO format(id,format) VALUES"
430 "INSERT INTO format(id,format) VALUES"
446 "ALTER TABLE operation_implementation_resource ADD COLUMN "
456 "ALTER TABLE operation_implementation ADD COLUMN "
457 "bus_definition TEXT;"));
459 "ALTER TABLE operation_implementation ADD COLUMN "
460 "post_op_vhdl TEXT;"));
462 "ALTER TABLE operation_implementation ADD COLUMN "
463 "post_op_verilog TEXT;"));
470 "ALTER TABLE operation_implementation_resource ADD COLUMN "
471 "latency INTEGER;"));
473 "ALTER TABLE operation_implementation ADD COLUMN "
474 "default_verilog TEXT;"));
476 "ALTER TABLE operation_implementation ADD COLUMN "
477 "default_vhdl TEXT;"));
487 "ALTER TABLE operation_implementation ADD COLUMN "
488 "latency INTEGER;"));
490 "ALTER TABLE operation_implementation RENAME COLUMN "
491 "default_vhdl TO initial_vhdl;"));
493 "ALTER TABLE operation_implementation RENAME COLUMN "
494 "default_verilog TO initial_verilog;"));
505 if (!
hasColumn(
"rf_architecture",
"zero_register")) {
536 const string procName =
"HDBManager::createNew";
581 db.
close(connection);
584 std::string(
"Initialization of HDB failed. ") +
621 switch (plugin.
type()) {
637 (boost::format(
"Illegal cost_function_plugin type %d.") %
642 string name = plugin.
name();
646 "INSERT INTO cost_function_plugin(id,description,name,"
647 "plugin_file_path,type) VALUES"
648 "(NULL,\"" + description +
"\",\"" + name +
"\",\"" +
649 pluginFilePath +
"\",\"" + type +
"\");"));
678 "DELETE FROM cost_function_plugin "
682 "DELETE FROM cost_estimation_data "
683 "WHERE plugin_reference=" +
715 std::map<FUPort*, RowID> portIDMap;
722 std::string(
"INSERT INTO fu_architecture(id) VALUES(NULL);"));
729 "INSERT INTO fu_data_port(id,triggers,sets_opcode,"
730 "guard_support,width,fu_arch) "
744 portIDMap.insert(std::pair<FUPort*, RowID>(port, portID));
753 "INSERT INTO operation(id,name) VALUES(NULL,\"" +
754 operation->
name() +
"\");"));
763 if (operation->
isBound(*port)) {
764 int io = operation->
io(*port);
766 "INSERT INTO io_binding(id,io_number,port,operation)"
770 ",(SELECT id FROM operation WHERE "
771 "lower(name)=\"" + operation->
name() +
"\"));");
777 std::map<HWOperation*, RowID> pLineIDMap;
784 "INSERT INTO operation_pipeline(id,fu_arch,operation) "
786 ",(SELECT id FROM operation WHERE lower(name)=\"" +
787 operation->
name() +
"\"));"));
789 std::pair<HWOperation*, RowID>(
797 for (
int cycle = 0; cycle < pLine->
latency(); cycle++) {
802 for (ExecutionPipeline::OperandSet::const_iterator iter =
803 readOperands.begin();
804 iter != readOperands.end(); iter++) {
807 "INSERT INTO io_usage(id,cycle,io_number,action,"
808 "pipeline) VALUES(NULL," +
814 pLineIDMap, operation)) +
");"));
816 for (ExecutionPipeline::OperandSet::const_iterator iter =
817 writtenOperands.begin();
818 iter != writtenOperands.end(); iter++) {
821 "INSERT INTO io_usage(id,cycle,io_number,action,"
822 "pipeline) VALUES(NULL," +
828 pLineIDMap, operation)) +
");"));
834 std::map<PipelineElement*, RowID> pipelineElementMap;
839 "INSERT INTO pipeline_resource(id,fu_arch) VALUES "
841 pipelineElementMap.insert(
842 std::pair<PipelineElement*, RowID>(
852 for (
int cycle = 0; cycle < pLine->
latency(); cycle++) {
856 pipelineElementMap, element));
859 pLineIDMap, operation));
862 "INSERT INTO pipeline_resource_usage(id,"
863 "cycle,resource,pipeline) VALUES(NULL," +
865 resID +
"," + pLineID +
");"));
896 "SELECT id FROM fu WHERE architecture=" +
938 "DELETE FROM io_binding "
947 "DELETE FROM fu_data_port "
953 "DELETE FROM io_usage "
955 "(SELECT id FROM operation_pipeline "
961 "DELETE FROM pipeline_resource_usage "
963 "(SELECT id FROM operation_pipeline "
969 "DELETE FROM pipeline_resource "
975 "DELETE FROM operation_pipeline "
981 "DELETE FROM fu_architecture "
1003 std::string(
"INSERT INTO fu(id) VALUES(NULL);"));
1036 "SELECT id FROM fu_implementation "
1055 "SELECT id FROM cost_estimation_data "
1111 delete existingEntry;
1114 delete existingEntry;
1115 existingEntry = NULL;
1124 string module = impl.moduleName();
1126 string clkPort = impl.
clkPort();
1127 string rstPort = impl.
rstPort();
1133 "INSERT INTO fu_implementation(id,name,opcode_port,"
1134 "clk_port,rst_port,glock_port,glock_req_port,fu) VALUES"
1135 "(NULL,\"" + module +
"\",\"" + opcPort +
"\",\"" +
1136 clkPort +
"\",\"" + rstPort +
"\",\"" + glockPort +
"\",\""
1144 string name = portImpl.
name();
1146 string loadPort = portImpl.
loadPort();
1147 string guardPort = portImpl.
guardPort();
1153 bool portAdded =
false;
1156 if (operation->
isBound(*port)) {
1157 int io = operation->
io(*port);
1161 "SELECT fu_data_port.id FROM fu_data_port,"
1162 "io_binding,operation WHERE "
1163 "fu_data_port.fu_arch=" +
1165 " AND io_binding.port=fu_data_port.id AND "
1166 "io_binding.io_number=" +
1168 " AND lower(operation.name)=\"" +
1170 "\" AND io_binding.operation=operation.id;"));
1182 "INSERT INTO fu_port_map(id,name,width_formula,"
1183 "load_port,guard_port,fu_impl,arch_port) VALUES"
1184 "(NULL,\"" + name +
"\",\"" + widthFormula +
1185 "\",\"" + loadPort +
"\",\"" + guardPort +
1197#ifdef ALLOW_OPCODE_EDITING
1203 "FU implementation uses unknown operation %1%.");
1204 errorMsg % operation->
name();
1206 __FILE__, __LINE__,
__func__, errorMsg.str());
1210 format errorMsg(
"Opcode not defined for operation %1%.");
1211 errorMsg % operation->
name();
1213 __FILE__, __LINE__,
__func__, errorMsg.str());
1219 "INSERT INTO opcode_map(id,opcode,operation,fu_impl)"
1221 ",(SELECT id FROM operation WHERE lower(name)=\"" +
1222 operation->
name() +
"\")," +
1233 "INSERT INTO fu_external_port(id,name,direction,"
1234 "width_formula,description,fu_impl) VALUES(NULL,\"" +
1235 port.
name() +
"\",\"" + direction +
"\",\"" +
1245 "INSERT INTO fu_implementation_parameter(id,name,type,"
1246 "value,fu_impl) VALUES(NULL,\"" + param.
name +
1247 "\",\"" + param.
type +
"\",\"" + param.
value +
1258 "INSERT INTO fu_ext_port_parameter_dependency(id,"
1259 "port,parameter) VALUES(NULL,(SELECT id FROM "
1260 "fu_external_port WHERE fu_impl=" +
1262 port.
name() +
"\"),(SELECT id FROM "
1263 "fu_implementation_parameter WHERE fu_impl=" +
1281 "INSERT INTO fu_source_file(id,fu_impl,file) "
1283 ",(SELECT id FROM block_source_file WHERE file=\"" +
1319 "DELETE FROM fu_ext_port_parameter_dependency "
1320 "WHERE parameter in (SELECT ALL id FROM "
1321 "fu_implementation_parameter WHERE fu_impl="
1327 "DELETE FROM fu_external_port "
1333 "DELETE FROM fu_port_map "
1339 "DELETE FROM opcode_map "
1345 "DELETE FROM fu_implementation_parameter "
1351 "DELETE FROM fu_source_file "
1357 "DELETE FROM block_source_file "
1359 "(SELECT file FROM fu_source_file UNION "
1360 "SELECT file FROM rf_source_file);"));
1365 "DELETE FROM fu_implementation "
1401 "UPDATE fu SET architecture=" +
1432 "UPDATE fu SET architecture=NULL WHERE id=" +
1451 "INSERT INTO rf_architecture(id,size,width,read_ports,"
1452 "write_ports,bidir_ports,latency,max_reads,max_writes,"
1453 "guard_support,guard_latency,zero_register) VALUES(NULL,";
1498 "SELECT id FROM rf WHERE architecture=" +
1500 bool returnValue = !result->
hasNext();
1529 "DELETE FROM rf_architecture WHERE id=" +
1547 "INSERT INTO rf(id,architecture,cost_function) "
1548 "VALUES(NULL,NULL,NULL);"));
1579 "DELETE FROM cost_estimation_data WHERE rf_reference=" +
1590 "SELECT id FROM rf_implementation WHERE rf=" +
1639 if(!
hasColumn(
"rf_implementation",
"sac_param")) {
1659 int sacFlagAsInt =
implementation.separateAddressCycleParameter();
1662 std::string insert_query(
1663 "INSERT INTO rf_implementation(id,name,size_param,"
1664 "width_param,clk_port,rst_port,glock_port,guard_port,sac_param,rf) "
1683 "INSERT INTO rf_data_port(id,name,direction,load_port,"
1684 "opcode_port,opcode_port_width_formula,rf_impl) "
1685 "VALUES(NULL,\"" + port.
name() +
"\",\"" +
1693 for (
int i = 0; i <
implementation.implementationFileCount(); i++) {
1699 for (
int i = 0; i <
implementation.implementationFileCount(); i++) {
1704 "INSERT INTO rf_source_file values(NULL, " +
1706 ", (SELECT id FROM block_source_file WHERE file=\"" +
1716 "INSERT INTO rf_external_port(id,name,direction,"
1717 "width_formula,description,rf_impl) VALUES(NULL,\"" +
1718 port.
name() +
"\",\"" + direction +
"\",\"" +
1728 "INSERT INTO rf_implementation_parameter(id,name,type,"
1729 "value,rf_impl) VALUES(NULL,\"" + param.
name +
1730 "\",\"" + param.
type +
"\",\"" + param.
value +
1738 if (!widthParam.empty() && !
implementation.hasParameter(widthParam)) {
1741 "INSERT INTO rf_implementation_parameter(id,name,type,"
1742 "value,rf_impl) VALUES(NULL,\"" + widthParam +
1743 "\", \"integer\", \"\"," +
1747 if (!sizeParam.empty() && !
implementation.hasParameter(sizeParam)) {
1750 "INSERT INTO rf_implementation_parameter(id,name,type,"
1751 "value,rf_impl) VALUES(NULL,\"" + sizeParam +
1752 "\", \"integer\", \"\"," +
1763 "INSERT INTO rf_ext_port_parameter_dependency(id,"
1764 "port,parameter) VALUES(NULL,(SELECT id FROM "
1765 "rf_external_port WHERE rf_impl=" +
1767 port.
name() +
"\"),(SELECT id FROM "
1768 "rf_implementation_parameter WHERE rf_impl=" +
1796 bool dependencyTableExists =
1798 bool parameterTableExists =
1800 bool externalPortTableExists =
1808 if (dependencyTableExists) {
1809 assert(parameterTableExists && externalPortTableExists);
1812 "DELETE FROM rf_ext_port_parameter_dependency "
1813 "WHERE parameter in (SELECT ALL id "
1814 "FROM rf_implementation_parameter WHERE rf_impl = " +
1820 if (externalPortTableExists) {
1823 "DELETE FROM rf_external_port "
1830 if (parameterTableExists) {
1833 "DELETE FROM rf_implementation_parameter "
1840 "DELETE FROM rf_source_file WHERE rf_impl=" +
1846 "DELETE FROM block_source_file WHERE id NOT IN "
1847 "(SELECT file FROM fu_source_file UNION "
1848 "SELECT file FROM rf_source_file);"));
1853 "DELETE FROM rf_data_port WHERE rf_impl=" +
1859 "DELETE FROM rf_implementation WHERE id=" +
1901 "UPDATE rf SET architecture=" +
1920 "UPDATE rf SET architecture=NULL WHERE id=" +
1942 "UPDATE fu SET cost_function=" +
1963 "UPDATE fu SET cost_function=NULL WHERE id=" +
1985 "UPDATE rf SET cost_function=" +
2006 "UPDATE rf SET cost_function=NULL WHERE id=" +
2023 string query =
"SELECT id AS 'fu.id' FROM fu;";
2035 std::set<RowID> idSet;
2036 while (queryResult->
hasNext()) {
2037 queryResult->
next();
2055 string query =
"SELECT id AS 'rf.id' FROM rf;";
2067 std::set<RowID> idSet;
2068 while (queryResult->
hasNext()) {
2069 queryResult->
next();
2087 string query =
"SELECT id AS 'bus.id' FROM bus;";
2099 std::set<RowID> idSet;
2100 while (queryResult->
hasNext()) {
2101 queryResult->
next();
2119 string query =
"SELECT id AS 'socket.id' FROM socket;";
2131 std::set<RowID> idSet;
2132 while (queryResult->
hasNext()) {
2133 queryResult->
next();
2154 std::string(
"SELECT id FROM fu_architecture;"));
2160 std::set<RowID> idSet;
2183 std::string(
"SELECT id FROM operation_implementation;"));
2189 std::set<RowID> idSet;
2211 std::string(
"SELECT id FROM operation_implementation_resource;"));
2217 std::set<RowID> idSet;
2238 std::string(
"SELECT * FROM operation_implementation WHERE id = ") +
2239 std::to_string(
id) +
2269 std::string(
"SELECT block_source_file.file "
2270 "FROM operation_implementation_source_file, "
2271 "block_source_file "
2272 "WHERE operation_implementation_source_"
2273 "file.operation = ") +
2274 std::to_string(
id) +
2275 std::string(
" AND operation_implementation_source_file.file = "
2276 " block_source_file.id"
2277 " AND block_source_file.format = "
2295 std::string(
"SELECT block_source_file.file "
2296 "FROM operation_implementation_source_file, "
2297 "block_source_file "
2298 "WHERE operation_implementation_"
2299 "source_file.operation = ") +
2300 std::to_string(
id) +
2301 std::string(
" AND operation_implementation_source_file.file = "
2302 " block_source_file.id"
2303 " AND block_source_file.format = "
2319 std::string q1 =
"SELECT resource, count "
2320 "FROM operation_implementation_resources "
2321 "WHERE operation_implementation_resources.operation = "
2322 + std::to_string(
id) +
";";
2333 std::string q2 =
"SELECT name, width, type, language "
2334 "FROM operation_implementation_variable "
2335 "WHERE CAST(operation as TEXT) = \"" + std::to_string(
id) +
"\";";
2348 if (lang ==
"VHDL") {
2349 Variable var = {name, width, type, rename};
2351 }
else if (lang ==
"Verilog") {
2353 Variable{name, width, type, rename});
2355 throw std::runtime_error(
"Unknown language");
2360 "operation_implementation_globalsignal")) {
2362 "SELECT name, width, type, language, rename "
2363 "FROM operation_implementation_globalsignal "
2364 "WHERE CAST(operation as TEXT) = \"" +
2365 std::to_string(
id) +
"\";";
2374 bool rename = renamestr !=
"0";
2375 if (lang ==
"VHDL") {
2376 Variable var = {name, width, type, rename};
2378 }
else if (lang ==
"Verilog") {
2380 Variable{name, width, type, rename});
2382 throw std::runtime_error(
"Unknown language");
2400 std::string(
"SELECT * FROM "
2401 "operation_implementation_resource WHERE id = ") +
2402 std::to_string(
id) +
2422 std::string(
"SELECT block_source_file.file, "
2424 "FROM operation_implementation_resource_"
2425 "source_file, block_source_file, "
2427 "WHERE operation_implementation_resource_"
2428 "source_file.resource = ") +
2429 std::to_string(
id) +
2430 std::string(
" AND operation_implementation_resource_"
2431 "source_file.file = "
2432 " block_source_file.id "
2433 "AND block_source_file.format = "
2473 "INSERT INTO operation_implementation_resource(id,name,ipxact) "
2474 "VALUES (NULL, \"" +
2475 resource.
name +
"\", \"" + resource.
ipxact+
"\");"));
2479 auto f = resource.
simFiles.begin();
2480 for (; f != resource.
simFiles.end(); ++f, ++t) {
2485 "INSERT INTO block_source_file(id,file,format) "
2486 "VALUES (NULL, \"" + *f +
"\","
2487 + std::to_string(type) +
2493 "INSERT INTO operation_implementation_resource_source_file"
2494 "(id,resource,file) "
2495 "VALUES (NULL, " + std::to_string(resourceID) +
", "
2496 + std::to_string(fileID) +
2501 auto sf = resource.
synFiles.begin();
2502 for (; sf != resource.
synFiles.end(); ++sf, ++st) {
2507 "INSERT INTO block_source_file(id,file,format) "
2508 "VALUES (NULL, \"" + *sf +
"\","
2509 + std::to_string(type) +
2515 "INSERT INTO operation_implementation_resource_source_file"
2516 "(id,resource,file) "
2517 "VALUES (NULL, " + std::to_string(resourceID) +
", "
2518 + std::to_string(fileID) +
2531 std::string i1 =
"INSERT INTO operation_implementation(id,name,latency,"
2532 "post_op_vhdl,post_op_verilog,bus_definition,"
2533 "initial_vhdl,initial_verilog) "
2534 "VALUES (NULL,\"" + operation.
name +
"\","
2535 + std::to_string(operation.
latency) +
","
2545 for (
const auto r : operation.
resources) {
2546 std::string i2 =
"INSERT INTO operation_implementation_resources("
2547 "id, operation, resource, count) "
2548 "VALUES (NULL, " + std::to_string(newid)
2549 +
", " + std::to_string(r.id)
2550 +
", " + std::to_string(r.count)
2556 std::string i2 =
"INSERT INTO operation_implementation_variable("
2557 "id, operation, name, width, type, language) "
2558 "VALUES (NULL, " + std::to_string(newid)
2559 +
", \"" + r.name +
"\""
2560 +
", \"" + r.width +
"\""
2561 +
", \"" + r.type +
"\""
2567 std::string i2 =
"INSERT INTO operation_implementation_variable("
2568 "id, operation, name, width, type, language) "
2569 "VALUES (NULL, " + std::to_string(newid)
2570 +
", \"" + r.name +
"\""
2571 +
", \"" + r.width +
"\""
2572 +
", \"" + r.type +
"\""
2573 +
", \"Verilog\");";
2577 std::string i3 =
"INSERT INTO block_source_file(id,file,format) "
2583 std::string i4 =
"INSERT INTO "
2584 "operation_implementation_source_file(id, operation, file) "
2585 "VALUES (NULL, " + std::to_string(newid) +
2586 ", " + std::to_string(vhdl) +
2590 std::string i5 =
"INSERT INTO block_source_file(id,file,format) "
2596 std::string i6 =
"INSERT INTO "
2597 "operation_implementation_source_file(id, operation, file) "
2598 "VALUES (NULL, " + std::to_string(newid) +
2599 ", " + std::to_string(verilog) +
2609 std::string d1 =
"DELETE FROM operation_implementation "
2610 "WHERE id = " + std::to_string(
id) +
";";
2612 "DELETE FROM operation_implementation_source_file "
2613 "WHERE operation = " + std::to_string(
id) +
";";
2615 "DELETE FROM operation_implementation_resources "
2616 "WHERE operation = " + std::to_string(
id) +
";";
2618 "DELETE FROM operation_implementation_variable "
2619 "WHERE operation = " + std::to_string(
id) +
";";
2620 std::string s1 =
"SELECT file FROM "
2621 "operation_implementation_source_file "
2622 "WHERE operation = " + std::to_string(
id) +
";";
2628 std::string d3lete =
"DELETE FROM block_source_file "
2629 "WHERE id = " + std::to_string(file_id) +
";";
2645 std::string d1 =
"DELETE FROM operation_implementation_resource "
2646 "WHERE id = " + std::to_string(
id) +
";";
2648 "DELETE FROM operation_implementation_resource_source_file "
2649 "WHERE resource = " + std::to_string(
id) +
";";
2650 std::string s1 =
"SELECT file FROM "
2651 "operation_implementation_resource_source_file "
2652 "WHERE resource = " + std::to_string(
id) +
";";
2658 std::string d3 =
"DELETE FROM block_source_file "
2659 "WHERE id = " + std::to_string(file_id) +
";";
2671 const std::set<std::string>& operationNames)
const {
2675 std::string operationQuery =
"(";
2676 std::set<string>::const_iterator iter = operationNames.begin();
2677 while (iter != operationNames.end()) {
2680 "operation.name LIKE '" + *iter +
"'";
2682 if (iter != operationNames.end()) {
2683 operationQuery +=
" OR ";
2686 operationQuery +=
")";
2687 if (operationQuery ==
"()") {
2688 return std::set<RowID>();
2691 std::string(
"SELECT fu_architecture.id FROM operation_pipeline,"
2692 "operation, fu_architecture WHERE "
2693 "operation.id=operation_pipeline.operation AND "
2694 "operation_pipeline.fu_arch=fu_architecture.id AND "
2696 "GROUP BY fu_architecture.id ORDER BY "
2697 "fu_architecture.id;"));
2699 std::string eMsg =
", HDB file where error occurred was: " +
hdbFile_;
2704 std::set<RowID> idSet;
2725 std::string(
"SELECT id FROM rf_architecture;"));
2731 std::set<RowID> idSet;
2756 "SELECT fu from fu_implementation WHERE id=" +
2787 "SELECT rf from rf_implementation WHERE id=" +
2815 std::string query =
"SELECT architecture FROM fu WHERE id=";
2826 bool hasArch =
false;
2839 std::ostringstream stream;
2840 stream <<
"FU entry with id " <<
id <<
" not found from hdb "
2872 std::string query =
"SELECT architecture FROM rf WHERE id=";
2883 bool hasArch =
false;
2933 architecture->
setID(
id);
2936 return architecture;
2962 int sizeColumn = architectureData->
column(
"size");
2963 int widthColumn = architectureData->
column(
"width");
2964 int readPortsColumn = architectureData->
column(
"read_ports");
2965 int writePortsColumn = architectureData->
column(
"write_ports");
2966 int bidirPortsColumn = architectureData->
column(
"bidir_ports");
2967 int latencyColumn = architectureData->
column(
"latency");
2968 int maxReadsColumn = architectureData->
column(
"max_reads");
2969 int maxWritesColumn = architectureData->
column(
"max_writes");
2970 int guardSupportColumn = architectureData->
column(
"guard_support");
2971 int guardLatencyColumn = architectureData->
column(
"guard_latency");
2972 int zeroRegisterColumn = architectureData->
column(
"zero_register");
2975 architectureData->
next();
2978 const DataObject& widthData = architectureData->
data(widthColumn);
2992 guardSupportColumn);
2994 guardLatencyColumn);
2996 zeroRegisterColumn);
3004 architecture->
setID(
id);
3005 if (!sizeData.
isNull()) {
3008 if (!widthData.
isNull()) {
3011 delete architectureData;
3012 return architecture;
3029 std::set<RowID> architectureIDs;
3030 std::set<RowID> entryIDs;
3037 "SELECT fu_arch FROM operation_pipeline,operation "
3039 "\" AND operation_pipeline.operation=operation.id";
3041 query +=
" INTERSECT ";
3050 while (queryResult->
hasNext()) {
3051 queryResult->
next();
3055 architectureIDs.insert(arch->
id());
3062 if (!architectureIDs.empty()) {
3064 string fuEntryQuery =
"SELECT id FROM fu WHERE ";
3065 for (std::set<RowID>::const_iterator iter =
3066 architectureIDs.begin();
3067 iter != architectureIDs.end(); iter++) {
3068 fuEntryQuery +=
"architecture=" +
3070 std::set<RowID>::const_iterator nextIter = iter;
3072 if (nextIter == architectureIDs.end()) {
3073 fuEntryQuery +=
";";
3075 fuEntryQuery +=
" OR ";
3081 while (fuEntryResult->
hasNext()) {
3082 fuEntryResult->
next();
3087 delete fuEntryResult;
3130 bool zeroRegister)
const {
3134 string query =
"SELECT rf.id FROM rf,rf_architecture "
3135 "WHERE rf_architecture.read_ports=" +
3137 " AND rf_architecture.write_ports=" +
3139 " AND rf_architecture.bidir_ports=" +
3141 " AND rf_architecture.max_reads>=" +
3143 " AND rf_architecture.max_writes>=" +
3145 " AND rf_architecture.latency=" +
3148 query +=
" AND rf_architecture.guard_support=" +
3150 " AND rf_architecture.guard_latency=" +
3154 query +=
" AND (rf_architecture.size=" +
3156 " OR rf_architecture.size is NULL)";
3159 query +=
" AND (rf_architecture.width=" +
3161 " OR rf_architecture.width is NULL)";
3163 query +=
" AND (rf_architecture.zero_register=" +
3165 if (!zeroRegister) {
3166 query +=
" OR rf_architecture.zero_register is NULL";
3169 query +=
" AND rf.architecture=rf_architecture.id;";
3176 std::set<RowID> entryIDs;
3198 const std::string& valueName,
3199 const std::string& value,
3200 RowID pluginID)
const {
3209 "INSERT INTO cost_estimation_data (id,plugin_reference,"
3210 "fu_reference,name,value) VALUES (NULL," +
3234 const std::string& valueName,
3235 const std::string& value,
3236 RowID pluginID)
const {
3244 "INSERT INTO cost_estimation_data (id,plugin_reference,"
3245 "rf_reference,name,value) VALUES (NULL," +
3276 const std::string& valueName,
RowID implementationId,
3277 const std::string& pluginName)
const {
3284 "FROM cost_estimation_data, cost_function_plugin "
3285 "WHERE plugin_reference = cost_function_plugin.id AND "
3286 "cost_function_plugin.name LIKE('") +
3287 pluginName +
"') " +
3288 " AND rf_reference IS NULL " +
3289 " AND bus_reference IS NULL " +
3290 " AND socket_reference IS NULL AND " +
3292 " AND cost_estimation_data.name LIKE('" + valueName +
"');");
3300 queryResult->
next();
3332 const std::string& valueName,
RowID implementationId,
3333 const std::string& pluginName)
const {
3340 "FROM cost_estimation_data, cost_function_plugin "
3341 "WHERE plugin_reference = cost_function_plugin.id AND "
3342 "cost_function_plugin.name LIKE('") +
3343 pluginName +
"') " +
3344 " AND fu_reference IS NULL " +
3345 " AND bus_reference IS NULL " +
3346 " AND socket_reference IS NULL AND " +
3348 " AND cost_estimation_data.name LIKE('" + valueName +
"');");
3356 queryResult->
next();
3382 std::string(
"INSERT INTO bus(id) VALUES(NULL);"));
3415 "SELECT id FROM cost_estimation_data "
3453 const std::string& valueName,
3454 const std::string& value,
3455 RowID pluginID)
const {
3464 "INSERT INTO cost_estimation_data (id,plugin_reference,"
3465 "bus_reference,name,value) VALUES (NULL," +
3493 const std::string& valueName,
RowID busID,
3494 const std::string& pluginName)
const {
3500 "FROM cost_estimation_data, cost_function_plugin "
3501 "WHERE plugin_reference = cost_function_plugin.id AND "
3502 "cost_function_plugin.name LIKE('") +
3503 pluginName +
"') " +
3504 " AND rf_reference IS NULL " +
3505 " AND socket_reference IS NULL AND " +
3507 " AND cost_estimation_data.name LIKE('" + valueName +
"');");
3515 queryResult->
next();
3543 const std::string& valueName,
RowID busID,
3544 const std::string& pluginName)
const {
3550 "FROM cost_estimation_data, cost_function_plugin "
3551 "WHERE plugin_reference = cost_function_plugin.id AND "
3552 "cost_function_plugin.name LIKE('") +
3553 pluginName +
"') " +
3554 " AND rf_reference IS NULL " +
3555 " AND socket_reference IS NULL AND " +
3557 " AND cost_estimation_data.name LIKE('" + valueName +
"');");
3568 while (queryResult->
hasNext()) {
3569 queryResult->
next();
3571 data->push_back(value);
3595 std::string(
"INSERT INTO socket(id) VALUES(NULL);"));
3628 "SELECT id FROM cost_estimation_data "
3646 "DELETE FROM socket "
3666 const std::string& valueName,
3667 const std::string& value,
3668 RowID pluginID)
const {
3677 "INSERT INTO cost_estimation_data (id,plugin_reference,"
3678 "socket_reference,name,value) VALUES (NULL," +
3705 const std::string& valueName,
RowID socketID,
3706 const std::string& pluginName)
const {
3710 std::string theQuery =
3713 "FROM cost_estimation_data, cost_function_plugin "
3714 "WHERE plugin_reference = cost_function_plugin.id AND "
3715 "cost_function_plugin.name LIKE('") +
3716 pluginName +
"') " +
3717 " AND rf_reference IS NULL " +
3718 " AND bus_reference IS NULL AND " +
3719 " socket_reference = " +
3721 " AND cost_estimation_data.name LIKE('" + valueName +
"');";
3731 queryResult->
next();
3759 const std::string& valueName,
RowID socketID,
3760 const std::string& pluginName)
const {
3766 "FROM cost_estimation_data, cost_function_plugin "
3767 "WHERE plugin_reference = cost_function_plugin.id AND "
3768 "cost_function_plugin.name LIKE('") +
3769 pluginName +
"') " +
3770 " AND rf_reference IS NULL " +
3771 " AND bus_reference IS NULL AND " +
3772 " socket_reference = " +
3774 " AND cost_estimation_data.name LIKE('" + valueName +
"');");
3785 while (queryResult->
hasNext()) {
3786 queryResult->
next();
3788 data->push_back(value);
3818 const std::string& valueName,
const std::string& pluginName)
const {
3822 std::string theQuery =
3825 "FROM cost_estimation_data, cost_function_plugin "
3826 "WHERE plugin_reference = cost_function_plugin.id AND "
3827 "cost_function_plugin.name LIKE('") +
3828 pluginName +
"') " +
3829 " AND rf_reference IS NULL " +
3830 " AND fu_reference IS NULL " +
3831 " AND socket_reference IS NULL " +
3832 " AND bus_reference IS NULL " +
3833 " AND cost_estimation_data.name LIKE('" + valueName +
"');";
3843 queryResult->
next();
3872 std::string theQuery =
3875 "FROM cost_estimation_data "
3876 "WHERE cost_estimation_data.id = ") +
3888 queryResult->
next();
4024 std::string query =
"SELECT id FROM cost_estimation_data WHERE id=";
4053 std::string query =
"SELECT id FROM cost_function_plugin WHERE id=";
4088 "SELECT architecture FROM fu WHERE id=" +
4120 "SELECT architecture FROM rf WHERE id=" +
4149 "SELECT * FROM operation WHERE lower(name)=lower(\"" + opName
4151 bool returnValue = result->
hasNext();
4175 "SELECT * FROM block_source_file WHERE file=\"" +
4176 pathToFile +
"\";"));
4177 bool returnValue = result->
hasNext();
4203 "SELECT id FROM fu_architecture WHERE id=" +
4205 bool returnValue = result->
hasNext();
4230 "SELECT id FROM rf_architecture WHERE id=" +
4232 bool returnValue = result->
hasNext();
4259 "SELECT architecture FROM fu WHERE id=" +
4296 "SELECT architecture FROM rf WHERE id=" +
4329 const std::string& table,
const std::string& columnName)
const {
4331 std::string table_info_query(
"PRAGMA table_info(");
4332 table_info_query += table;
4333 table_info_query +=
");";
4347 std::string columnNameFromTable = columnData.
stringValue();
4349 assert(!columnNameFromTable.empty());
4350 if(columnNameFromTable == columnName) {
4367 const std::string& newcolumn) {
4368 std::string add_column_query(
"ALTER TABLE ");
4369 add_column_query += table +
" ADD COLUMN " + newcolumn;
4370 add_column_query +=
" INTEGER DEFAULT 0;";
4405 int portIDColumnIndex = fuPorts->
column(
"fu_data_port.id");
4406 int triggersColumnIndex = fuPorts->
column(
"fu_data_port.triggers");
4407 int setsOpcodeColumnIndex = fuPorts->
column(
"fu_data_port.sets_opcode");
4408 int guardSupportColumnIndex = fuPorts->
column(
4409 "fu_data_port.guard_support");
4410 int widthColumnIndex = fuPorts->
column(
"fu_data_port.width");
4411 int operationColumnIndex = fuPorts->
column(
"operation.name");
4412 int bindingColumnIndex = fuPorts->
column(
"io_binding.io_number");
4430 std::map<int, std::string> portIDMap;
4438 const DataObject& triggersData = fuPorts->
data(triggersColumnIndex);
4440 setsOpcodeColumnIndex);
4441 const DataObject& guardData = fuPorts->
data(guardSupportColumnIndex);
4444 operationColumnIndex);
4445 const DataObject& bindingData = fuPorts->
data(bindingColumnIndex);
4450 string operationName = operationData.
stringValue();
4457 bool triggers = triggersData.
boolValue();
4458 bool setsOpcode = setsOpcodeData.
boolValue();
4462 if (widthData.
isNull()) {
4467 new FUPort(portName, width, fu, triggers, setsOpcode);
4469 std::pair<int, string>(idData.
integerValue(), portName));
4470 if (setsOpcode && !triggers)
4472 std::string(
"Created a suspicious port ") + portName +
4473 " which sets opcode but does not trigger");
4516 int operationColumn = ioUsageData->
column(
"operation.name");
4517 int cycleColumn = ioUsageData->
column(
"io_usage.cycle");
4518 int ioColumn = ioUsageData->
column(
"io_usage.io_number");
4519 int actionColumn = ioUsageData->
column(
"io_usage.action");
4521 while (ioUsageData->
hasNext()) {
4522 ioUsageData->
next();
4523 const DataObject& operationData = ioUsageData->
data(operationColumn);
4528 string operationName = operationData.
stringValue();
4553 operationColumn = resUsageData->
column(
"operation.name");
4554 cycleColumn = resUsageData->
column(
"pipeline_resource_usage.cycle");
4555 int resourceColumn = resUsageData->
column(
"pipeline_resource.id");
4557 int resourceName(0);
4558 std::map<int, string> resourceMap;
4560 while (resUsageData->
hasNext()) {
4561 resUsageData->
next();
4565 const DataObject& resourceData = resUsageData->
data(resourceColumn);
4567 string operationName = operationData.
stringValue();
4576 std::pair<int, string>(
4582 resourceMap, resourceID), cycle, 1);
4585 delete resUsageData;
4586 resUsageData = NULL;
4613 std::string(
"query ") + queryString +
" threw something: " +
4624 int idColumn = implData->
column(
"fu_implementation.id");
4625 int nameColumn = implData->
column(
"fu_implementation.name");
4626 int opcodePortColumn = implData->
column(
4627 "fu_implementation.opcode_port");
4628 int clkPortColumn = implData->
column(
"fu_implementation.clk_port");
4629 int rstPortColumn = implData->
column(
"fu_implementation.rst_port");
4630 int glockPortColumn = implData->
column(
4631 "fu_implementation.glock_port");
4632 int glockReqPortColumn = implData->
column(
4633 "fu_implementation.glock_req_port");
4637 const DataObject& opcodePortData = implData->
data(opcodePortColumn);
4640 const DataObject& glockPortData = implData->
data(glockPortColumn);
4642 glockReqPortColumn);
4650 string glockReqPort = glockReqPortData.
stringValue();
4653 name, opcodePort, clkPort, rstPort, glockPort, glockReqPort);
4683 "SELECT cost_function_plugin.id AS id, "
4684 " cost_function_plugin.description AS description,"
4685 " cost_function_plugin.name AS name, "
4686 " cost_function_plugin.plugin_file_path AS plugin_file_path "
4687 "FROM cost_function_plugin, fu "
4689 " AND cost_function_plugin.id = fu.cost_function;");
4699 queryResult->
next();
4702 queryResult->
data(
"id");
4704 queryResult->
data(
"description");
4706 queryResult->
data(
"name");
4708 queryResult->
data(
"plugin_file_path");
4711 string description =
"";
4713 string pluginFilePath =
"";
4715 if (!pluginIdData.
isNull()) {
4720 pluginFilePath = pluginFilePathData.
stringValue();
4723 std::string(
"Something wrong with conversion: ") +
4731 pluginId, description, name, pluginFilePath,
4737 return costFunction;
4755 "SELECT cost_function_plugin.id AS id, "
4756 " cost_function_plugin.description AS description,"
4757 " cost_function_plugin.name AS name, "
4758 " cost_function_plugin.plugin_file_path AS plugin_file_path "
4759 "FROM cost_function_plugin, rf "
4761 " AND cost_function_plugin.id = rf.cost_function;");
4771 queryResult->
next();
4774 queryResult->
data(
"id");
4776 queryResult->
data(
"description");
4778 queryResult->
data(
"name");
4780 queryResult->
data(
"plugin_file_path");
4783 string description =
"";
4785 string pluginFilePath =
"";
4787 if (!pluginIdData.
isNull()) {
4792 pluginFilePath = pluginFilePathData.
stringValue();
4795 std::string(
"Something wrong with conversion: ") +
4803 pluginId, description, name, pluginFilePath,
4809 return costFunction;
4827 if(
hasColumn(
"rf_implementation",
"sac_param")) {
4842 if (implementationData->
hasNext()) {
4843 implementationData->
next();
4845 int idColumn = implementationData->
column(
"id");
4846 int nameColumn = implementationData->
column(
"name");
4847 int sizeParamColumn = implementationData->
column(
"size_param");
4848 int widthParamColumn = implementationData->
column(
"width_param");
4849 int sacParamColumn = implementationData->
column(
"sac_param");
4850 int clkPortColumn = implementationData->
column(
"clk_port");
4851 int rstPortColumn = implementationData->
column(
"rst_port");
4852 int glockPortColumn = implementationData->
column(
"glock_port");
4853 int guardPortColumn = implementationData->
column(
"guard_port");
4856 const DataObject& nameData = implementationData->
data(nameColumn);
4883 sizeParam, widthParam, guardPort, sacParam);
4892 delete implementationData;
4893 implementationData = NULL;
4911 const std::string& implementedPort)
const {
4921 int operationColumn = bindingData->
column(
"operation.name");
4922 int ioColumn = bindingData->
column(
"io_binding.io_number");
4927 string portName =
"";
4929 while (bindingData->
hasNext()) {
4930 bindingData->
next();
4931 const DataObject& operationData = bindingData->
data(operationColumn);
4933 string operationName = operationData.
stringValue();
4938 assert(portName ==
"" || portName == port->
name());
4939 portName = port->
name();
4959 RowID entryID)
const {
4967 int operationColumn = opcodeData->
column(
"operation.name");
4968 int opcodeColumn = opcodeData->
column(
"opcode_map.opcode");
4969 while (opcodeData->
hasNext()) {
4995 RowID entryID)
const {
5004 int portNameColumn = portData->
column(
"fu_port_map.name");
5005 int widthFormulaColumn = portData->
column(
"fu_port_map.width_formula");
5006 int loadPortColumn = portData->
column(
"fu_port_map.load_port");
5007 int guardPortColumn = portData->
column(
"fu_port_map.guard_port");
5013 widthFormulaColumn);
5015 const DataObject& guardPortData = portData->
data(guardPortColumn);
5018 string widthFormula = widthFormulaData.
stringValue();
5022 architecture, entryID, portName);
5024 portName, architecturePort, widthFormula, loadPort, guardPort,
5043 RowID entryID)
const {
5052 int extPortNameColumn = extPortData->
column(
"fu_external_port.name");
5053 int directionColumn = extPortData->
column(
5054 "fu_external_port.direction");
5055 int extPortWidthFormulaColumn = extPortData->
column(
5056 "fu_external_port.width_formula");
5057 int descriptionColumn = extPortData->
column(
5058 "fu_external_port.description");
5060 while (extPortData->
hasNext()) {
5061 extPortData->
next();
5067 extPortWidthFormulaColumn);
5072 string widthFormula = widthFormulaData.
stringValue();
5073 string description = descriptionData.
stringValue();
5098 "SELECT fu_implementation_parameter.name FROM "
5099 "fu_implementation_parameter, fu_external_port, "
5100 "fu_ext_port_parameter_dependency, fu_implementation "
5101 "WHERE fu_implementation.fu=" +
5103 " AND fu_external_port.fu_impl=fu_implementation.id AND "
5104 "fu_external_port.name=\"" + port.
name() +
5105 "\" AND fu_ext_port_parameter_dependency.port="
5106 "fu_external_port.id AND fu_implementation_parameter.id="
5107 "fu_ext_port_parameter_dependency.parameter;"));
5131 RowID entryID)
const {
5144 int extPortNameColumn = extPortData->
column(
"rf_external_port.name");
5145 int directionColumn = extPortData->
column(
5146 "rf_external_port.direction");
5147 int extPortWidthFormulaColumn = extPortData->
column(
5148 "rf_external_port.width_formula");
5149 int descriptionColumn = extPortData->
column(
5150 "rf_external_port.description");
5152 while (extPortData->
hasNext()) {
5153 extPortData->
next();
5159 extPortWidthFormulaColumn);
5164 string widthFormula = widthFormulaData.
stringValue();
5165 string description = descriptionData.
stringValue();
5194 "SELECT rf_implementation_parameter.name FROM "
5195 "rf_implementation_parameter, rf_external_port, "
5196 "rf_ext_port_parameter_dependency, rf_implementation "
5197 "WHERE rf_implementation.rf=" +
5199 " AND rf_external_port.rf_impl=rf_implementation.id AND "
5200 "rf_external_port.name=\"" + port.
name() +
5201 "\" AND rf_ext_port_parameter_dependency.port="
5202 "rf_external_port.id AND rf_implementation_parameter.id="
5203 "rf_ext_port_parameter_dependency.parameter;"));
5228 RowID entryID)
const {
5262 RowID entryID)
const {
5325 RowID entryID)
const {
5335 int fileColumn = sourceFileData->
column(
"block_source_file.file");
5336 int formatColumn = sourceFileData->
column(
"format.format");
5338 while (sourceFileData->
hasNext()) {
5339 sourceFileData->
next();
5350 delete sourceFileData;
5351 sourceFileData = NULL;
5365 RowID entryID)
const {
5377 int portNameColumn = portData->
column(
"name");
5378 int directionColumn = portData->
column(
"direction");
5379 int loadPortColumn = portData->
column(
"load_port");
5380 int opcodePortColumn = portData->
column(
"opcode_port");
5381 int opcodePortFormulaColumn = portData->
column(
5382 "opcode_port_width_formula");
5399 opcodePortFormulaColumn);
5431 RowID entryID)
const {
5440 int fileColumn = result->
column(
"block_source_file.file");
5441 int formatColumn = result->
column(
"format.format");
5469 "DELETE FROM cost_estimation_data "
5489 "INSERT INTO block_source_file(id,file,format) "
5491 "\",(SELECT id FROM format WHERE format=\"" +
5513 std::map<const FUPort*, const FUPort*> portMap;
5516 std::pair<const FUPort*, const FUPort*>(
5536 if (operation->
isBound(*port)) {
5537 int io = operation->
io(*port);
5539 if (samePort == NULL) {
5542 const FUPort* existingSamePort =
5544 if (existingSamePort != NULL &&
5545 existingSamePort != samePort) {
5559 portMap.erase(port);
5561 std::pair<const FUPort*, const FUPort*>(port, samePort));
5568 for (
int cycle = 0; cycle < operation->
latency(); cycle++) {
5573 if (written1 != written2) {
5580 if (read1 != read2) {
5588 usage.
usage1.insert(elem);
5592 for (
int i = 0; i < arch.
architecture().pipelineElementCount();
5597 usage.
usage2.insert(elem);
5601 plineElementUsages.push_back(usage);
5622 for (
size_t i = 0; i < table.size(); i++) {
5623 std::set<const PipelineElement*> usedResources1 = table[i].usage1;
5626 std::set<size_t> illegalStages1;
5627 for (
size_t usageIndex = 0; usageIndex < table.size();
5629 if (usageIndex == i) {
5632 std::set<const PipelineElement*> resources =
5633 table[usageIndex].usage1;
5634 std::set<const PipelineElement*> intersect;
5636 if (!intersect.empty()) {
5637 illegalStages1.insert(usageIndex);
5642 std::set<const PipelineElement*> usedResources2 = table[i].usage2;
5643 std::set<size_t> illegalStages2;
5644 for (
size_t usageIndex = 0; usageIndex < table.size();
5646 if (usageIndex == i) {
5649 std::set<const PipelineElement*> resources =
5650 table[usageIndex].usage2;
5651 std::set<const PipelineElement*> intersect;
5653 if (!intersect.empty()) {
5654 illegalStages2.insert(usageIndex);
5658 std::set<size_t> difference;
5660 if (!difference.empty()) {
5679 "INSERT INTO format(id,format) VALUES(1,\"" +
5683 "INSERT INTO format(id,format) VALUES(2,\"" +
5750 }
else if (direction ==
HDB::OUT) {
5772 "WHERE fu.id=" + idString +
";";
5791 "WHERE rf.id=" + idString +
";";
5810 "WHERE bus.id=" + idString +
";";
5829 "WHERE socket.id=" + idString +
";";
5847 "FROM fu, fu_architecture "
5848 "WHERE fu.id=" + idString +
" AND"
5849 " fu_architecture.id = fu.architecture;";
5869 "SELECT fu_data_port.id AS 'fu_data_port.id',"
5870 " fu_data_port.triggers AS 'fu_data_port.triggers',"
5871 " fu_data_port.sets_opcode AS 'fu_data_port.sets_opcode',"
5872 " fu_data_port.guard_support AS 'fu_data_port.guard_support',"
5873 " fu_data_port.width AS 'fu_data_port.width',"
5874 " operation.name AS 'operation.name',"
5875 " io_binding.io_number AS 'io_binding.io_number' "
5876 "FROM fu_data_port, io_binding, operation "
5877 "WHERE fu_data_port.fu_arch=" + idString +
" AND"
5878 " io_binding.port=fu_data_port.id AND"
5879 " io_binding.operation=operation.id;";
5897 "SELECT operation.name AS 'operation.name',"
5898 " io_usage.cycle AS 'io_usage.cycle',"
5899 " io_usage.io_number AS 'io_usage.io_number',"
5900 " io_usage.action AS 'io_usage.action' "
5901 "FROM operation_pipeline, io_usage, operation "
5902 "WHERE operation_pipeline.fu_arch=" + idString +
" AND"
5903 " io_usage.pipeline=operation_pipeline.id AND"
5904 " operation.id=operation_pipeline.operation;";
5922 "SELECT operation.name AS 'operation.name',"
5923 " pipeline_resource_usage.cycle AS "
5924 " 'pipeline_resource_usage.cycle',"
5925 " pipeline_resource.id AS 'pipeline_resource.id' "
5926 "FROM pipeline_resource_usage, pipeline_resource, operation,"
5927 " operation_pipeline "
5928 "WHERE operation_pipeline.fu_arch=" + idString +
" AND"
5929 " pipeline_resource_usage.pipeline=operation_pipeline.id AND"
5930 " pipeline_resource.id = pipeline_resource_usage.resource AND"
5931 " operation.id=operation_pipeline.operation;";
5951 "SELECT fu_implementation.id AS 'fu_implementation.id',"
5952 " fu_implementation.name AS 'fu_implementation.name',"
5953 " fu_implementation.opcode_port AS "
5954 "'fu_implementation.opcode_port',"
5955 " fu_implementation.clk_port AS 'fu_implementation.clk_port',"
5956 " fu_implementation.rst_port AS 'fu_implementation.rst_port',"
5957 " fu_implementation.glock_port AS "
5958 " 'fu_implementation.glock_port',"
5959 " fu_implementation.glock_req_port AS "
5960 " 'fu_implementation.glock_req_port' "
5961 "FROM fu, fu_implementation "
5962 "WHERE fu.id=" + idString +
" AND"
5963 " fu_implementation.fu=fu.id;";
5980 "SELECT operation.name AS 'operation.name',"
5981 " opcode_map.opcode AS 'opcode_map.opcode' "
5982 "FROM fu, fu_implementation, operation, opcode_map "
5983 "WHERE fu.id=" + idString +
" AND"
5984 " fu_implementation.fu=fu.id AND"
5985 " opcode_map.fu_impl=fu_implementation.id AND"
5986 " operation.id=opcode_map.operation;";
6005 "SELECT fu_port_map.name AS 'fu_port_map.name',"
6006 " fu_port_map.width_formula AS 'fu_port_map.width_formula',"
6007 " fu_port_map.load_port AS 'fu_port_map.load_port',"
6008 " fu_port_map.guard_port AS 'fu_port_map.guard_port' "
6009 "FROM fu, fu_port_map, fu_implementation "
6010 "WHERE fu.id=" + idString +
" AND"
6011 " fu_implementation.fu=fu.id AND"
6012 " fu_port_map.fu_impl=fu_implementation.id;";
6032 "SELECT fu_external_port.name AS 'fu_external_port.name',"
6033 " fu_external_port.direction AS 'fu_external_port.direction',"
6034 " fu_external_port.width_formula AS "
6035 " 'fu_external_port.width_formula',"
6036 " fu_external_port.description AS "
6037 " 'fu_external_port.description' "
6038 "FROM fu, fu_implementation, fu_external_port "
6039 "WHERE fu.id=" + idString +
" AND"
6040 " fu_implementation.fu=fu.id AND"
6041 " fu_external_port.fu_impl=fu_implementation.id;";
6061 "SELECT rf_external_port.name AS 'rf_external_port.name',"
6062 " rf_external_port.direction AS 'rf_external_port.direction',"
6063 " rf_external_port.width_formula AS "
6064 " 'rf_external_port.width_formula',"
6065 " rf_external_port.description AS "
6066 " 'rf_external_port.description' "
6067 "FROM rf, rf_implementation, rf_external_port "
6068 "WHERE rf.id=" + idString +
" AND"
6069 " rf_implementation.rf=rf.id AND"
6070 " rf_external_port.rf_impl=rf_implementation.id;";
6088 "SELECT fu_implementation_parameter.name AS 'name',"
6089 " fu_implementation_parameter.type AS 'type',"
6090 " fu_implementation_parameter.value AS 'value' "
6091 "FROM fu_implementation, fu_implementation_parameter "
6092 "WHERE fu_implementation.fu=" + idString +
" AND"
6093 " fu_implementation_parameter.fu_impl=fu_implementation.id;";
6111 "SELECT rf_implementation_parameter.name AS 'name',"
6112 " rf_implementation_parameter.type AS 'type',"
6113 " rf_implementation_parameter.value AS 'value' "
6114 "FROM rf_implementation, rf_implementation_parameter "
6115 "WHERE rf_implementation.rf=" + idString +
" AND"
6116 " rf_implementation_parameter.rf_impl=rf_implementation.id;";
6134 const std::string& portName) {
6138 "SELECT operation.name AS 'operation.name',"
6139 " io_binding.io_number AS 'io_binding.io_number' "
6140 "FROM operation, io_binding, fu_port_map, fu_implementation "
6141 "WHERE fu_implementation.fu=" + idString +
" AND"
6142 " fu_port_map.fu_impl=fu_implementation.id AND"
6143 " fu_port_map.name='" + portName +
"' AND"
6144 " io_binding.port=fu_port_map.arch_port AND"
6145 " operation.id=io_binding.operation;";
6163 "SELECT block_source_file.file AS 'block_source_file.file',"
6164 " format.format AS 'format.format' "
6165 "FROM block_source_file, fu_source_file, fu_implementation, format "
6166 "WHERE fu_implementation.fu=" + idString +
" AND"
6167 " fu_source_file.fu_impl=fu_implementation.id AND"
6168 " block_source_file.id=fu_source_file.file AND"
6169 " format.id=block_source_file.format;";
6188 "FROM rf_architecture "
6189 "WHERE id=" + idString +
";";
6216 "FROM rf_implementation "
6217 "WHERE rf_implementation.rf=" + idString +
";";
6244 "FROM rf_implementation "
6245 "WHERE rf_implementation.rf=" + idString +
";";
6263 "SELECT rf_data_port.name AS 'name',"
6264 " rf_data_port.direction AS 'direction',"
6265 " rf_data_port.load_port AS 'load_port',"
6266 " rf_data_port.opcode_port AS 'opcode_port',"
6267 " rf_data_port.opcode_port_width_formula AS "
6268 " 'opcode_port_width_formula' "
6269 "FROM rf_data_port, rf_implementation "
6270 "WHERE rf_implementation.rf=" + idString +
" AND"
6271 " rf_data_port.rf_impl=rf_implementation.id;";
6289 "SELECT block_source_file.file AS 'block_source_file.file',"
6290 " format.format AS 'format.format' "
6291 "FROM block_source_file, format, rf_implementation, rf_source_file "
6292 "WHERE rf_implementation.rf=" + idString +
" AND"
6293 " rf_source_file.rf_impl=rf_implementation.id AND"
6294 " block_source_file.id=rf_source_file.file AND"
6295 " format.id=block_source_file.format;";
6313 std::string theQuery =
6315 "SELECT value, cost_estimation_data.name AS data_name, "
6316 " cost_function_plugin.id AS plugin_id, "
6317 " fu_reference, rf_reference, bus_reference, "
6318 " socket_reference "
6319 "FROM cost_estimation_data, cost_function_plugin "
6320 "WHERE cost_estimation_data.plugin_reference="
6321 " cost_function_plugin.id AND "
6322 " cost_estimation_data.id = ") +
6334 queryResult->
next();
6343 if (!queryResult->
data(
"fu_reference").
isNull()) {
6346 if (!queryResult->
data(
"rf_reference").
isNull()) {
6349 if (!queryResult->
data(
"bus_reference").
isNull()) {
6352 if (!queryResult->
data(
"socket_reference").
isNull()) {
6382 std::string theQuery =
6385 "FROM cost_estimation_data "
6386 "WHERE fu_reference = ") +
6397 std::set<RowID> ids;
6399 while (queryResult->
hasNext()) {
6400 queryResult->
next();
6423 std::string theQuery =
6426 "FROM cost_estimation_data "
6427 "WHERE rf_reference = ") +
6438 std::set<RowID> ids;
6440 while (queryResult->
hasNext()) {
6441 queryResult->
next();
6464 std::string theQuery =
6467 "FROM cost_estimation_data "
6468 "WHERE socket_reference = ") +
6479 std::set<RowID> ids;
6481 while (queryResult->
hasNext()) {
6482 queryResult->
next();
6505 std::string theQuery =
6508 "FROM cost_estimation_data "
6509 "WHERE bus_reference = ") +
6520 std::set<RowID> ids;
6522 while (queryResult->
hasNext()) {
6523 queryResult->
next();
6544 std::string theQuery =
6545 "SELECT id FROM cost_function_plugin";
6555 std::set<RowID> ids;
6557 while (queryResult->
hasNext()) {
6558 queryResult->
next();
6580 std::string theQuery =
6583 "FROM cost_estimation_data "
6584 "WHERE plugin_reference = ") +
6595 std::set<RowID> ids;
6597 while (queryResult->
hasNext()) {
6598 queryResult->
next();
6620 std::string pluginDataQuery =
6621 "SELECT id, description, name, plugin_file_path, type "
6622 " FROM cost_function_plugin WHERE id = ";
6639 std::string path = pluginData->
data(
"plugin_file_path").
stringValue();
6656 (boost::format(
"Illegal cost_function_plugin type %d.") %
6668 (boost::format(
"Cost function plugin with id %d not found.") %
6686 std::string(
"INSERT INTO cost_estimation_data"
6687 " (id, name, value, plugin_reference, "
6688 " fu_reference, rf_reference, "
6689 " bus_reference, socket_reference) VALUES (") +
6690 "NULL, '" + data.
name() +
"', '" +
6769 std::string query =
"";
6770 if (!compiledQuery) {
6779 if (compiledQuery) {
6780 result = compiledQuery;
6791 std::set<RowID> dataIDs;
6797 if (!compiledQuery) {
6800 compiledQuery->
reset();
6825 short int* queryHash,
6826 bool createBindableQuery)
const {
6831 bool firstMatch =
true;
6832 unsigned int count = 0;
6835 *query =
"SELECT id FROM cost_estimation_data WHERE ";
6843 if (compiledQuery) {
6850 *query += createBindableQuery ?
"?" : match.
name();
6860 if (compiledQuery) {
6865 if (!firstMatch) *query +=
" AND ";
6867 *query +=
"value='";
6868 *query += createBindableQuery ?
"?" : match.
name();
6878 if (compiledQuery) {
6883 if (!firstMatch) *query +=
" AND ";
6885 *query +=
"plugin_reference = ";
6886 *query += createBindableQuery ?
"?" :
6896 if (compiledQuery) {
6901 if (!firstMatch) *query +=
" AND ";
6903 *query +=
"fu_reference = ";
6904 *query += createBindableQuery ?
"?" :
6914 if (compiledQuery) {
6919 if (!firstMatch) *query +=
" AND ";
6921 *query +=
"rf_reference = ";
6922 *query += createBindableQuery ?
"?" :
6932 if (compiledQuery) {
6937 if (!firstMatch) *query +=
" AND ";
6939 *query +=
"bus_reference = ";
6940 *query += createBindableQuery ?
"?" :
6950 if (compiledQuery) {
6955 if (!firstMatch) *query +=
" AND ";
6957 *query +=
"socket_reference = ";
6958 *query += createBindableQuery ?
"?" :
6995 std::string(
"UPDATE cost_estimation_data SET ") +
6996 " name='" + data.
name() +
7005 query +=
", fu_reference=";
7008 query +=
", fu_reference=NULL";
7016 query +=
", rf_reference=";
7019 query +=
", rf_reference=NULL";
7027 query +=
", bus_reference=";
7030 query +=
", bus_reference=NULL";
7038 query +=
", socket_reference=";
7041 query +=
", socket_reference=NULL";
7044 query +=
" WHERE id=";
7068 if (plugin.
name() ==
"") {
7077 switch (plugin.
type()) {
7093 (boost::format(
"Illegal cost_function_plugin type %d.") %
7100 std::string(
"UPDATE cost_function_plugin SET ") +
7101 " name='" + plugin.
name() +
7104 "', type='" + type +
"'";
7106 query +=
" WHERE id=";
7123std::list<std::string>
7129 std::string(
"SELECT * FROM block_source_file"));
7135 std::list<std::string> files;
7136 while (queryResult->
hasNext()) {
7137 queryResult->
next();
#define abortWithError(message)
#define assert(condition)
int RowID
Type definition of row ID in relational databases.
IDF::MachineImplementation * implementation
the implementation definition of the estimated processor
const string IN_DIRECTION
const string CQ_OPERATION_IMPLEMENTATION_VARIABLE
const string CQ_PIPELINE_RESOURCE_USAGE
const string CQ_FU_SOURCE_FILE
const string CQ_FU_IMPL_ENTRY_INDEX
const std::string COST_PLUGIN_TYPE_DECOMP
const string CQ_FU_ARCHITECTURE
const string BIDIR_DIRECTION
const std::string COST_PLUGIN_TYPE_RF
const string CQ_RF_EXT_PORT_PARAMETER_DEPENDENCY
const string CQ_OPERATION_IMPLEMENTATION
const string CQ_OPERATION_IMPLEMENTATION_SOURCE_FILE
const string CQ_RF_IMPL_ENTRY_INDEX
const string CQ_RF_ARCHITECTURE
const string CQ_RF_IMPLEMENTATION_PARAMETER
const string CQ_OPERATION_PIPELINE
const string CQ_RF_EXTERNAL_PORT
const string CQ_OPERATION_IMPLEMENTATION_RESOURCE_SOURCE_FILE
const string CQ_FU_PORT_MAP_ARCH_INDEX
const string CQ_OPERATION_IMPLEMENTATION_RESOURCE
const string CQ_PIPELINE_RESOURCE
const string CQ_BLOCK_SOURCE_FILE
const string CQ_FU_IMPLEMENTATION_PARAMETER
const string CQ_RF_IMPLEMENTATION
const string CQ_FU_DATA_PORT
const string CQ_FU_IMPLEMENTATION
const string CQ_FU_EXT_PORT_PARAMETER_DEPENDENCY
const string CQ_RF_DATA_PORT
const std::string COST_PLUGIN_TYPE_ICDEC
const string CQ_OPCODE_MAP
const std::string COST_PLUGIN_TYPE_FU
Possible cost function plugin types.
const string CQ_COST_ESTIMATION_DATA
type: {'fu'|'rf'|'decomp'|'icdec'}
const int DEFAULT_PORT_WIDTH
const string CQ_RF_SOURCE_FILE
const string CQ_COST_FUNCTION_PLUGIN
const string CQ_FU_PORT_MAP
const string OUT_DIRECTION
const string CQ_OPERATION
const string VERILOG_SIM_FORMAT
const string CQ_IO_BINDING
const string VHDL_SIM_FORMAT
const string CQ_OPERATION_IMPLEMENTATION_RESOURCES
const string VERILOG_FORMAT
const string CQ_FU_EXTERNAL_PORT
static std::string toString(const T &source)
void setBusReference(RowID busEntryID)
void setValue(const DataObject &value)
bool hasBusReference() const
bool hasFUReference() const
void setPluginID(RowID pluginID)
RowID busReference() const
RowID socketReference() const
void setRFReference(RowID rfEntryID)
bool hasSocketReference() const
void setSocketReference(RowID socketEntryID)
void setFUReference(RowID fuEntryID)
void setName(const std::string &name)
RowID rfReference() const
bool hasRFReference() const
RowID fuReference() const
virtual std::string stringValue() const
virtual bool isNull() const
virtual bool boolValue() const
virtual int integerValue() const
std::string errorMessage() const
static void checkOperations(const TTAMachine::FunctionUnit &fu, MachineValidatorResults &results)
static void checkOperandBindings(const TTAMachine::FunctionUnit &fu, MachineValidatorResults &results)
static std::string absolutePathOf(const std::string &pathName)
static bool fileIsReadable(const std::string fileName)
static bool fileIsCreatable(const std::string fileName)
static bool fileExists(const std::string fileName)
Format
Format of the file.
@ VHDLsim
VHDL simulation file.
@ Verilogsim
Verilog simulation file.
std::string pathToFile() const
CostFunctionPluginType
all supported cost function plugin types
@ COST_RF
register file cost estimator
@ COST_ICDEC
interconnection network & decoder cost estimator
@ COST_FU
function unit cost estimator
@ COST_DECOMP
decompressor cost estimator
CostFunctionPluginType type() const
std::string description() const
std::string pluginFilePath() const
std::string widthFormula() const
std::string parameterDependency(int index) const
bool setParameterDependency(const std::string ¶meter)
int parameterDependencyCount() const
std::string description() const
Direction direction() const
bool hasGuardSupport(const std::string &port) const
void setGuardSupport(const std::string &port)
void setParameterizedWidth(const std::string &port)
bool hasParameterizedWidth(const std::string &port) const
TTAMachine::FunctionUnit & architecture() const
void setImplementation(FUImplementation *implementation)
FUImplementation & implementation() const
virtual bool hasImplementation() const
FUArchitecture & architecture() const
virtual bool hasArchitecture() const
void setArchitecture(FUArchitecture *architecture)
FUPortImplementation & architecturePort(int index) const
Parameter parameter(int index) const
bool hasOpcode(const std::string &operation) const
std::string glockReqPort() const
int externalPortCount() const
int architecturePortCount() const
int parameterCount() const
FUExternalPort & externalPort(int index) const
std::string opcodePort() const
int opcode(const std::string &operation) const
std::string architecturePort() const
std::string guardPort() const
std::string widthFormula() const
void setCostFunction(CostFunctionPlugin *costFunction)
void setHDBFile(const std::string &file)
static std::string rfImplementationDataPortsByIDQuery(RowID id)
std::set< RowID > socketCostEstimationDataIDs(RowID socketID) const
DataObjectList * busCostEstimationDataList(const std::string &valueName, RowID implementationId, const std::string &pluginName) const
std::set< RowID > fuEntriesByArchitecture(const TTAMachine::FunctionUnit &fu) const
static std::string busEntryByIDQuery(RowID id)
static std::string ioUsageDataByIDQuery(RowID id)
HDBManager(const std::string &hdbFile)
std::set< RowID > busCostEstimationDataIDs(RowID busID) const
bool containsRFArchitecture(RowID id) const
bool fuEntryHasArchitecture(RowID id) const
std::vector< PipelineElementUsage > PipelineElementUsageTable
static BlockImplementationFile::Format fileFormat(const std::string &formatString)
static std::string rfImplementationByIDQuery(RowID id)
static std::string fuExternalPortsByIDQuery(RowID id)
void createCostEstimatioDataIdsQuery(const CostEstimationData &match, std::string *query, RelationalDBQueryResult *compiledQuery=NULL, short int *queryHash=NULL, bool createBindableQuery=false) const
static void createNew(const std::string &file)
RowID addBusEntry() const
FUEntry * fuByEntryID(RowID id) const
int addBooleanColumn(const std::string &table, const std::string &newcolumn)
std::set< RowID > rfArchitectureIDs() const
bool hasBusEntry(RowID id) const
void addOpcodesToImplementation(FUImplementation &implementation, RowID entryID) const
virtual void modifyCostFunctionPlugin(RowID id, const CostFunctionPlugin &plugin)
std::set< RowID > fuArchitectureIDsByOperationSet(const std::set< std::string > &operationNames) const
RowID addRFArchitecture(const RFArchitecture &architecture) const
RowID addCostFunctionPlugin(const CostFunctionPlugin &plugin) const
static bool isMatchingArchitecture(const TTAMachine::FunctionUnit &fu, const FUArchitecture &arch)
void addOperationPipelinesToFUArchitecture(FUArchitecture &architecture, RowID id) const
virtual void removeFUEntry(RowID id) const
void removeOperationImplementation(RowID id)
void setArchitectureForRF(RowID rfID, RowID archID) const
RowID addBusCostEstimationData(RowID busID, const std::string &valueName, const std::string &value, RowID pluginID) const
RowID rfArchitectureID(RowID rfEntryID) const
CostFunctionPlugin * costFunctionPluginByID(RowID pluginID) const
RelationalDBConnection * dbConnection_
Handle to the database connection.
OperationImplementationResource OperationImplementationResourceByID(RowID id) const
static std::string formatString(BlockImplementationFile::Format format)
static std::string fuSourceFilesByIDQuery(RowID id)
static std::string fuImplementationDataPortsByIDQuery(RowID id)
std::list< std::string > blockSourceFile()
void addDataPortsToImplementation(FUImplementation &implementation, FUArchitecture &architecture, RowID entryID) const
void addOperationImplementationResource(const OperationImplementationResource &resource)
std::string fileName() const
std::set< RowID > OperationImplementationIDs() const
bool containsOperation(const std::string &opName) const
RowID addRFCostEstimationData(RowID rfID, const std::string &valueName, const std::string &value, RowID pluginID) const
RelationalDBConnection * getDBConnection() const
virtual void removeFUImplementation(RowID implementationID) const
static std::string fuImplementationParametersByIDQuery(RowID id)
std::set< RowID > costFunctionPluginDataIDs(RowID pluginID) const
RowID addSocketCostEstimationData(RowID socketID, const std::string &valueName, const std::string &value, RowID pluginID) const
static std::string fuArchitectureByIDQuery(RowID id)
virtual std::set< RowID > costEstimationDataIDs(const CostEstimationData &match, bool useCompiledQueries=false, RelationalDBQueryResult *compiledQuery=NULL) const
void setCostFunctionPluginForFU(RowID fuID, RowID pluginID) const
virtual void removeSocketEntry(RowID id) const
void addPortsAndBindingsToFUArchitecture(FUArchitecture &architecture, RowID id) const
void unsetCostFunctionPluginForFU(RowID fuID) const
void removeOperationImplementationResource(RowID id)
static std::string directionString(HDB::Direction direction)
RowID addSocketEntry() const
virtual void removeRFImplementation(RowID implID) const
virtual void modifyCostEstimationData(RowID id, const CostEstimationData &data)
virtual RFArchitecture * rfArchitectureByID(RowID id) const
void addFUExternalPortsToImplementation(FUImplementation &implementation, RowID entryID) const
RowID fuArchitectureID(RowID fuEntryID) const
OperationImplementation OperationImplementationByID(RowID id) const
bool canRemoveFUArchitecture(RowID archID) const
virtual DataObject costEstimationDataValue(const std::string &valueName, const std::string &pluginName) const
bool hasRFEntry(RowID id) const
bool rfEntryHasArchitecture(RowID id) const
bool containsImplementationFile(const std::string &pathToFile) const
void unsetArchitectureForRF(RowID rfID) const
bool hasColumn(const std::string &table, const std::string &columnName) const
static std::string socketEntryByIDQuery(RowID id)
std::set< RowID > fuArchitectureIDs() const
RowID addFUArchitecture(const FUArchitecture &architecture) const
CostEstimationData costEstimationData(RowID id) const
void addBlockImplementationFiles(FUImplementation &implementation, RowID entryID) const
RowID addFUImplementation(const FUEntry &entry) const
bool containsFUArchitecture(RowID id) const
static HDBManager * instance_
Unique instance of the HDBManager.
static std::string fuImplementationByIDQuery(RowID id)
virtual void removeCostEstimationData(RowID id) const
static std::string rfSourceFilesByIDQuery(RowID id)
virtual FUImplementation * createImplementationOfFU(FUArchitecture &architecture, RowID id) const
static void insertFileFormats(RelationalDBConnection &connection)
virtual void removeRFEntry(RowID id) const
static std::string fuEntryByIDQuery(RowID id)
void setCostFunctionPluginForRF(RowID rfID, RowID pluginID) const
DataObjectList * socketCostEstimationDataList(const std::string &valueName, RowID implementationID, const std::string &pluginName) const
std::set< RowID > socketEntryIDs() const
bool hasSocketEntry(RowID id) const
void addOperationImplementation(const OperationImplementation &operation)
bool hasCostFunctionPluginByID(RowID id) const
CostFunctionPlugin * createCostFunctionOfFU(RowID id) const
SQLite * db_
Handle to the database.
static std::string rfImplementationByIDQuery2(RowID id)
RowID addFUCostEstimationData(RowID fuID, const std::string &valueName, const std::string &value, RowID pluginID) const
DataObject socketCostEstimationData(const std::string &valueName, RowID socketID, const std::string &pluginName) const
void unsetCostFunctionPluginForRF(RowID rfID) const
std::set< RowID > fuCostEstimationDataIDs(RowID fuImplID) const
RowID addRFImplementation(const RFImplementation &implementation, RowID rfEntryID)
std::string hdbFile_
The HDB file to manager.
std::set< RowID > rfCostEstimationDataIDs(RowID rfImplID) const
void addBlockImplementationFileToHDB(const BlockImplementationFile &file) const
RowID fuEntryIDOfImplementation(RowID implID) const
std::set< RowID > rfEntryIDs() const
static std::string opcodesByIDQuery(RowID id)
void setArchitectureForFU(RowID fuID, RowID archID) const
virtual void removeBusEntry(RowID id) const
virtual void removeRFArchitecture(RowID archID) const
static std::string rfExternalPortsByIDQuery(RowID id)
void addFUParametersToImplementation(FUImplementation &implementation, RowID entryID) const
std::set< RowID > rfEntriesByArchitecture(int readPorts, int writePorts, int bidirPorts, int maxReads, int maxWrites, int latency, bool guardSupport, int guardLatency=0, int width=0, int size=0, bool zeroRegister=false) const
static std::string resourceUsageDataByIDQuery(RowID id)
std::set< RowID > costFunctionPluginIDs() const
static std::string fuPortsAndBindingsByIDQuery(RowID id)
DataObject busCostEstimationData(const std::string &valueName, RowID busID, const std::string &pluginName) const
bool hasFUEntry(RowID id) const
static bool areCompatiblePipelines(const PipelineElementUsageTable &table)
std::set< RowID > busEntryIDs() const
static std::string rfEntryByIDQuery(RowID id)
void addRFExternalPortsToImplementation(RFImplementation &implementation, RowID entryID) const
RowID rfEntryIDOfImplementation(RowID implID) const
virtual FUArchitecture * fuArchitectureByID(RowID id) const
static std::string rfArchitectureByIDQuery(RowID id)
virtual void removeCostFunctionPlugin(RowID pluginID) const
RFEntry * rfByEntryID(RowID id) const
DataObject fuCostEstimationData(const std::string &valueName, RowID implementationId, const std::string &pluginName) const
static std::string rfImplementationParametersByIDQuery(RowID id)
void addRFParametersToImplementation(RFImplementation &implementation, RowID entryID) const
CostFunctionPlugin * createCostFunctionOfRF(RowID id) const
bool canRemoveRFArchitecture(RowID archID) const
virtual void removeFUArchitecture(RowID archID) const
std::set< RowID > fuEntryIDs() const
void unsetArchitectureForFU(RowID fuID) const
std::set< RowID > OperationImplementationResourceIDs() const
static std::string fuPortBindingByNameQuery(RowID fuID, const std::string &portName)
std::string resolveArchitecturePort(const FUArchitecture &architecture, RowID entryID, const std::string &implementedPort) const
bool hasCostEstimationDataByID(RowID id) const
RowID addCostEstimationData(const CostEstimationData &data) const
DataObject rfCostEstimationData(const std::string &valueName, RowID implementationId, const std::string &pluginName) const
virtual RFImplementation * createImplementationOfRF(RowID id) const
std::list< DataObject > DataObjectList
std::string glockPort() const
int implementationFileCount() const
std::string rstPort() const
BlockImplementationFile & file(int index) const
std::string clkPort() const
std::string loadPort() const
int readPortCount() const
bool hasGuardSupport() const
bool hasParameterizedWidth() const
int writePortCount() const
int bidirPortCount() const
bool zeroRegister() const
bool hasParameterizedSize() const
void setImplementation(RFImplementation *implementation)
virtual bool hasImplementation() const
virtual bool hasArchitecture() const
void setArchitecture(RFArchitecture *architecture)
std::string opcodePortWidthFormula() const
Direction direction() const
std::string opcodePort() const
Error error(int index) const
virtual void updateVersion(int version)=0
virtual int updateQuery(const std::string &queryString)=0
virtual RowID lastInsertRowID()=0
virtual RelationalDBQueryResult * query(const std::string &queryString, bool init=true)=0
virtual void beginTransaction()=0
virtual bool tableExistsInDB(const std::string &tableName)=0
virtual void rollback()=0
virtual void DDLQuery(const std::string &queryString)=0
virtual int column(const std::string &name) const
virtual void bindInt(unsigned int position, int value)
virtual const DataObject & data(std::size_t column) const =0
virtual void bindString(unsigned int position, const std::string &value)
static const int UNKNOWN_INDEX
virtual void close(const RelationalDBConnection &connection)
virtual RelationalDBConnection & connect(const std::string &database, const std::string &login="", const std::string &password="", bool readOnly=false)
virtual int width() const
OperandSet writtenOperands(int cycle) const
void addResourceUse(const std::string &name, int start, int duration)
void addPortRead(int operand, int start, int duration)
OperandSet readOperands(int cycle) const
std::set< int > OperandSet
Set for operand indexes.
void addPortWrite(int operand, int start, int duration)
bool isResourceUsed(const std::string &name, int cycle) const
virtual bool isTriggering() const
virtual bool isOpcodeSetting() const
virtual int pipelineElementCount() const
virtual HWOperation * operation(const std::string &name) const
virtual int operationCount() const
virtual FUPort * operationPort(const std::string &name) const
virtual bool hasOperationPort(const std::string &name) const
virtual PipelineElement * pipelineElement(int index) const
virtual bool hasOperation(const std::string &name) const
virtual int operationPortCount() const
ExecutionPipeline * pipeline() const
virtual void bindPort(int operand, const FUPort &port)
virtual FUPort * port(int operand) const
int io(const FUPort &port) const
const std::string & name() const
bool isBound(const FUPort &port) const
const std::string & name() const
virtual std::string name() const
Direction
Direction of port.
@ BIDIR
Bidirectional port.
std::set< const TTAMachine::PipelineElement * > usage2
std::set< const TTAMachine::PipelineElement * > usage1
std::vector< std::string > synFormats
std::vector< std::string > simFormats
std::vector< std::string > synFiles
std::vector< std::string > simFiles
std::string postOpImplFileVhdl
std::vector< Variable > verilogVariables
std::string initialImplFileVerilog
std::string absBusDefFile
std::vector< Variable > vhdlGlobalSignals
std::vector< Variable > verilogGlobalSignals
std::vector< OperationImplementationResource > resources
std::string postOpImplFileVerilog
std::string implFileVerilog
std::string initialImplFileVhdl
std::vector< Variable > vhdlVariables
std::string value
Value of the parameter.
std::string type
Type of the parameter.
std::string name
Name of the parameter.