add openfpga read xml executable and start min unit test

This commit is contained in:
tangxifan 2020-01-13 21:05:58 -07:00
parent d6c69ea7c6
commit db503ffebf
3 changed files with 43 additions and 24 deletions

View File

@ -232,6 +232,12 @@ set_target_properties(libvpr vpr_shell
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/vpr7_x2p/vpr"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/vpr7_x2p/vpr")
set_target_properties(libarchopenfpga read_arch_openfpga
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libopenfpga/libarchopenfpga"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libopenfpga/libarchopenfpga"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libopenfpga/libarchopenfpga")
set_target_properties(libvpr8 vpr8
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/vpr"

View File

@ -72,11 +72,39 @@ e_circuit_model_type string_to_circuit_model_type(const std::string& type_string
return NUM_CIRCUIT_MODEL_TYPES;
}
/********************************************************************
* Parse XML codes of a circuit model to circuit library
*******************************************************************/
static
void read_xml_circuit_model(pugi::xml_node& model_xml,
const pugiutil::loc_data& loc_data,
CircuitLibrary& circuit_lib) {
/* Find the type of the circuit model
* so that we can add a new circuit model to circuit library
*/
const char* type_attr = get_attribute(model_xml, "type", loc_data).value();
/* Translate the type of circuit model to enumerate */
e_circuit_model_type model_type = string_to_circuit_model_type(std::string(type_attr));
if (NUM_CIRCUIT_MODEL_TYPES == model_type) {
archfpga_throw(loc_data.filename_c_str(), loc_data.line(model_xml),
"Invalid 'type' attribute '%s'\n",
type_attr);
}
CircuitModelId model = circuit_lib.add_model(model_type);
/* Find the name of the circuit model */
const char* name_attr = get_attribute(model_xml, "name", loc_data).value();
circuit_lib.set_model_name(model, std::string(name_attr));
}
/********************************************************************
* Parse XML codes about circuit models to circuit library
*******************************************************************/
static
CircuitLibrary read_xml_circuit_models(pugi::xml_node& Node,
CircuitLibrary read_xml_module_circuit_models(pugi::xml_node& Node,
const pugiutil::loc_data& loc_data) {
CircuitLibrary circuit_lib;
/* Iterate over the children under this node,
@ -87,26 +115,7 @@ CircuitLibrary read_xml_circuit_models(pugi::xml_node& Node,
if (model_xml.name() != std::string("circuit_model")) {
bad_tag(model_xml, loc_data, Node, {"circuit_model"});
}
/* Find the type of the circuit model
* so that we can add a new circuit model to circuit library
*/
const char* type_attr = get_attribute(model_xml, "type", loc_data).value();
/* Translate the type of circuit model to enumerate */
e_circuit_model_type model_type = string_to_circuit_model_type(std::string(type_attr));
if (NUM_CIRCUIT_MODEL_TYPES == model_type) {
archfpga_throw(loc_data.filename_c_str(), loc_data.line(Node),
"Invalid 'type' attribute '%s'\n",
type_attr);
}
CircuitModelId model = circuit_lib.add_model(model_type);
/* Find the name of the circuit model */
const char* name_attr = get_attribute(model_xml, "name", loc_data).value();
circuit_lib.set_model_name(model, std::string(name_attr));
read_xml_circuit_model(model_xml, loc_data, circuit_lib);
}
return circuit_lib;
@ -135,7 +144,7 @@ CircuitSettings read_xml_openfpga_arch(const char* arch_file_name) {
* under the node <module_circuit_models>
*/
auto xml_module_circuit_models = get_single_child(xml_circuit_settings, "module_circuit_models", loc_data);
circuit_settings.circuit_lib = read_xml_circuit_models(xml_module_circuit_models, loc_data);
circuit_settings.circuit_lib = read_xml_module_circuit_models(xml_module_circuit_models, loc_data);
} catch (pugiutil::XmlError& e) {
archfpga_throw(arch_file_name, e.line(),

View File

@ -3,11 +3,15 @@
* 1. parser of data structures
* 2. writer of data structures
*******************************************************************/
#include "vtr_log.h"
#include "read_openfpga_xml.h"
int main(int argc, const char** argv) {
/* Parse the circuit library from an XML file */
const CircuitSettings& circuit_setting = read_xml_openfpga_arch(argv[1]);
const CircuitSettings& circuit_settings = read_xml_openfpga_arch(argv[1]);
VTR_LOG("Parsed %s circuit models from XML into circuit library.\n",
circuit_settings.circuit_lib.num_models());
/* Check the circuit library */