Compare commits
2 Commits
6ed60a2c26
...
9c332ac3e7
Author | SHA1 | Date |
---|---|---|
Borna Rajković | 9c332ac3e7 | |
Borna Rajković | edfd7fdf37 |
|
@ -5,6 +5,7 @@
|
||||||
#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 {
|
||||||
|
|
||||||
|
@ -91,7 +92,7 @@ namespace display {
|
||||||
value = domain::Value::fromInt(parseInt(string.toStdString()));
|
value = domain::Value::fromInt(parseInt(string.toStdString()));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw std::exception();
|
throw std::runtime_error("invalid value type in text change");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ namespace domain {
|
||||||
std::string name;
|
std::string name;
|
||||||
WireType type;
|
WireType type;
|
||||||
int width;
|
int width;
|
||||||
bool hidden;
|
bool hidden = false;
|
||||||
bool hasTerminate;
|
bool hasTerminate = false;
|
||||||
Value terminateWith;
|
Value terminateWith;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -128,8 +128,18 @@ 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 << "; " <<
|
|
||||||
"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) {
|
void generateBus(BusInstance *bus, ostream &buffer) {
|
||||||
|
@ -149,9 +159,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.isHidden() ? "--" : "") + wire.getName();
|
auto name = wire.getName();
|
||||||
if (usedNames.count(name) > 0) {
|
if (usedNames.count(name) > 0) {
|
||||||
name = (wire.isHidden() ? "--" : "") + bus->name + "__" + wire.getName();
|
name = 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));
|
||||||
|
@ -182,7 +192,11 @@ namespace domain {
|
||||||
if (wire.getWidth() != 1) {
|
if (wire.getWidth() != 1) {
|
||||||
buffer << "<" << wire.getWidth() << ">";
|
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) {
|
std::set<std::string> createImports(Schema *schema) {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "component.h"
|
#include "component.h"
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace domain {
|
namespace domain {
|
||||||
|
|
||||||
|
@ -57,7 +58,7 @@ namespace domain {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("no pin with name '" + pin + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Component::hasPin(std::string name) {
|
bool Component::hasPin(std::string name) {
|
||||||
|
@ -79,7 +80,7 @@ namespace domain {
|
||||||
return attr;
|
return attr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("no attribute with name '" + attribute + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Component::hasAttribute(std::string name, Value::ValueType type) {
|
bool Component::hasAttribute(std::string name, Value::ValueType type) {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace domain {
|
namespace domain {
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ namespace domain {
|
||||||
return attributes[i];
|
return attributes[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("no attribute with name '" + name + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Connection::hasAttribute(std::string name) {
|
bool Connection::hasAttribute(std::string name) {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "connection_instance.h"
|
#include "connection_instance.h"
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace domain {
|
namespace domain {
|
||||||
|
|
||||||
|
@ -13,7 +14,7 @@ namespace domain {
|
||||||
return attr;
|
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) {
|
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\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";
|
buffer << "\t\t}\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +63,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\tw: " << w << "; h: " << h << ";\n";
|
buffer << "\t\t\twidth: " << w << "; height: " << h << ";\n";
|
||||||
buffer << "\t\t}\n\n";
|
buffer << "\t\t}\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,10 +75,12 @@ 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\tline {\n";
|
buffer << "\t\tpath {\n";
|
||||||
buffer << "\t\t\tx1: " << (x1 + x) << "; y1: " << (y1 + y) << ";\n";
|
buffer << "\t\t\tx:0; y:0;\n";
|
||||||
buffer << "\t\t\tx2: " << (x2 + x) << "; y2: " << (y2 + y) << ";\n";
|
buffer << "\t\t\tpoints: (";
|
||||||
buffer << "\t\t}\n\n";
|
buffer << "(" << (x1 + x) << ", " << (y1 + y) << "),";
|
||||||
|
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) {
|
||||||
|
@ -104,10 +108,12 @@ 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\tw: " << size << "; h: " << h << ";\n";
|
buffer << "\t\t\twidth: " << size << "; height: " << h << ";\n";
|
||||||
} else {
|
} 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";
|
buffer << "\t\t}\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace domain {
|
namespace domain {
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ namespace domain {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Library::hasComponent(std::string name) {
|
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) {
|
if (components[i].getName() == name) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -60,7 +61,7 @@ namespace domain {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Library::hasBus(std::string name) {
|
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) {
|
if (buses[i].getName() == name) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -70,30 +71,30 @@ namespace domain {
|
||||||
|
|
||||||
|
|
||||||
AddressSpace &Library::getAddressSpace(std::string addressSpace) {
|
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) {
|
if (addressSpaces[i].getName() == addressSpace) {
|
||||||
return addressSpaces[i];
|
return addressSpaces[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("no address space with name '" + addressSpace + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
Component &Library::getComponent(std::string component) {
|
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) {
|
if (components[i].getName() == component) {
|
||||||
return components[i];
|
return components[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("no component with name '" + component + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
Bus &Library::getBus(std::string bus) {
|
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) {
|
if (buses[i].getName() == bus) {
|
||||||
return buses[i];
|
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) {
|
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)) {
|
if (connections[i].isConnecting(component, bus)) {
|
||||||
return connections[i];
|
return connections[i];
|
||||||
}
|
}
|
||||||
|
@ -116,7 +117,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 (uint i = 0; i < connections.size(); i++) {
|
for (unsigned int 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 (uint j = 0; j < validator->getSignature().size(); j++) {
|
for (unsigned int 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,6 +1,7 @@
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace domain {
|
namespace domain {
|
||||||
|
|
||||||
|
@ -44,32 +45,58 @@ 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::exception();
|
throw std::runtime_error("expected 'int' but value contains '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Value::asString() {
|
std::string Value::asString() {
|
||||||
if (isType(Value::STRING)) {
|
if (isType(Value::STRING)) {
|
||||||
return stringValue;
|
return stringValue;
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("expected 'string' but value contains '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Value::asBool() {
|
bool Value::asBool() {
|
||||||
if (isType(Value::BOOL)) {
|
if (isType(Value::BOOL)) {
|
||||||
return boolValue;
|
return boolValue;
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("expected 'bool' but value contains '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
AddressSpace Value::asAddressSpace() {
|
AddressSpace Value::asAddressSpace() {
|
||||||
if (isType(Value::ADDRESS_SPACE)) {
|
if (isType(Value::ADDRESS_SPACE)) {
|
||||||
return *addressSpace;
|
return *addressSpace;
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("expected 'address space' but value contains '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Value::asReference() {
|
std::string Value::asReference() {
|
||||||
|
@ -77,7 +104,7 @@ namespace domain {
|
||||||
isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) {
|
isType(Value::ATTRIBUTE_REFERENCE) || isType(Value::UNDEFINED)) {
|
||||||
return reference;
|
return reference;
|
||||||
}
|
}
|
||||||
throw std::exception();
|
throw std::runtime_error("expected 'reference' but value contains '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> Value::asMemoryReference() {
|
std::optional<std::string> Value::asMemoryReference() {
|
||||||
|
@ -93,7 +120,7 @@ namespace domain {
|
||||||
if (isType(Value::INT)) {
|
if (isType(Value::INT)) {
|
||||||
this->intValue = value;
|
this->intValue = value;
|
||||||
} else {
|
} 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)) {
|
if (isType(Value::STRING)) {
|
||||||
this->stringValue = value;
|
this->stringValue = value;
|
||||||
} else {
|
} 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)) {
|
if (isType(Value::BOOL)) {
|
||||||
this->boolValue = value;
|
this->boolValue = value;
|
||||||
} else {
|
} 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)) {
|
if (isType(Value::WIRE_REFERENCE)) {
|
||||||
this->reference = value;
|
this->reference = value;
|
||||||
} else {
|
} else {
|
||||||
throw std::exception();
|
throw std::runtime_error("expected to set 'wire' but value contains '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +218,7 @@ namespace domain {
|
||||||
return "null";
|
return "null";
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw std::exception();
|
throw std::runtime_error("unknown type couldn't stringify '" + getTypename() + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ 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;
|
bool hasTerminateWith = false;
|
||||||
ValueNode terminateWith;
|
ValueNode terminateWith;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ PError ComdelParser::unexpected() {
|
||||||
} else {
|
} else {
|
||||||
ss << ": ";
|
ss << ": ";
|
||||||
}
|
}
|
||||||
uint token_counter = 0;
|
unsigned int 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 ||
|
||||||
|
|
|
@ -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 100MHz;"
|
@componentHeader " clock 100 MHz;"
|
||||||
|
|
||||||
// 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: "top";
|
orientation: "bottom";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -729,8 +729,9 @@ 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, 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 {
|
@schema {
|
||||||
@instance arm ARM7tdmi {
|
@instance arm ARM7tdmi {
|
||||||
@position (-473, -283)
|
@position (1179, 326)
|
||||||
@attribute _memory memorija
|
@attribute _memory memorija
|
||||||
}
|
}
|
||||||
|
|
||||||
@instance memorija Memory64KiB {
|
@instance memorija Memory64KiB {
|
||||||
@position (-433, 6)
|
@position (1148, 521)
|
||||||
}
|
}
|
||||||
|
|
||||||
@instance decoder Decoder {
|
@instance decoder Decoder {
|
||||||
@position (-537, -202)
|
@position (1070, 381)
|
||||||
}
|
}
|
||||||
|
|
||||||
@instance ahb AHB {
|
@instance ahb AHB {
|
||||||
@position (-514, -86)
|
@position (1027, 465)
|
||||||
@size 249
|
@size 249
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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…
Reference in New Issue