310 lines
8.4 KiB
Plaintext
310 lines
8.4 KiB
Plaintext
|
@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}
|
||
|
}
|