@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: "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 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"; } } } } @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"; } } } } @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: 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!") @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; }*/ 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 { @count (0, 20) @wires { PIO_DATA<8>, READY, STROBE } } @bus directRam automatic { @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.glavniPin, PIOSabirnica, FRISC.glavniPin) { @wires{PIO_DATA, READY, STROBE} @wires{PIO_DATA, READY, STROBE} } @connection (FRISC.memDirect, directRam, Memorija.memDirect) { @wires{INT} @wires{INT} }