Compare commits
	
		
			2 Commits
		
	
	
		
			6ed60a2c26
			...
			9c332ac3e7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 9c332ac3e7 | ||
|  | edfd7fdf37 | 
| @ -5,6 +5,7 @@ | ||||
| #include "error_dialog.h" | ||||
| #include "warning_dialog.h" | ||||
| #include "message_source.h" | ||||
| #include <stdexcept> | ||||
| 
 | ||||
| namespace display { | ||||
| 
 | ||||
| @ -91,7 +92,7 @@ namespace display { | ||||
|                 value = domain::Value::fromInt(parseInt(string.toStdString())); | ||||
|                 break; | ||||
|             default: | ||||
|                 throw std::exception(); | ||||
|                 throw std::runtime_error("invalid value type in text change"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -25,8 +25,8 @@ namespace domain { | ||||
|         std::string name; | ||||
|         WireType type; | ||||
|         int width; | ||||
|         bool hidden; | ||||
|         bool hasTerminate; | ||||
|         bool hidden = false; | ||||
|         bool hasTerminate = false; | ||||
|         Value terminateWith; | ||||
| 
 | ||||
|     public: | ||||
|  | ||||
| @ -128,8 +128,18 @@ namespace domain { | ||||
|     } | ||||
| 
 | ||||
|     void generateConnection(ConnectionInstance *connection, ostream &buffer) { | ||||
|         buffer << "\t\tline {x1:" << connection->start.first << "; y1:" << connection->start.second << "; " << | ||||
|                "x2:" << connection->end.first << "; y2:" << connection->end.second << ";}" << "\n"; | ||||
| 
 | ||||
|         auto x1 = connection->start.first; | ||||
|         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) { | ||||
| @ -149,9 +159,9 @@ namespace domain { | ||||
|         for (auto &bus: schema->busInstances) { | ||||
|             buffer << "\t//" << bus->name << std::endl; | ||||
|             for (auto &wire: bus->bus.getWires()) { | ||||
|                 auto name = (wire.isHidden() ? "--" : "") + wire.getName(); | ||||
|                 auto name = wire.getName(); | ||||
|                 if (usedNames.count(name) > 0) { | ||||
|                     name = (wire.isHidden() ? "--" : "") + bus->name + "__" + wire.getName(); | ||||
|                     name = bus->name + "__" + wire.getName(); | ||||
|                 } | ||||
|                 usedNames.insert(name); | ||||
|                 usedMappings.insert(std::make_pair(bus->name + "." + wire.getName(), name)); | ||||
| @ -182,7 +192,11 @@ namespace domain { | ||||
|         if (wire.getWidth() != 1) { | ||||
|             buffer << "<" << wire.getWidth() << ">"; | ||||
|         } | ||||
|         buffer << " " << name << ";" << std::endl; | ||||
|         buffer << " " << (wire.isHidden() ? "--" : "") << name; | ||||
|         if(wire.hasTerminateWith()) { | ||||
|             buffer << " = " << wire.getTerminateWith().asInt(); | ||||
|         } | ||||
|         buffer << ";" << std::endl; | ||||
|     } | ||||
| 
 | ||||
|     std::set<std::string> createImports(Schema *schema) { | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| #include "component.h" | ||||
| #include <stdexcept> | ||||
| 
 | ||||
| namespace domain { | ||||
| 
 | ||||
| @ -57,7 +58,7 @@ namespace domain { | ||||
|                 return p; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no pin with name '" + pin + "'"); | ||||
|     } | ||||
| 
 | ||||
|     bool Component::hasPin(std::string name) { | ||||
| @ -79,7 +80,7 @@ namespace domain { | ||||
|                 return attr; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no attribute with name '" + attribute + "'"); | ||||
|     } | ||||
| 
 | ||||
|     bool Component::hasAttribute(std::string name, Value::ValueType type) { | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| #include "connection.h" | ||||
| #include <stdexcept> | ||||
| 
 | ||||
| namespace domain { | ||||
| 
 | ||||
| @ -38,7 +39,7 @@ namespace domain { | ||||
|                 return attributes[i]; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no attribute with name '" + name + "'"); | ||||
|     } | ||||
| 
 | ||||
|     bool Connection::hasAttribute(std::string name) { | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| #include "connection_instance.h" | ||||
| #include <stdexcept> | ||||
| 
 | ||||
| namespace domain { | ||||
| 
 | ||||
| @ -13,7 +14,7 @@ namespace domain { | ||||
|                 return attr; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no attribute with name '" + attribute + "'"); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -47,7 +47,9 @@ namespace domain { | ||||
|     void ui::Rect::comdel(std::ostream &buffer, int x, int y) { | ||||
|         buffer << "\t\trectangle {\n"; | ||||
|         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; | ||||
|         buffer << "\t\t\tw: " << w << "; h: " << h << ";\n"; | ||||
|         buffer << "\t\t\twidth: " << w << "; height: " << 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"; | ||||
|     } | ||||
| 
 | ||||
| @ -61,7 +63,7 @@ namespace domain { | ||||
|     void ui::Ellipse::comdel(std::ostream &buffer, int x, int y) { | ||||
|         buffer << "\t\tellipse {\n"; | ||||
|         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; | ||||
|         buffer << "\t\t\tw: " << w << "; h: " << h << ";\n"; | ||||
|         buffer << "\t\t\twidth: " << w << "; height: " << h << ";\n"; | ||||
|         buffer << "\t\t}\n\n"; | ||||
|     } | ||||
| 
 | ||||
| @ -73,10 +75,12 @@ namespace domain { | ||||
|     } | ||||
| 
 | ||||
|     void ui::Line::comdel(std::ostream &buffer, int x, int y) { | ||||
|         buffer << "\t\tline {\n"; | ||||
|         buffer << "\t\t\tx1: " << (x1 + x) << "; y1: " << (y1 + y) << ";\n"; | ||||
|         buffer << "\t\t\tx2: " << (x2 + x) << "; y2: " << (y2 + y) << ";\n"; | ||||
|         buffer << "\t\t}\n\n"; | ||||
|         buffer << "\t\tpath {\n"; | ||||
|         buffer << "\t\t\tx:0; y:0;\n"; | ||||
|         buffer << "\t\t\tpoints: ("; | ||||
|         buffer << "(" << (x1 + x) << ", " << (y1 + y) << "),"; | ||||
|         buffer << "(" << (x2 - x1) << "," << (y2 - y1) << "));\n"; | ||||
|         buffer << "\t\t}" << std::endl; | ||||
|     } | ||||
| 
 | ||||
|     void ui::Bus::render(QGraphicsItemGroup *group, int size) { | ||||
| @ -104,10 +108,12 @@ namespace domain { | ||||
|         buffer << "\t\trectangle {\n"; | ||||
|         buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; | ||||
|         if (orientation == HORIZONTAL) { | ||||
|             buffer << "\t\t\tw: " << size << "; h: " << h << ";\n"; | ||||
|             buffer << "\t\t\twidth: " << size << "; height: " << h << ";\n"; | ||||
|         } else { | ||||
|             buffer << "\t\t\tw: " << w << "; h: " << size << ";\n"; | ||||
|             buffer << "\t\t\twidth: " << w << "; height: " << 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"; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| #include "library.h" | ||||
| #include <stdexcept> | ||||
| 
 | ||||
| namespace domain { | ||||
| 
 | ||||
| @ -51,7 +52,7 @@ namespace domain { | ||||
|     } | ||||
| 
 | ||||
|     bool Library::hasComponent(std::string name) { | ||||
|         for (uint i = 0; i < components.size(); i++) { | ||||
|         for (unsigned int i = 0; i < components.size(); i++) { | ||||
|             if (components[i].getName() == name) { | ||||
|                 return true; | ||||
|             } | ||||
| @ -60,7 +61,7 @@ namespace domain { | ||||
|     } | ||||
| 
 | ||||
|     bool Library::hasBus(std::string name) { | ||||
|         for (uint i = 0; i < buses.size(); i++) { | ||||
|         for (unsigned int i = 0; i < buses.size(); i++) { | ||||
|             if (buses[i].getName() == name) { | ||||
|                 return true; | ||||
|             } | ||||
| @ -70,30 +71,30 @@ namespace domain { | ||||
| 
 | ||||
| 
 | ||||
|     AddressSpace &Library::getAddressSpace(std::string addressSpace) { | ||||
|         for (uint i = 0; i < addressSpaces.size(); i++) { | ||||
|         for (unsigned int i = 0; i < addressSpaces.size(); i++) { | ||||
|             if (addressSpaces[i].getName() == addressSpace) { | ||||
|                 return addressSpaces[i]; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no address space with name '" + addressSpace + "'"); | ||||
|     } | ||||
| 
 | ||||
|     Component &Library::getComponent(std::string component) { | ||||
|         for (uint i = 0; i < components.size(); i++) { | ||||
|         for (unsigned int i = 0; i < components.size(); i++) { | ||||
|             if (components[i].getName() == component) { | ||||
|                 return components[i]; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no component with name '" + component + "'"); | ||||
|     } | ||||
| 
 | ||||
|     Bus &Library::getBus(std::string bus) { | ||||
|         for (uint i = 0; i < buses.size(); i++) { | ||||
|         for (unsigned int i = 0; i < buses.size(); i++) { | ||||
|             if (buses[i].getName() == bus) { | ||||
|                 return buses[i]; | ||||
|             } | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("no bus with name '" + bus + "'"); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| @ -102,7 +103,7 @@ namespace domain { | ||||
|     } | ||||
| 
 | ||||
|     std::optional<Connection> Library::getConnection(ConnectionComponent component, std::string bus) { | ||||
|         for (uint i = 0; i < connections.size(); i++) { | ||||
|         for (unsigned int i = 0; i < connections.size(); i++) { | ||||
|             if (connections[i].isConnecting(component, bus)) { | ||||
|                 return connections[i]; | ||||
|             } | ||||
| @ -116,7 +117,7 @@ namespace domain { | ||||
| 
 | ||||
|     std::optional<Connection> | ||||
|     Library::getConnection(ConnectionComponent component, std::string bus, ConnectionComponent secondComponent) { | ||||
|         for (uint i = 0; i < connections.size(); i++) { | ||||
|         for (unsigned int i = 0; i < connections.size(); i++) { | ||||
|             if (connections[i].isConnecting(component, bus, secondComponent)) { | ||||
|                 return connections[i]; | ||||
|             } | ||||
|  | ||||
| @ -882,7 +882,7 @@ namespace domain { | ||||
|             if (validator->getName() == function) { | ||||
|                 if (validator->getSignature().size() == node.params.size()) { | ||||
|                     std::vector<Value> params; | ||||
|                     for (uint j = 0; j < validator->getSignature().size(); j++) { | ||||
|                     for (unsigned int j = 0; j < validator->getSignature().size(); j++) { | ||||
|                         bool exists = false; | ||||
|                         auto type = toType(node.params[j]); | ||||
|                         if (type.getType() == Value::UNDEFINED) { | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| #include "value.h" | ||||
| 
 | ||||
| #include <string> | ||||
| #include <stdexcept> | ||||
| 
 | ||||
| namespace domain { | ||||
| 
 | ||||
| @ -44,32 +45,58 @@ namespace domain { | ||||
|         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() { | ||||
|         if (isType(Value::INT)) { | ||||
|             return intValue; | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("expected 'int' but value contains '" + getTypename() + "'"); | ||||
|     } | ||||
| 
 | ||||
|     std::string Value::asString() { | ||||
|         if (isType(Value::STRING)) { | ||||
|             return stringValue; | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("expected 'string' but value contains '" + getTypename() + "'"); | ||||
|     } | ||||
| 
 | ||||
|     bool Value::asBool() { | ||||
|         if (isType(Value::BOOL)) { | ||||
|             return boolValue; | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("expected 'bool' but value contains '" + getTypename() + "'"); | ||||
|     } | ||||
| 
 | ||||
|     AddressSpace Value::asAddressSpace() { | ||||
|         if (isType(Value::ADDRESS_SPACE)) { | ||||
|             return *addressSpace; | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("expected 'address space' but value contains '" + getTypename() + "'"); | ||||
|     } | ||||
| 
 | ||||
|     std::string Value::asReference() { | ||||
| @ -77,7 +104,7 @@ namespace domain { | ||||
|             isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) { | ||||
|             return reference; | ||||
|         } | ||||
|         throw std::exception(); | ||||
|         throw std::runtime_error("expected 'reference' but value contains '" + getTypename() + "'"); | ||||
|     } | ||||
| 
 | ||||
|     std::optional<std::string> Value::asMemoryReference() { | ||||
| @ -93,7 +120,7 @@ namespace domain { | ||||
|         if (isType(Value::INT)) { | ||||
|             this->intValue = value; | ||||
|         } else { | ||||
|             throw std::exception(); | ||||
|             throw std::runtime_error("expected to set 'int' but value contains '" + getTypename() + "'"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -101,7 +128,7 @@ namespace domain { | ||||
|         if (isType(Value::STRING)) { | ||||
|             this->stringValue = value; | ||||
|         } else { | ||||
|             throw std::exception(); | ||||
|             throw std::runtime_error("expected to set 'string' but value contains '" + getTypename() + "'"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -109,7 +136,7 @@ namespace domain { | ||||
|         if (isType(Value::BOOL)) { | ||||
|             this->boolValue = value; | ||||
|         } else { | ||||
|             throw std::exception(); | ||||
|             throw std::runtime_error("expected to set 'bool' but value contains '" + getTypename() + "'"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -117,7 +144,7 @@ namespace domain { | ||||
|         if (isType(Value::WIRE_REFERENCE)) { | ||||
|             this->reference = value; | ||||
|         } else { | ||||
|             throw std::exception(); | ||||
|             throw std::runtime_error("expected to set 'wire' but value contains '" + getTypename() + "'"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -191,7 +218,7 @@ namespace domain { | ||||
|                     return "null"; | ||||
|                 } | ||||
|             default: | ||||
|                 throw std::exception(); | ||||
|                 throw std::runtime_error("unknown type couldn't stringify '" + getTypename() + "'"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -46,6 +46,7 @@ namespace domain { | ||||
|         bool equals(Value value); | ||||
| 
 | ||||
|         std::string string(); | ||||
|         std::string getTypename(); | ||||
| 
 | ||||
|         ValueType getType(); | ||||
| 
 | ||||
|  | ||||
| @ -408,7 +408,7 @@ struct WireNode : public AstNode { | ||||
|     bool hidden = false; | ||||
| 
 | ||||
|     /** If wire isn't connected to anything it is replaced with terminate with terminateWith value */ | ||||
|     bool hasTerminateWith; | ||||
|     bool hasTerminateWith = false; | ||||
|     ValueNode terminateWith; | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -74,7 +74,7 @@ PError ComdelParser::unexpected() { | ||||
|     } else { | ||||
|         ss << ": "; | ||||
|     } | ||||
|     uint token_counter = 0; | ||||
|     unsigned int token_counter = 0; | ||||
|     for (auto &type: expectedTokens) { | ||||
|         if (type == TokenType::IDENTIFIER || | ||||
|             type == TokenType::NUMBER || | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
| @info "Primjer ARM biblioteke" | ||||
| @directory "." | ||||
| @header ` | ||||
| \\ Version 0.0.1 | ||||
| // Version 0.0.1 | ||||
| set load_performs_init; | ||||
| ` | ||||
| @componentHeader "    clock 100 MHz;" | ||||
| @ -611,7 +611,7 @@ set load_performs_init; | ||||
|             pin { | ||||
|                 x: 15; y: 30; w: 10; h: 10; | ||||
|                 type: "in"; | ||||
|                 orientation: "top"; | ||||
|                 orientation: "bottom"; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @ -729,8 +729,9 @@ set load_performs_init; | ||||
|         irq wired_or, fiq wired_or, nmreq wired_and, | ||||
|         // hsel_* | ||||
|         sel_mem hidden, sel_bridge, sel_dmac | ||||
|         sel_mem hidden, sel_bridge, sel_dmac | ||||
|         // dmac | ||||
|         busreq, grant | ||||
|         busreq terminate_with 0, grant | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1,67 +0,0 @@ | ||||
| 
 | ||||
| \\ 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 { | ||||
| 	@instance arm ARM7tdmi { | ||||
| 		@position (-473, -283) | ||||
| 		@position (1179, 326) | ||||
| 		@attribute _memory memorija | ||||
| 	} | ||||
| 
 | ||||
| 	@instance memorija Memory64KiB { | ||||
| 		@position (-433, 6) | ||||
| 		@position (1148, 521) | ||||
| 	} | ||||
| 
 | ||||
| 	@instance decoder Decoder { | ||||
| 		@position (-537, -202) | ||||
| 		@position (1070, 381) | ||||
| 	} | ||||
| 
 | ||||
| 	@instance ahb AHB { | ||||
| 		@position (-514, -86) | ||||
| 		@position (1027, 465) | ||||
| 		@size 249 | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										67
									
								
								examples/arm/minimum.system
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								examples/arm/minimum.system
									
									
									
									
									
										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 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