extract.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. Copyright 2010 Intel Corporation
  3. Use, modification and distribution are subject to the Boost Software License,
  4. Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  5. http://www.boost.org/LICENSE_1_0.txt).
  6. */
  7. #include "schematic_database.hpp"
  8. #include "layout_pin.hpp"
  9. #include "layout_rectangle.hpp"
  10. #include "connectivity_database.hpp"
  11. #include "compare_schematics.hpp"
  12. #include "extract_devices.hpp"
  13. #include "parse_layout.hpp"
  14. #include "layout_database.hpp"
  15. #include "device.hpp"
  16. #include <string>
  17. #include <fstream>
  18. #include <iostream>
  19. bool compare_files(std::string layout_file, std::string schematic_file) {
  20. std::ifstream sin(schematic_file.c_str());
  21. std::ifstream lin(layout_file.c_str());
  22. std::vector<layout_rectangle> rects;
  23. std::vector<layout_pin> pins;
  24. parse_layout(rects, pins, lin);
  25. schematic_database reference_schematic;
  26. parse_schematic_database(reference_schematic, sin);
  27. layout_database layout;
  28. populate_layout_database(layout, rects);
  29. connectivity_database connectivity;
  30. populate_connectivity_database(connectivity, pins, layout);
  31. schematic_database schematic;
  32. std::vector<device>& devices = schematic.devices;
  33. for(std::size_t i = 0; i < pins.size(); ++i) {
  34. devices.push_back(device());
  35. devices.back().type = "PIN";
  36. devices.back().terminals.push_back(pins[i].net);
  37. }
  38. extract_devices(devices, connectivity, layout);
  39. extract_netlist(schematic.nets, devices);
  40. return compare_schematics(reference_schematic, schematic);
  41. }
  42. int main(int argc, char **argv) {
  43. if(argc < 3) {
  44. std::cout << "usage: " << argv[0] << " <layout_file> <schematic_file>" << std::endl;
  45. return -1;
  46. }
  47. bool result = compare_files(argv[1], argv[2]);
  48. if(result == false) {
  49. std::cout << "Layout does not match schematic." << std::endl;
  50. return 1;
  51. }
  52. std::cout << "Layout does match schematic." << std::endl;
  53. return 0;
  54. }