diff --git a/docs/ComdelSchemaLanguage.docx b/docs/ComdelSchemaLanguage.docx new file mode 100644 index 0000000..63e214a Binary files /dev/null and b/docs/ComdelSchemaLanguage.docx differ diff --git a/examples/simplified FRISC model/frisc_library.csl b/examples/simplified FRISC model/frisc_library.csl new file mode 100644 index 0000000..f7205fc --- /dev/null +++ b/examples/simplified FRISC model/frisc_library.csl @@ -0,0 +1,310 @@ +@name "Jednostavni FRISC" +@info "Ova biblioteka omogućuje kreiranje sustava s procesorom FRISC s pojednostavljenim načinom spajanja bez potrebe da se spajaju pojedine linije sabirnice." +@directory "libraries\frisc\vjezba1" + +@address glavniAS(0,0xFFFFFFFF) +@address pomocniAS(0xFFFF0000,0xFFFFFFFF) + +@messages { + Ok: "OK"; + Yes: "Da"; + No: "Ne"; + Cancel: "Otkaži"; + noneBusLine: "nespojen"; + noneValue: "nema vrijednosti"; + generalPinNotConnected: "Opći pin nije spojen niti na jednu sabirnicu"; +} + +@component FRISC processor { + @instanceName "procesor" + @tooltip "procesor FRISC, mora postojati jedan" + @count (1, 1) + @source "FRISC.cdl" + @display { + /* + rectangle { + x:0; y:0; + mainColor: black; + width: 100; + height: 100; + lineThickness: 2; + } + rectangle { + x:2; y:2; + mainColor: blue; + width: 96; + height: 96; + lineThickness: 1; + } + text { + x: 2; y:2; + mainColor: black; + text: black; + } + text { + x: 20; y:20; + text: instanceName; + }*/ + rect { + x: 0; y:0; w:100; h:100; + } + } + @pin glavniPin inOut { + @tooltip "pin za spajanje na glavnu sabirnicu" + @connection check_only("COMDEL se ne može stvoriti. FRISC nije spojen na sabirnicu") + @display { + /* + pin { + x: 100; y: 50; + fillColor: white; + lineColor: red; + fillColorConnected: white; + lineColorConnected: black; + side: left; + size: 20; + }*/ + pin { + x: 42; y: 100; w: 16; h:16; + } + } + } +} + +@component Memorija memory { + @instanceName "memorija" + @tooltip "Memorijska komponenta, mora postojati barem jedna" + @count (1,1000) + @source "memory.cdl" + @attribute kapacitet int default 65536 { + @popup automatic { + @title "Kapacitet memorije" + @text "Zadajte kapacitet memorije u bajtovima" + @rule { + if(!divisible(kapacitet,2)) { + error("Kapacitet memorije nije djeljiv s potencijom broja 2") + } + } + @rule { + if(less_then(kapacitet,1024)) { + warning("Kapacitet memorije je premali (minimum je 1024)") + } else if (greater_then(kapacitet, 1048576)) { + error("Kapacitet memorije je {kapacitet} a mora biti manji od 1048576 (1MB)") + } else if (greater_then(kapacitet, 65536)) { + warning("Želite li zaista memoriju veću od 65536 bajtova?") + } + } + } + } + @attribute size int default 8 + @attribute pocetnaAdresa int default 0 { + @popup automatic { + @title "Početna adresa memorije" + @text "Zadajte početnu adresu memorije" + @rule { + if(!contains_address(glavniAS, pocetnaAdresa)) { + error("Početna adresa memorije je izvan 32 bitnog adresnog prostora") + } + } + } + } + + @rule { + if(!contains(glavniAS, pocetnaAdresa, kapacitet)) { + error("Završna adresa memorije je izvan 32 bitnog adresnog prostora") + } + } + @rule { + if(!unique(glavniAS, pocetnaAdresa, kapacitet)) { + error("Adrese memorije nisu jedinstvene u adresnom prostoru (preklapaju se s nekom drugom komponentom)") + } + } + @rule { + if(!divisible(pocetnaAdresa, kapacitet)) { + error("Početna adresa memorije mora biti višekratnik kapaciteta memorije") + } + } + + @display { + /* + rectangle { + x:0; y:0; + width: 100; + height: 50; + mainColor: black; + lineThickness: 2; + } + text { + x:20; y:20; + mainColor: black; + text: "Memorija"; + } + */ + rect { + x: 0; y: 0; w: 100; h: 50; + } + } + + @pin glavniPin inOut { + @tooltip "pin za spajanje na glavnu sabirnicu" + @connection check_only("COMDEL se ne može stvoriti. Memorija nije spojena na sabirnicu") + @display { + /* + pin { + x: 100; y: 25; + fillColor: blue; + lineColor: red; + fillColorConnected: white; + lineColorConnected: black; + side: right; + size: 20; + } + */ + pin { + x: 42; y: -16; w: 16; h: 16; + } + } + } +} + +@component DMA { + @instanceName "dma" + @tooltip "DMA-kontroler" + @count (1,1000) + @source "dma.cdl" + @attribute pocetnaAdresa int default 0 { + @popup automatic { + @title "Početna adresa DMA-kontrolera" + @text "Zadajte početnu adresu DMA-kontrolera" + @rule { + if(contains_address(glavniAS, pocetnaAdresa)) { + error("Početna adresa memorije je izvan 32 bitnog adresnog prostora") + } + } + @rule { + if(!contains(glavniAS, pocetnaAdresa, 32)) { + error("Završna adresa memorije je izvan 32 bitnog adresnog prostora") + } + } + @rule { + if(unique(glavniAS, pocetnaAdresa, 32)) { + error("Adrese memorije nisu jedinstvene u adresnom prostoru (preklapaju se s nekom drugom komponentom)") + } + } + } + } + + @display { + /* + rectangle { + x:0; y:0; + width: 100; + height: 100; + mainColor: black; + lineThickness: 1; + } + text { + x:20; y:20; + mainColor: black; + text: "DMA"; + }*/ + rect { + x: 0; y: 0; w: 100; h: 100; + } + } + + @pin glavniPin in { + @tooltip "pin za spajanje na glavnu sabirnicu" + @connection check_only("COMDEL se ne može stvoriti. DMA nije spojena na sabirnicu") + @display { + /* + pin { + x: 100; y: 50; + fillColor: red; + lineColor: black; + fillColorConnected: white; + lineColorConnected: black; + side: left; + size: 20; + } + */ + pin { + x: 100; y: 50; w: 16; h: 16; + } + } + } + + @pin dodatnaPoveznica in { + @tooltip "pin za spajanje na pomocnu sabirnicu" + @connection check_only("COMDEL se ne može stvoriti. DMA nije spojen na nesto!") + @display { + pin { + x: 0; y: 0; w: 0; h: 0; + } + } + @wires { 0, 0, null, null} + } +} + +@bus glavnaSabirnica regular { + @tooltip "sabirnica za spajanje FRISC a s memorijama i UI/jedinicama" + @count (1,1) + @display { + /* + rectangle { + x:0; y: 0; + height: 20; + width: 50; + orientation: horizontal; + lineColor: black; + }*/ + rect { + x:0; y:0; + h: 20; w: 100; + } + } + @wires { + ADR<32>, + DATA<32>, + READ, + WRITE, + WAIT wired_and, + INT0 wired_and, + INT1 wired_and, + INT2 wired_and, + INT3 wired_and, + SIZE<3>, + IACK, + BREQ, + BACK + } +} +@bus PIOSabirnica automatic { + @wires { + PIO_DATA<8>, + READY, + STROBE + } +} + +@connection (FRISC.glavniPin, glavnaSabirnica) { + @wires{ADR, DATA, READ, WRITE, SIZE, WAIT, INT0, INT1, INT2, INT3, IACK, 1, null} +} +@connection (Memorija.glavniPin, glavnaSabirnica) { + @wires{ADR, DATA, READ, WRITE, SIZE, WAIT} +} +@connection (DMA.glavniPin, glavnaSabirnica) { + @attribute interupt wire default INT0 { + @popup automatic { + @title "Povezivanje interupt signala" + @text "Odaberite sabirničku liniju na koju želite spojiti priključak INT od skopa DMA" + @enumerated { + "INT0" = INT0, + "INT1" = INT1, + "INT2" = INT2, + "Hardwire 1" = 1, + "None" = null + } + } + } + @wires{ADR, DATA, READ, WRITE, SIZE, WAIT, interupt, BREQ, BACK} +} \ No newline at end of file diff --git a/examples/simplified FRISC model/schema.csl b/examples/simplified FRISC model/schema.csl new file mode 100644 index 0000000..30f2771 --- /dev/null +++ b/examples/simplified FRISC model/schema.csl @@ -0,0 +1,55 @@ +@source "frisc_library.csl" + +@schema { + @instance proc FRISC { + @position (0, 0) + } + + @instance mem Memorija { + @position (0, 250) + @attribute kapacitet 1024 + @attribute size 8 + @attribute pocetnaAdresa 1023 + } + + @instance bus glavnaSabirnica { + @position (0, 200) + @size 100 + } + + @wire wire_001 { + @position (50, 116) + @display { + /* + line { + color: blue; + points: 100; + }*/ + line { + x1: 0; y1: 0; x2: 0; y2: 84; + } + } + } + + @wire wire_002 { + @position (50, 220) + @display { + /* + line { + color: blue; + points: 100; + }*/ + line { + x1: 0; y1: 0; x2: 0; y2: 14; + } + } + } + + @connection (proc.glavniPin, bus) { + @wire wire_001 + } + + @connection (mem.glavniPin, bus) { + @wire wire_002 + } +} \ No newline at end of file