Compare commits
	
		
			No commits in common. "9c332ac3e74bdda12289b8141a5b74c2250cc1e3" and "6ed60a2c261407fe3ae068d922515df470d61558" have entirely different histories.
		
	
	
		
			9c332ac3e7
			...
			6ed60a2c26
		
	
		
| @ -5,7 +5,6 @@ | |||||||
| #include "error_dialog.h" | #include "error_dialog.h" | ||||||
| #include "warning_dialog.h" | #include "warning_dialog.h" | ||||||
| #include "message_source.h" | #include "message_source.h" | ||||||
| #include <stdexcept> |  | ||||||
| 
 | 
 | ||||||
| namespace display { | namespace display { | ||||||
| 
 | 
 | ||||||
| @ -92,7 +91,7 @@ namespace display { | |||||||
|                 value = domain::Value::fromInt(parseInt(string.toStdString())); |                 value = domain::Value::fromInt(parseInt(string.toStdString())); | ||||||
|                 break; |                 break; | ||||||
|             default: |             default: | ||||||
|                 throw std::runtime_error("invalid value type in text change"); |                 throw std::exception(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -179,4 +178,4 @@ namespace display { | |||||||
|         return errors; |         return errors; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| @ -25,8 +25,8 @@ namespace domain { | |||||||
|         std::string name; |         std::string name; | ||||||
|         WireType type; |         WireType type; | ||||||
|         int width; |         int width; | ||||||
|         bool hidden = false; |         bool hidden; | ||||||
|         bool hasTerminate = false; |         bool hasTerminate; | ||||||
|         Value terminateWith; |         Value terminateWith; | ||||||
| 
 | 
 | ||||||
|     public: |     public: | ||||||
|  | |||||||
| @ -128,18 +128,8 @@ namespace domain { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void generateConnection(ConnectionInstance *connection, ostream &buffer) { |     void generateConnection(ConnectionInstance *connection, ostream &buffer) { | ||||||
| 
 |         buffer << "\t\tline {x1:" << connection->start.first << "; y1:" << connection->start.second << "; " << | ||||||
|         auto x1 = connection->start.first; |                "x2:" << connection->end.first << "; y2:" << connection->end.second << ";}" << "\n"; | ||||||
|         auto y1 = connection->start.second; |  | ||||||
|         auto x2 = connection->end.first; |  | ||||||
|         auto y2 = connection->end.second; |  | ||||||
| 
 |  | ||||||
|         buffer << "\t\tpath {\n"; |  | ||||||
|         buffer << "\t\t\tx:0; y:0;\n"; |  | ||||||
|         buffer << "\t\t\tpoints: ("; |  | ||||||
|         buffer << "(" << x1 << ", " << y1 << "),"; |  | ||||||
|         buffer << "(" << (x2 - x1) << "," << (y2 - y1) << "));\n"; |  | ||||||
|         buffer << "\t\t}" << std::endl; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void generateBus(BusInstance *bus, ostream &buffer) { |     void generateBus(BusInstance *bus, ostream &buffer) { | ||||||
| @ -159,9 +149,9 @@ namespace domain { | |||||||
|         for (auto &bus: schema->busInstances) { |         for (auto &bus: schema->busInstances) { | ||||||
|             buffer << "\t//" << bus->name << std::endl; |             buffer << "\t//" << bus->name << std::endl; | ||||||
|             for (auto &wire: bus->bus.getWires()) { |             for (auto &wire: bus->bus.getWires()) { | ||||||
|                 auto name = wire.getName(); |                 auto name = (wire.isHidden() ? "--" : "") + wire.getName(); | ||||||
|                 if (usedNames.count(name) > 0) { |                 if (usedNames.count(name) > 0) { | ||||||
|                     name = bus->name + "__" + wire.getName(); |                     name = (wire.isHidden() ? "--" : "") + bus->name + "__" + wire.getName(); | ||||||
|                 } |                 } | ||||||
|                 usedNames.insert(name); |                 usedNames.insert(name); | ||||||
|                 usedMappings.insert(std::make_pair(bus->name + "." + wire.getName(), name)); |                 usedMappings.insert(std::make_pair(bus->name + "." + wire.getName(), name)); | ||||||
| @ -192,11 +182,7 @@ namespace domain { | |||||||
|         if (wire.getWidth() != 1) { |         if (wire.getWidth() != 1) { | ||||||
|             buffer << "<" << wire.getWidth() << ">"; |             buffer << "<" << wire.getWidth() << ">"; | ||||||
|         } |         } | ||||||
|         buffer << " " << (wire.isHidden() ? "--" : "") << name; |         buffer << " " << name << ";" << std::endl; | ||||||
|         if(wire.hasTerminateWith()) { |  | ||||||
|             buffer << " = " << wire.getTerminateWith().asInt(); |  | ||||||
|         } |  | ||||||
|         buffer << ";" << std::endl; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::set<std::string> createImports(Schema *schema) { |     std::set<std::string> createImports(Schema *schema) { | ||||||
| @ -414,4 +400,4 @@ namespace domain { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| } // domain
 | } // domain
 | ||||||
| @ -1,5 +1,4 @@ | |||||||
| #include "component.h" | #include "component.h" | ||||||
| #include <stdexcept> |  | ||||||
| 
 | 
 | ||||||
| namespace domain { | namespace domain { | ||||||
| 
 | 
 | ||||||
| @ -58,7 +57,7 @@ namespace domain { | |||||||
|                 return p; |                 return p; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no pin with name '" + pin + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool Component::hasPin(std::string name) { |     bool Component::hasPin(std::string name) { | ||||||
| @ -80,7 +79,7 @@ namespace domain { | |||||||
|                 return attr; |                 return attr; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no attribute with name '" + attribute + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool Component::hasAttribute(std::string name, Value::ValueType type) { |     bool Component::hasAttribute(std::string name, Value::ValueType type) { | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| #include "connection.h" | #include "connection.h" | ||||||
| #include <stdexcept> |  | ||||||
| 
 | 
 | ||||||
| namespace domain { | namespace domain { | ||||||
| 
 | 
 | ||||||
| @ -39,7 +38,7 @@ namespace domain { | |||||||
|                 return attributes[i]; |                 return attributes[i]; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no attribute with name '" + name + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool Connection::hasAttribute(std::string name) { |     bool Connection::hasAttribute(std::string name) { | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| #include "connection_instance.h" | #include "connection_instance.h" | ||||||
| #include <stdexcept> |  | ||||||
| 
 | 
 | ||||||
| namespace domain { | namespace domain { | ||||||
| 
 | 
 | ||||||
| @ -14,7 +13,7 @@ namespace domain { | |||||||
|                 return attr; |                 return attr; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no attribute with name '" + attribute + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -47,9 +47,7 @@ namespace domain { | |||||||
|     void ui::Rect::comdel(std::ostream &buffer, int x, int y) { |     void ui::Rect::comdel(std::ostream &buffer, int x, int y) { | ||||||
|         buffer << "\t\trectangle {\n"; |         buffer << "\t\trectangle {\n"; | ||||||
|         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; |         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; | ||||||
|         buffer << "\t\t\twidth: " << w << "; height: " << h << ";\n"; |         buffer << "\t\t\tw: " << w << "; h: " << h << ";\n"; | ||||||
|         buffer << "\t\t\tfill_color: " << this->config.fillColor.name().toStdString() << ";\n"; |  | ||||||
|         buffer << "\t\t\tline_color: " << this->config.lineColor.name().toStdString() << ";\n"; |  | ||||||
|         buffer << "\t\t}\n\n"; |         buffer << "\t\t}\n\n"; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -63,7 +61,7 @@ namespace domain { | |||||||
|     void ui::Ellipse::comdel(std::ostream &buffer, int x, int y) { |     void ui::Ellipse::comdel(std::ostream &buffer, int x, int y) { | ||||||
|         buffer << "\t\tellipse {\n"; |         buffer << "\t\tellipse {\n"; | ||||||
|         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; |         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; | ||||||
|         buffer << "\t\t\twidth: " << w << "; height: " << h << ";\n"; |         buffer << "\t\t\tw: " << w << "; h: " << h << ";\n"; | ||||||
|         buffer << "\t\t}\n\n"; |         buffer << "\t\t}\n\n"; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -75,12 +73,10 @@ namespace domain { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void ui::Line::comdel(std::ostream &buffer, int x, int y) { |     void ui::Line::comdel(std::ostream &buffer, int x, int y) { | ||||||
|         buffer << "\t\tpath {\n"; |         buffer << "\t\tline {\n"; | ||||||
|         buffer << "\t\t\tx:0; y:0;\n"; |         buffer << "\t\t\tx1: " << (x1 + x) << "; y1: " << (y1 + y) << ";\n"; | ||||||
|         buffer << "\t\t\tpoints: ("; |         buffer << "\t\t\tx2: " << (x2 + x) << "; y2: " << (y2 + y) << ";\n"; | ||||||
|         buffer << "(" << (x1 + x) << ", " << (y1 + y) << "),"; |         buffer << "\t\t}\n\n"; | ||||||
|         buffer << "(" << (x2 - x1) << "," << (y2 - y1) << "));\n"; |  | ||||||
|         buffer << "\t\t}" << std::endl; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void ui::Bus::render(QGraphicsItemGroup *group, int size) { |     void ui::Bus::render(QGraphicsItemGroup *group, int size) { | ||||||
| @ -108,12 +104,10 @@ namespace domain { | |||||||
|         buffer << "\t\trectangle {\n"; |         buffer << "\t\trectangle {\n"; | ||||||
|         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; |         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; | ||||||
|         if (orientation == HORIZONTAL) { |         if (orientation == HORIZONTAL) { | ||||||
|             buffer << "\t\t\twidth: " << size << "; height: " << h << ";\n"; |             buffer << "\t\t\tw: " << size << "; h: " << h << ";\n"; | ||||||
|         } else { |         } else { | ||||||
|             buffer << "\t\t\twidth: " << w << "; height: " << size << ";\n"; |             buffer << "\t\t\tw: " << w << "; h: " << size << ";\n"; | ||||||
|         } |         } | ||||||
|         buffer << "\t\t\tfill_color: " << this->config.fillColor.name().toStdString() << ";\n"; |  | ||||||
|         buffer << "\t\t\tline_color: " << this->config.lineColor.name().toStdString() << ";\n"; |  | ||||||
|         buffer << "\t\t}\n\n"; |         buffer << "\t\t}\n\n"; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| #include "library.h" | #include "library.h" | ||||||
| #include <stdexcept> |  | ||||||
| 
 | 
 | ||||||
| namespace domain { | namespace domain { | ||||||
| 
 | 
 | ||||||
| @ -52,7 +51,7 @@ namespace domain { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool Library::hasComponent(std::string name) { |     bool Library::hasComponent(std::string name) { | ||||||
|         for (unsigned int i = 0; i < components.size(); i++) { |         for (uint i = 0; i < components.size(); i++) { | ||||||
|             if (components[i].getName() == name) { |             if (components[i].getName() == name) { | ||||||
|                 return true; |                 return true; | ||||||
|             } |             } | ||||||
| @ -61,7 +60,7 @@ namespace domain { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool Library::hasBus(std::string name) { |     bool Library::hasBus(std::string name) { | ||||||
|         for (unsigned int i = 0; i < buses.size(); i++) { |         for (uint i = 0; i < buses.size(); i++) { | ||||||
|             if (buses[i].getName() == name) { |             if (buses[i].getName() == name) { | ||||||
|                 return true; |                 return true; | ||||||
|             } |             } | ||||||
| @ -71,30 +70,30 @@ namespace domain { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     AddressSpace &Library::getAddressSpace(std::string addressSpace) { |     AddressSpace &Library::getAddressSpace(std::string addressSpace) { | ||||||
|         for (unsigned int i = 0; i < addressSpaces.size(); i++) { |         for (uint i = 0; i < addressSpaces.size(); i++) { | ||||||
|             if (addressSpaces[i].getName() == addressSpace) { |             if (addressSpaces[i].getName() == addressSpace) { | ||||||
|                 return addressSpaces[i]; |                 return addressSpaces[i]; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no address space with name '" + addressSpace + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     Component &Library::getComponent(std::string component) { |     Component &Library::getComponent(std::string component) { | ||||||
|         for (unsigned int i = 0; i < components.size(); i++) { |         for (uint i = 0; i < components.size(); i++) { | ||||||
|             if (components[i].getName() == component) { |             if (components[i].getName() == component) { | ||||||
|                 return components[i]; |                 return components[i]; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no component with name '" + component + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     Bus &Library::getBus(std::string bus) { |     Bus &Library::getBus(std::string bus) { | ||||||
|         for (unsigned int i = 0; i < buses.size(); i++) { |         for (uint i = 0; i < buses.size(); i++) { | ||||||
|             if (buses[i].getName() == bus) { |             if (buses[i].getName() == bus) { | ||||||
|                 return buses[i]; |                 return buses[i]; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("no bus with name '" + bus + "'"); |         throw std::exception(); | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -103,7 +102,7 @@ namespace domain { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::optional<Connection> Library::getConnection(ConnectionComponent component, std::string bus) { |     std::optional<Connection> Library::getConnection(ConnectionComponent component, std::string bus) { | ||||||
|         for (unsigned int i = 0; i < connections.size(); i++) { |         for (uint i = 0; i < connections.size(); i++) { | ||||||
|             if (connections[i].isConnecting(component, bus)) { |             if (connections[i].isConnecting(component, bus)) { | ||||||
|                 return connections[i]; |                 return connections[i]; | ||||||
|             } |             } | ||||||
| @ -117,7 +116,7 @@ namespace domain { | |||||||
| 
 | 
 | ||||||
|     std::optional<Connection> |     std::optional<Connection> | ||||||
|     Library::getConnection(ConnectionComponent component, std::string bus, ConnectionComponent secondComponent) { |     Library::getConnection(ConnectionComponent component, std::string bus, ConnectionComponent secondComponent) { | ||||||
|         for (unsigned int i = 0; i < connections.size(); i++) { |         for (uint i = 0; i < connections.size(); i++) { | ||||||
|             if (connections[i].isConnecting(component, bus, secondComponent)) { |             if (connections[i].isConnecting(component, bus, secondComponent)) { | ||||||
|                 return connections[i]; |                 return connections[i]; | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -882,7 +882,7 @@ namespace domain { | |||||||
|             if (validator->getName() == function) { |             if (validator->getName() == function) { | ||||||
|                 if (validator->getSignature().size() == node.params.size()) { |                 if (validator->getSignature().size() == node.params.size()) { | ||||||
|                     std::vector<Value> params; |                     std::vector<Value> params; | ||||||
|                     for (unsigned int j = 0; j < validator->getSignature().size(); j++) { |                     for (uint j = 0; j < validator->getSignature().size(); j++) { | ||||||
|                         bool exists = false; |                         bool exists = false; | ||||||
|                         auto type = toType(node.params[j]); |                         auto type = toType(node.params[j]); | ||||||
|                         if (type.getType() == Value::UNDEFINED) { |                         if (type.getType() == Value::UNDEFINED) { | ||||||
|  | |||||||
| @ -1,7 +1,6 @@ | |||||||
| #include "value.h" | #include "value.h" | ||||||
| 
 | 
 | ||||||
| #include <string> | #include <string> | ||||||
| #include <stdexcept> |  | ||||||
| 
 | 
 | ||||||
| namespace domain { | namespace domain { | ||||||
| 
 | 
 | ||||||
| @ -45,58 +44,32 @@ namespace domain { | |||||||
|         return type == _type; |         return type == _type; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::string Value::getTypename() { |  | ||||||
|         switch (type) { |  | ||||||
|             case Value::BOOL: |  | ||||||
|                 return "bool"; |  | ||||||
|             case Value::INT: |  | ||||||
|                 return "int"; |  | ||||||
|             case Value::STRING: |  | ||||||
|                 return "string"; |  | ||||||
|             case Value::ADDRESS_SPACE: |  | ||||||
|             case Value::ADDRESS_SPACE_REFERENCE: |  | ||||||
|                 return "address space"; |  | ||||||
|             case Value::WIRE_REFERENCE: |  | ||||||
|                 return "wire reference"; |  | ||||||
|             case Value::ATTRIBUTE_REFERENCE: |  | ||||||
|                 return "attribute"; |  | ||||||
|             case Value::NIL: |  | ||||||
|                 return "null"; |  | ||||||
|             case Value::MEMORY: |  | ||||||
|             case Value::MEMORY_REFERENCE: |  | ||||||
|                 return "memory"; |  | ||||||
|             case Value::UNDEFINED: |  | ||||||
|                 return "undefined"; |  | ||||||
|         } |  | ||||||
|         return "unknown"; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     long long Value::asInt() { |     long long Value::asInt() { | ||||||
|         if (isType(Value::INT)) { |         if (isType(Value::INT)) { | ||||||
|             return intValue; |             return intValue; | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("expected 'int' but value contains '" + getTypename() + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::string Value::asString() { |     std::string Value::asString() { | ||||||
|         if (isType(Value::STRING)) { |         if (isType(Value::STRING)) { | ||||||
|             return stringValue; |             return stringValue; | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("expected 'string' but value contains '" + getTypename() + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool Value::asBool() { |     bool Value::asBool() { | ||||||
|         if (isType(Value::BOOL)) { |         if (isType(Value::BOOL)) { | ||||||
|             return boolValue; |             return boolValue; | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("expected 'bool' but value contains '" + getTypename() + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     AddressSpace Value::asAddressSpace() { |     AddressSpace Value::asAddressSpace() { | ||||||
|         if (isType(Value::ADDRESS_SPACE)) { |         if (isType(Value::ADDRESS_SPACE)) { | ||||||
|             return *addressSpace; |             return *addressSpace; | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("expected 'address space' but value contains '" + getTypename() + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::string Value::asReference() { |     std::string Value::asReference() { | ||||||
| @ -104,7 +77,7 @@ namespace domain { | |||||||
|             isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) { |             isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) { | ||||||
|             return reference; |             return reference; | ||||||
|         } |         } | ||||||
|         throw std::runtime_error("expected 'reference' but value contains '" + getTypename() + "'"); |         throw std::exception(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::optional<std::string> Value::asMemoryReference() { |     std::optional<std::string> Value::asMemoryReference() { | ||||||
| @ -120,7 +93,7 @@ namespace domain { | |||||||
|         if (isType(Value::INT)) { |         if (isType(Value::INT)) { | ||||||
|             this->intValue = value; |             this->intValue = value; | ||||||
|         } else { |         } else { | ||||||
|             throw std::runtime_error("expected to set 'int' but value contains '" + getTypename() + "'"); |             throw std::exception(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -128,7 +101,7 @@ namespace domain { | |||||||
|         if (isType(Value::STRING)) { |         if (isType(Value::STRING)) { | ||||||
|             this->stringValue = value; |             this->stringValue = value; | ||||||
|         } else { |         } else { | ||||||
|             throw std::runtime_error("expected to set 'string' but value contains '" + getTypename() + "'"); |             throw std::exception(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -136,7 +109,7 @@ namespace domain { | |||||||
|         if (isType(Value::BOOL)) { |         if (isType(Value::BOOL)) { | ||||||
|             this->boolValue = value; |             this->boolValue = value; | ||||||
|         } else { |         } else { | ||||||
|             throw std::runtime_error("expected to set 'bool' but value contains '" + getTypename() + "'"); |             throw std::exception(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -144,7 +117,7 @@ namespace domain { | |||||||
|         if (isType(Value::WIRE_REFERENCE)) { |         if (isType(Value::WIRE_REFERENCE)) { | ||||||
|             this->reference = value; |             this->reference = value; | ||||||
|         } else { |         } else { | ||||||
|             throw std::runtime_error("expected to set 'wire' but value contains '" + getTypename() + "'"); |             throw std::exception(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -218,7 +191,7 @@ namespace domain { | |||||||
|                     return "null"; |                     return "null"; | ||||||
|                 } |                 } | ||||||
|             default: |             default: | ||||||
|                 throw std::runtime_error("unknown type couldn't stringify '" + getTypename() + "'"); |                 throw std::exception(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -46,7 +46,6 @@ namespace domain { | |||||||
|         bool equals(Value value); |         bool equals(Value value); | ||||||
| 
 | 
 | ||||||
|         std::string string(); |         std::string string(); | ||||||
|         std::string getTypename(); |  | ||||||
| 
 | 
 | ||||||
|         ValueType getType(); |         ValueType getType(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -408,7 +408,7 @@ struct WireNode : public AstNode { | |||||||
|     bool hidden = false; |     bool hidden = false; | ||||||
| 
 | 
 | ||||||
|     /** If wire isn't connected to anything it is replaced with terminate with terminateWith value */ |     /** If wire isn't connected to anything it is replaced with terminate with terminateWith value */ | ||||||
|     bool hasTerminateWith = false; |     bool hasTerminateWith; | ||||||
|     ValueNode terminateWith; |     ValueNode terminateWith; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -74,7 +74,7 @@ PError ComdelParser::unexpected() { | |||||||
|     } else { |     } else { | ||||||
|         ss << ": "; |         ss << ": "; | ||||||
|     } |     } | ||||||
|     unsigned int token_counter = 0; |     uint token_counter = 0; | ||||||
|     for (auto &type: expectedTokens) { |     for (auto &type: expectedTokens) { | ||||||
|         if (type == TokenType::IDENTIFIER || |         if (type == TokenType::IDENTIFIER || | ||||||
|             type == TokenType::NUMBER || |             type == TokenType::NUMBER || | ||||||
| @ -1365,4 +1365,4 @@ PResult<ValueNode> ComdelParser::parseConnectionWire() { | |||||||
|     } else { |     } else { | ||||||
|         return unexpected(); |         return unexpected(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -2,10 +2,10 @@ | |||||||
| @info "Primjer ARM biblioteke" | @info "Primjer ARM biblioteke" | ||||||
| @directory "." | @directory "." | ||||||
| @header ` | @header ` | ||||||
| // Version 0.0.1 | \\ Version 0.0.1 | ||||||
| set load_performs_init; | set load_performs_init; | ||||||
| ` | ` | ||||||
| @componentHeader "    clock 100 MHz;" | @componentHeader "    clock 100MHz;" | ||||||
| 
 | 
 | ||||||
| // adresni prostori | // adresni prostori | ||||||
| @address adresniProstor(0,0xFFFFFFFF) | @address adresniProstor(0,0xFFFFFFFF) | ||||||
| @ -611,7 +611,7 @@ set load_performs_init; | |||||||
|             pin { |             pin { | ||||||
|                 x: 15; y: 30; w: 10; h: 10; |                 x: 15; y: 30; w: 10; h: 10; | ||||||
|                 type: "in"; |                 type: "in"; | ||||||
|                 orientation: "bottom"; |                 orientation: "top"; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -729,9 +729,8 @@ set load_performs_init; | |||||||
|         irq wired_or, fiq wired_or, nmreq wired_and, |         irq wired_or, fiq wired_or, nmreq wired_and, | ||||||
|         // hsel_* |         // hsel_* | ||||||
|         sel_mem hidden, sel_bridge, sel_dmac |         sel_mem hidden, sel_bridge, sel_dmac | ||||||
|         sel_mem hidden, sel_bridge, sel_dmac |  | ||||||
|         // dmac |         // dmac | ||||||
|         busreq terminate_with 0, grant |         busreq, grant | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										67
									
								
								examples/arm/minimum.comdel
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								examples/arm/minimum.comdel
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | |||||||
|  | 
 | ||||||
|  | \\ Version 0.0.1 | ||||||
|  | set load_performs_init; | ||||||
|  | 
 | ||||||
|  | #include ".\arm7tdmi.comdel" | ||||||
|  | #include ".\decoder.comdel" | ||||||
|  | #include ".\memory.comdel" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | component System | ||||||
|  | { | ||||||
|  |     clock 100MHz; | ||||||
|  | 	//ahb | ||||||
|  | 	wire<32> addr; | ||||||
|  | 	wire<32> rdata; | ||||||
|  | 	wire<32> wdata; | ||||||
|  | 	wire<3> size; | ||||||
|  | 	wire write; | ||||||
|  | 	wired_or ready; | ||||||
|  | 	wired_or irq; | ||||||
|  | 	wired_or fiq; | ||||||
|  | 	wired_and nmreq; | ||||||
|  | 	wire --sel_mem; | ||||||
|  | 	wire sel_bridge; | ||||||
|  | 	wire sel_dmac; | ||||||
|  | 	wire busreq; | ||||||
|  | 	wire grant; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	//gpio_port | ||||||
|  | 	wire --xp0; | ||||||
|  | 	wire --xp1; | ||||||
|  | 	wire --xp2; | ||||||
|  | 	wire --xp3; | ||||||
|  | 	wire --xp4; | ||||||
|  | 	wire --xp5; | ||||||
|  | 	wire --xp6; | ||||||
|  | 	wire --xp7; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	// components -------------------------------------------- | ||||||
|  | 	subcomponent Memory64KiB memorija(addr, rdata, wdata, size, write, ready, --sel_mem); | ||||||
|  | 	subcomponent ARM7tdmi arm(addr, rdata, wdata, size, write, ready, irq, fiq, nmreq, busreq, grant, *, *) uses memorija; | ||||||
|  | 	subcomponent Decoder decoder(addr, nmreq, --sel_mem, sel_bridge, sel_dmac, 1, 1); | ||||||
|  | 
 | ||||||
|  | 	display { | ||||||
|  | 		component { x: -473; y: -283; ref: "arm"; } | ||||||
|  | 		component { x: -433; y: 6; ref: "memorija"; } | ||||||
|  | 		component { x: -537; y: -202; ref: "decoder"; } | ||||||
|  | 
 | ||||||
|  | 		// ahb bus | ||||||
|  | 
 | ||||||
|  | 		rectangle { | ||||||
|  | 			x: -514; y: -86; | ||||||
|  | 			w: 249; h: 20; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// gpio_port bus | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		line {x1:-428; y1:6; x2:-389; y2:-75;} | ||||||
|  | 		line {x1:-418; y1:-152; x2:-389; y2:-75;} | ||||||
|  | 		line {x1:-517; y1:-172; x2:-389; y2:-75;} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -2,20 +2,20 @@ | |||||||
| 
 | 
 | ||||||
| @schema { | @schema { | ||||||
| 	@instance arm ARM7tdmi { | 	@instance arm ARM7tdmi { | ||||||
| 		@position (1179, 326) | 		@position (-473, -283) | ||||||
| 		@attribute _memory memorija | 		@attribute _memory memorija | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@instance memorija Memory64KiB { | 	@instance memorija Memory64KiB { | ||||||
| 		@position (1148, 521) | 		@position (-433, 6) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@instance decoder Decoder { | 	@instance decoder Decoder { | ||||||
| 		@position (1070, 381) | 		@position (-537, -202) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@instance ahb AHB { | 	@instance ahb AHB { | ||||||
| 		@position (1027, 465) | 		@position (-514, -86) | ||||||
| 		@size 249 | 		@size 249 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,67 +0,0 @@ | |||||||
| 
 |  | ||||||
| // Version 0.0.1 |  | ||||||
| set load_performs_init; |  | ||||||
| 
 |  | ||||||
| #include ".\arm7tdmi.comdel" |  | ||||||
| #include ".\decoder.comdel" |  | ||||||
| #include ".\memory.comdel" |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| component System |  | ||||||
| { |  | ||||||
|     clock 100 MHz; |  | ||||||
| 	//ahb |  | ||||||
| 	wire<32> addr; |  | ||||||
| 	wire<32> rdata; |  | ||||||
| 	wire<32> wdata; |  | ||||||
| 	wire<3> size; |  | ||||||
| 	wire write; |  | ||||||
| 	wired_or ready; |  | ||||||
| 	wired_or irq; |  | ||||||
| 	wired_or fiq; |  | ||||||
| 	wired_and nmreq; |  | ||||||
| 	wire --sel_mem; |  | ||||||
| 	wire sel_bridge; |  | ||||||
| 	wire sel_dmac; |  | ||||||
| 	wire --ahb__sel_mem; |  | ||||||
| 	wire ahb__sel_bridge; |  | ||||||
| 	wire ahb__sel_dmac; |  | ||||||
| 	wire busreq = 0; |  | ||||||
| 	wire grant; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	// components -------------------------------------------- |  | ||||||
| 	subcomponent Memory64KiB memorija(addr, rdata, wdata, size, write, ready, sel_mem); |  | ||||||
| 	subcomponent ARM7tdmi arm(addr, rdata, wdata, size, write, ready, irq, fiq, nmreq, busreq, grant) uses memorija; |  | ||||||
| 	subcomponent Decoder decoder(addr, nmreq, sel_mem, sel_bridge, sel_dmac, 1, 1); |  | ||||||
| 
 |  | ||||||
| 	display { |  | ||||||
| 		component { x: 1179; y: 326; ref: "arm"; } |  | ||||||
| 		component { x: 1148; y: 521; ref: "memorija"; } |  | ||||||
| 		component { x: 1070; y: 381; ref: "decoder"; } |  | ||||||
| 
 |  | ||||||
| 		// ahb bus |  | ||||||
| 
 |  | ||||||
| 		rectangle { |  | ||||||
| 			x: 1027; y: 465; |  | ||||||
| 			width: 249; height: 20; |  | ||||||
| 			fill_color: #999999; |  | ||||||
| 			line_color: #999999; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 		path { |  | ||||||
| 			x:0; y:0; |  | ||||||
| 			points: ((1153, 521),(-1,-46)); |  | ||||||
| 		} |  | ||||||
| 		path { |  | ||||||
| 			x:0; y:0; |  | ||||||
| 			points: ((1234, 457),(-82,18)); |  | ||||||
| 		} |  | ||||||
| 		path { |  | ||||||
| 			x:0; y:0; |  | ||||||
| 			points: ((1090, 421),(62,54)); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user