Fixed schema generation
This commit is contained in:
parent
9b7ede933a
commit
1ec8b10ef5
|
@ -3,6 +3,7 @@
|
||||||
#include "name_dialog.h"
|
#include "name_dialog.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "application.h"
|
#include "application.h"
|
||||||
|
#include "single_automatic_dialog.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QLine>
|
#include <QLine>
|
||||||
|
@ -225,6 +226,8 @@ namespace display {
|
||||||
connection), component(component), bus(bus) {
|
connection), component(component), bus(bus) {
|
||||||
updateConnection();
|
updateConnection();
|
||||||
|
|
||||||
|
setCursor(Qt::CrossCursor);
|
||||||
|
|
||||||
setHandlesChildEvents(false);
|
setHandlesChildEvents(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,23 +252,35 @@ namespace display {
|
||||||
QMenu menu;
|
QMenu menu;
|
||||||
menu.addAction("Ukloni poveznicu", [this]() {});
|
menu.addAction("Ukloni poveznicu", [this]() {});
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
for (int i = 0; i < this->connection->attributes.size(); i++) {
|
|
||||||
auto *attr = &this->connection->attributes[i];
|
|
||||||
bool enabled = attr->attribute.getPopup().has_value();
|
|
||||||
|
|
||||||
auto action = menu.addAction(QString::fromStdString("Izmjeni " + attr->name),
|
if(connection->bus->bus.getType() == domain::Bus::SINGLE_AUTOMATIC) {
|
||||||
[attr]() {
|
auto &attributes = this->connection->attributes;
|
||||||
auto dialog = new AttributeDialog(attr);
|
menu.addAction(QString::fromStdString("Izmjeni poveznicu"),
|
||||||
dialog->exec();
|
[&attributes]() {
|
||||||
});
|
auto dialog = new display::SingleAutomaticDialog(attributes);
|
||||||
action->setEnabled(enabled);
|
dialog->exec();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < this->connection->attributes.size(); i++) {
|
||||||
|
auto *attr = &this->connection->attributes[i];
|
||||||
|
bool enabled = attr->attribute.getPopup().has_value();
|
||||||
|
|
||||||
|
auto action = menu.addAction(QString::fromStdString("Izmjeni " + attr->name),
|
||||||
|
[attr]() {
|
||||||
|
auto dialog = new AttributeDialog(attr);
|
||||||
|
dialog->exec();
|
||||||
|
});
|
||||||
|
action->setEnabled(enabled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.exec(event->screenPos());
|
menu.exec(event->screenPos());
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectConnection::DirectConnection(domain::DirectConnectionInstance *connection, ComponentGroup *first,
|
DirectConnection::DirectConnection(domain::DirectConnectionInstance *connection, ComponentGroup *first,
|
||||||
ComponentGroup *second): connection(connection), first(first), second(second) {
|
ComponentGroup *second): connection(connection), first(first), second(second) {
|
||||||
updateConnection();
|
updateConnection();
|
||||||
|
setCursor(Qt::CrossCursor);
|
||||||
setHandlesChildEvents(false);
|
setHandlesChildEvents(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -285,7 +285,11 @@ namespace domain {
|
||||||
} else {
|
} else {
|
||||||
// if no connection exists than defaults must exist
|
// if no connection exists than defaults must exist
|
||||||
for (auto &wire: *pin.getWires()) {
|
for (auto &wire: *pin.getWires()) {
|
||||||
tempOutput << wire.stringify() << ", ";
|
if(wire.isType(Value::NIL)) {
|
||||||
|
tempOutput << "*, ";
|
||||||
|
} else {
|
||||||
|
tempOutput << wire.stringify() << ", ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -311,22 +315,26 @@ namespace domain {
|
||||||
std::vector<Value> defaults;
|
std::vector<Value> defaults;
|
||||||
if (connection->instance->name == name && connection->connection.getComponent().pin == pin) {
|
if (connection->instance->name == name && connection->connection.getComponent().pin == pin) {
|
||||||
wires = connection->connection.getWires();
|
wires = connection->connection.getWires();
|
||||||
selected = connection->attributes[0].value.asReference();
|
selected = connection->attributes[0].value.asString();
|
||||||
defaults = *connection->instance->component.getPin(pin).getWires();
|
defaults = *connection->instance->component.getPin(pin).getWires();
|
||||||
} else {
|
} else {
|
||||||
wires = *connection->connection.getSecondWires();
|
wires = *connection->connection.getSecondWires();
|
||||||
selected = connection->attributes[1].value.asReference();
|
selected = connection->attributes[1].value.asString();
|
||||||
defaults = *connection->secondInstance->component.getPin(pin).getWires();
|
defaults = *connection->secondInstance->component.getPin(pin).getWires();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < wires.size(); i++) {
|
for (int i = 0; i < wires.size(); i++) {
|
||||||
if (wires[i].isType(Value::STRING)) {
|
if (wires[i].isType(Value::STRING)) {
|
||||||
if (wires[i].asString() == selected) {
|
if (wires[i].asString() == selected) {
|
||||||
buffer << wireNames[connection->bus->name + "." + connection->bus->bus.getWires()[0].getName()]
|
auto wireName = connection->bus->name + "." + connection->bus->bus.getWires()[0].getName();
|
||||||
<< ", ";
|
buffer << wireNames[wireName] << ", ";
|
||||||
|
} else if(defaults[i].isType(Value::NIL)) {
|
||||||
|
buffer << "*, ";
|
||||||
} else {
|
} else {
|
||||||
buffer << defaults[i].stringify();
|
buffer << defaults[i].stringify() << ", ";
|
||||||
}
|
}
|
||||||
|
} else if(defaults[i].isType(Value::NIL)) {
|
||||||
|
buffer << "*, ";
|
||||||
} else {
|
} else {
|
||||||
buffer << wires[i].stringify() << ", ";
|
buffer << wires[i].stringify() << ", ";
|
||||||
}
|
}
|
||||||
|
|
|
@ -736,7 +736,7 @@ namespace domain {
|
||||||
|
|
||||||
std::optional<Popup> popup;
|
std::optional<Popup> popup;
|
||||||
if (node.popup) {
|
if (node.popup) {
|
||||||
popup = loadPopup(*node.popup, name, value.getType());
|
popup = loadPopup(*node.popup, name, toType(node.type));
|
||||||
}
|
}
|
||||||
|
|
||||||
pop();
|
pop();
|
||||||
|
@ -958,7 +958,7 @@ namespace domain {
|
||||||
errors.emplace_back(attr.span, "invalid value");
|
errors.emplace_back(attr.span, "invalid value");
|
||||||
}
|
}
|
||||||
|
|
||||||
attributes.emplace_back(attribute.getName(), toType(attr.value), attribute);
|
attributes.emplace_back(attribute.getName(), value, attribute);
|
||||||
} else {
|
} else {
|
||||||
errors.emplace_back(attr.name.span, "unknown attribute");
|
errors.emplace_back(attr.name.span, "unknown attribute");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
// Version 0.0.1
|
||||||
|
#include "libraries\frisc\vjezba1\FRISC.cdl"
|
||||||
|
#include "libraries\frisc\vjezba1\dma.cdl"
|
||||||
|
#include "libraries\frisc\vjezba1\memory.cdl"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
component System
|
||||||
|
{
|
||||||
|
clock 100MHz;
|
||||||
|
//glavnaSabirnica
|
||||||
|
wire<32> ADR;
|
||||||
|
wire<32> DATA;
|
||||||
|
wire READ;
|
||||||
|
wire WRITE;
|
||||||
|
wired_and WAIT;
|
||||||
|
wired_and INT0;
|
||||||
|
wired_and INT1;
|
||||||
|
wired_and INT2;
|
||||||
|
wired_and INT3;
|
||||||
|
wire<3> SIZE;
|
||||||
|
wire --IACK;
|
||||||
|
wire --BREQ;
|
||||||
|
wire --BACK;
|
||||||
|
|
||||||
|
|
||||||
|
//PIOSabirnica
|
||||||
|
wire<8> PIO_DATA;
|
||||||
|
wire READY;
|
||||||
|
wire STROBE;
|
||||||
|
|
||||||
|
|
||||||
|
//directRam
|
||||||
|
wire INT;
|
||||||
|
|
||||||
|
|
||||||
|
// components --------------------------------------------
|
||||||
|
subcomponent Memorija memorija<false, 1, 1024, 8, 0>(ADR, DATA, READ, WRITE, SIZE, WAIT, INT, *, *, *);
|
||||||
|
subcomponent FRISC procesor(ADR, DATA, READ, WRITE, SIZE, WAIT, INT0, INT1, INT2, INT3, --IACK, 1, *, INT, *, *, *);
|
||||||
|
subcomponent DMA dma<1024>(ADR, DATA, READ, WRITE, SIZE, WAIT, INT0, --BREQ, --BACK, 0, 0, *, *);
|
||||||
|
|
||||||
|
display {
|
||||||
|
component { x: -104; y: -102; ref: "procesor"; }
|
||||||
|
component { x: 39; y: 199; ref: "memorija"; }
|
||||||
|
component { x: -352; y: 13; ref: "dma"; }
|
||||||
|
|
||||||
|
// glavnaSabirnica bus
|
||||||
|
|
||||||
|
rectangle {
|
||||||
|
x: -106; y: 80;
|
||||||
|
w: 100; h: 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// PIOSabirnica bus
|
||||||
|
|
||||||
|
|
||||||
|
// directRam bus
|
||||||
|
|
||||||
|
|
||||||
|
line {x1:-54; y1:14; x2:-55; y2:90;}
|
||||||
|
line {x1:89; y1:183; x2:-55; y2:90;}
|
||||||
|
line {x1:-244; y1:79; x2:-55; y2:90;}
|
||||||
|
line {x1:23; y1:227; x2:12; y2:-52;}
|
||||||
|
}
|
||||||
|
}
|
|
@ -72,6 +72,7 @@
|
||||||
orientation: "right";
|
orientation: "right";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@wires{null, null, null, null}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,6 +215,7 @@
|
||||||
orientation: "left";
|
orientation: "left";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@wires{null, null, null, null}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +282,7 @@
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
pin {
|
pin {
|
||||||
x: 100; y: 50; w: 16; h: 16;
|
x: 100; y: 30; w: 16; h: 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -290,7 +292,7 @@
|
||||||
@connection optional("COMDEL se ne može stvoriti. DMA nije spojen na nesto!")
|
@connection optional("COMDEL se ne može stvoriti. DMA nije spojen na nesto!")
|
||||||
@display {
|
@display {
|
||||||
pin {
|
pin {
|
||||||
x: 0; y: 0; w: 0; h: 0;
|
x: 100; y: 7; w: 16; h: 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@wires { 0, 0, null, null}
|
@wires { 0, 0, null, null}
|
||||||
|
@ -374,7 +376,7 @@
|
||||||
@wires{ADR, DATA, READ, WRITE, SIZE, WAIT, interupt, BREQ, BACK}
|
@wires{ADR, DATA, READ, WRITE, SIZE, WAIT, interupt, BREQ, BACK}
|
||||||
}
|
}
|
||||||
|
|
||||||
@connection (DMA.glavniPin, PIOSabirnica, FRISC.glavniPin) {
|
@connection (DMA.dodatnaPoveznica, PIOSabirnica, FRISC.glavniPin) {
|
||||||
@wires{PIO_DATA, READY, STROBE}
|
@wires{PIO_DATA, READY, STROBE}
|
||||||
@wires{PIO_DATA, READY, STROBE}
|
@wires{PIO_DATA, READY, STROBE}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
@source "/home/bbr/Documents/Personal/FER/schema_editor/examples/simplified FRISC model/frisc_library.csl"
|
||||||
|
|
||||||
|
@schema {
|
||||||
|
@instance procesor FRISC {
|
||||||
|
@position (-162, -117)
|
||||||
|
@attribute _memory null
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance dma DMA {
|
||||||
|
@position (-393, -26)
|
||||||
|
@attribute pocetnaAdresa 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance glavnaSabirnica glavnaSabirnica {
|
||||||
|
@position (-155, 49)
|
||||||
|
@size 100
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance PIOSabirnica PIOSabirnica {
|
||||||
|
@position (0, 0)
|
||||||
|
@size 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance PIOSabirnica PIOSabirnica {
|
||||||
|
@position (0, 0)
|
||||||
|
@size 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@connection (dma.glavniPin, PIOSabirnica, procesor.glavniPin) {
|
||||||
|
}
|
||||||
|
@connection (dma.glavniPin, glavnaSabirnica) {
|
||||||
|
@attribute interupt 1
|
||||||
|
}
|
||||||
|
@connection (dma.glavniPin, PIOSabirnica, procesor.glavniPin) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
@source "/home/bbr/Documents/Personal/FER/schema_editor/examples/simplified FRISC model/frisc_library.csl"
|
||||||
|
|
||||||
|
@schema {
|
||||||
|
@instance procesor FRISC {
|
||||||
|
@position (-104, -102)
|
||||||
|
@attribute _memory null
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance memorija Memorija {
|
||||||
|
@position (39, 199)
|
||||||
|
@attribute sinkroniziran false
|
||||||
|
@attribute brzina 1
|
||||||
|
@attribute kapacitet 1024
|
||||||
|
@attribute size 8
|
||||||
|
@attribute pocetnaAdresa 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance dma DMA {
|
||||||
|
@position (-352, 13)
|
||||||
|
@attribute pocetnaAdresa 1024
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance glavnaSabirnica glavnaSabirnica {
|
||||||
|
@position (-106, 80)
|
||||||
|
@size 100
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance PIOSabirnica PIOSabirnica {
|
||||||
|
@position (0, 0)
|
||||||
|
@size -1
|
||||||
|
}
|
||||||
|
|
||||||
|
@instance directRam directRam {
|
||||||
|
@position (0, 0)
|
||||||
|
@size -1
|
||||||
|
}
|
||||||
|
|
||||||
|
@connection (procesor.glavniPin, glavnaSabirnica) {
|
||||||
|
}
|
||||||
|
@connection (memorija.glavniPin, glavnaSabirnica) {
|
||||||
|
}
|
||||||
|
@connection (dma.glavniPin, glavnaSabirnica) {
|
||||||
|
@attribute interupt INT0
|
||||||
|
}
|
||||||
|
@connection (memorija.memDirect, directRam, procesor.memDirect) {
|
||||||
|
@attribute procConn "INT"
|
||||||
|
@attribute memConn "INT"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue