schema_editor/examples/simplified FRISC model/frisc_library.csl

342 lines
9.2 KiB
Plaintext
Raw Normal View History

2022-04-12 22:25:21 +00:00
@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"
2022-04-12 22:25:21 +00:00
@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 required("COMDEL se ne može stvoriti. FRISC nije spojen na sabirnicu")
2022-04-12 22:25:21 +00:00
@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 required("COMDEL se ne može stvoriti. Memorija nije spojena na sabirnicu")
2022-04-12 22:25:21 +00:00
@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 required("COMDEL se ne može stvoriti. DMA nije spojena na sabirnicu")
2022-04-12 22:25:21 +00:00
@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 optional("COMDEL se ne može stvoriti. DMA nije spojen na nesto!")
2022-04-12 22:25:21 +00:00
@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 hidden,
BREQ hidden,
BACK hidden
2022-04-12 22:25:21 +00:00
}
}
@bus PIOSabirnica automatic {
@wires {
PIO_DATA<8>,
READY,
STROBE
}
}
@bus Test singleAutomatic {
@tooltip "sabirnica za spajanje FRISC a s memorijama i UI/jedinicama"
@count (1,1)
@wires {
CONNECTOR,
}
}
2022-04-12 22:25:21 +00:00
@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}
}
@connection (DMA.glavniPin, PIOSabirnica, FRISC.glavniPin) {
@wires{PIO_DATA, READY, STROBE}
@wires{PIO_DATA, READY, STROBE}
}
@connection (FRISC.glavniPin, Test, Memorija.glavniPin) {
@wires{null, "READY", null}
@wires{"PIO_DATA", null, null}
@attribute dmaPoveznica string default "" {
@popup automatic {
@title "Spoji DMA kraj"
@text "Odaberite poveznicu za dma kraja"
}
}
@attribute mmaPoveznica string default "" {
@popup automatic {
@title "Spoji MMA kraj"
@text "Odaberite poveznicu za mma kraja"
}
}
2022-04-12 22:25:21 +00:00
}