400 lines
11 KiB
Plaintext
400 lines
11 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"
|
|
@header "// Version 0.0.1"
|
|
@componentHeader " clock 100MHz;"
|
|
|
|
@address glavniAS(0,0xFFFFFFFF)
|
|
@address pomocniAS(0xFFFF0000,0xFFFFFFFF)
|
|
|
|
@messages {
|
|
ok: "OK";
|
|
yes: "Da";
|
|
no: "Ne";
|
|
cancel: "Odustani";
|
|
noneBusLine: "nespojen";
|
|
noneValue: "nema vrijednosti";
|
|
}
|
|
|
|
@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 in {
|
|
@tooltip "pin za spajanje na glavnu sabirnicu"
|
|
@connection required("COMDEL se ne može stvoriti. FRISC nije spojen na sabirnicu")
|
|
@display {
|
|
pin {
|
|
x: 42; y: 100; w: 16; h:16;
|
|
type: "in";
|
|
orientation: "bottom";
|
|
}
|
|
}
|
|
}
|
|
|
|
@pin memDirect inOut {
|
|
@tooltip "pin za izravno spajanje na RAM"
|
|
@connection optional("COMDEL se ne može stvoriti. FRISC nije spojen na sabirnicu")
|
|
@display {
|
|
pin {
|
|
x: 100; y: 42; w: 16; h:16;
|
|
type: "in";
|
|
orientation: "right";
|
|
}
|
|
}
|
|
@wires{null, null, null, null}
|
|
}
|
|
}
|
|
|
|
@component Memorija memory {
|
|
@instanceName memorija
|
|
@tooltip "Memorijska komponenta, mora postojati barem jedna"
|
|
@count (1,1000)
|
|
@source "memory.cdl"
|
|
|
|
@attribute sinkroniziran bool default false {
|
|
@popup automatic {
|
|
@title "Postavite sinkroniziranost"
|
|
@text "Zadajte sinkronizaciju"
|
|
}
|
|
}
|
|
|
|
|
|
@attribute brzina int default 1 {
|
|
@popup automatic {
|
|
@title "Postavite brzinu memorije"
|
|
@text "Zadajte brzinu memorije"
|
|
@enumerated {
|
|
"Spora" = 1,
|
|
"Srednja" = 5,
|
|
"Brza" = 25,
|
|
}
|
|
}
|
|
}
|
|
|
|
@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")
|
|
@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;
|
|
type: "out";
|
|
orientation: "top";
|
|
}
|
|
}
|
|
}
|
|
|
|
@pin memDirect inOut {
|
|
@tooltip "pin za spajanje na procesor"
|
|
@connection optional("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: -16; y: 20; w: 16; h:16;
|
|
type: "out";
|
|
orientation: "left";
|
|
}
|
|
}
|
|
@wires{null, null, null, null}
|
|
}
|
|
}
|
|
|
|
@component DMA {
|
|
@instanceName dma
|
|
@tooltip "DMA-kontroler"
|
|
@count (0,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")
|
|
@display {
|
|
/*
|
|
pin {
|
|
x: 100; y: 50;
|
|
fillColor: red;
|
|
lineColor: black;
|
|
fillColorConnected: white;
|
|
lineColorConnected: black;
|
|
side: left;
|
|
size: 20;
|
|
}
|
|
*/
|
|
pin {
|
|
x: 100; y: 30; 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!")
|
|
@display {
|
|
pin {
|
|
x: 100; y: 7; w: 16; h: 16;
|
|
}
|
|
}
|
|
@wires { 0, 0, null, null}
|
|
}
|
|
}
|
|
|
|
@bus glavnaSabirnica regular {
|
|
@instanceName glavnaSabirnica
|
|
@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;
|
|
}*/
|
|
bus {
|
|
x:0; y:0;
|
|
h: 20; w: 100;
|
|
orientation: "horizontal";
|
|
resizable: true;
|
|
}
|
|
}
|
|
@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
|
|
}
|
|
}
|
|
@bus PIOSabirnica automatic {
|
|
@instanceName PIOSabirnica
|
|
@count (0, 20)
|
|
@wires {
|
|
PIO_DATA<8>,
|
|
READY,
|
|
STROBE
|
|
}
|
|
}
|
|
|
|
@bus directRam singleAutomatic {
|
|
@instanceName directRam
|
|
@wires {
|
|
INT
|
|
}
|
|
}
|
|
|
|
|
|
@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.dodatnaPoveznica, PIOSabirnica, FRISC.glavniPin) {
|
|
@wires{PIO_DATA, READY, STROBE}
|
|
@wires{PIO_DATA, READY, STROBE}
|
|
}
|
|
|
|
@connection (FRISC.memDirect, directRam, Memorija.memDirect) {
|
|
@attribute procConn string default "INT" {
|
|
@popup automatic {
|
|
@title "Frisc INT"
|
|
@text "Processor interupt 1"
|
|
}
|
|
}
|
|
@attribute memConn string default "INT" {
|
|
@popup automatic {
|
|
@title "Mem INT"
|
|
@text "Memory interupt 1"
|
|
}
|
|
}
|
|
|
|
@wires{"INT", null, 1, "INT2"}
|
|
@wires{"INT", null, 1, "INT2"}
|
|
} |