Miksi moniprosessorijärjestelmä? Laskentaa voidaan hajauttaa useammille prosessoreille nopeuden, modulaarisuuden ja luotettavuuden vaatimuksesta tai hajauttaminen voi helpottaa ohjelmointia. Voi olla järkevää sijoittaa laskentayksikkö lähelle ohjattavaa tai monitoroitavaa laitetta. Yhden suuren ja kompleksisen kokonaisuuden sijasta on monta helpommin ohjelmoitavaa ja hallittavaa moduulia. Jokin moduuli voi olla esim. optio, jolloin se on järkevää toteuttaa erillisellä prosessorilla. Edullisempi kokonaisuus, jos valitaan muutama edullinen suoritin yhden monipuolisen ja nopean prosessorin sijasta. Sopivan suorittimen valinta on helpompaa. Testaus voi olla helpompaa. Moniprosessorijärjestelmän kokoonpanoon vaikuttavat mm: Moduulien keskinäinen riippuvuus Suorittimien kapasiteetti Suorittimien fyysinen paikka Haetaan ratkaisu, joka minimoi suorittimien välisen liikennöinnin.
Miksi yksiprosessorijärjestelmä? Tarvittaessa eri toimintojen keskinäinen synkronointi helpompaa. Kaikki tieto yhdessä paikassa eikä tiedon siirtämiseen tarvita erillisiä protokollia. Vähemmän oskillaattoreita vähemmän häiriöitä. Toisaalta valittu suoritin toimii suuremmalla taajuudella enemmän häiriöitä. Järjestelmän muuttuessä muutos vain yhteen paikkaan. Järjestelmä on helpompi päivittää. Virheiden etsintä voi olla helpompaa. Tarvitaan vähemmän ohjelmankehitysympäristöjä. Jos käytetään reaaliaikakäyttöjärjestelmää, niin yksiprosessorijärjestelmä on halvempi. Moniprosessorijärjestelmä Esim. kolmen suorittimen sulautettu järjestelmä, jossa CPU1 huolehtii näytön ja näppäimistön ohjauksesta ja kommunikoi CPU2:n kanssa. CPU3 puolestaan ohjaa moottoreita, lukee tiedot sensoreilta ja kommunikoi myös CPU2:n kanssa. CPU2 on yhteydessä muuhun tietojärjestelmään.
Valittaessa tiedonsiirtomenetelmää prosessoreiden välille, voi miettiä ainakin seuraavia seikkoja: Nopeus: Riittääkö väylän nopeus tiedonkäsittelyn tarpeisiin? Luotettavuus: Tarvitaanko väylässä varmennus? Tarvitaanko virheen tarkistusmenetelmiä, esimerkiksi CRC jokaisessa siirrettävässä viestissä? Standardi vai sovelluskohtainen ratkaisu: Kaupalliset tuotteet tukevat standardoituja väyläratkaisuja, esim. Ethernet. Riippuu tuotteesta, onko standardoitujen ratkaisujen käyttö eduksi. Käyttöjärjestelmän tuki: Jos käytetään valmista käyttöjärjestelmää, tukeeko se tiedonsiirtoprotokollaa ja käytettyjä fyysisiä rajapintoja vai onko laiteläheinen ohjelmointi tehtävä itse. Yksi- vai kaksisuuntainen tiedonsiirto: Joskus yksisuuntainen tiedonsiirto riittää. Entä jos vaatimukset muuttuvat ja tarvitaan tuki kaksisuuntaiselle tiedonsiirrolle. Master/slave: Sopiiko yksinkertainen master/slave politiikka järjestelmään vai hidastaako kysely orjalaitteelta liiaksi järjestelmää? Verkko vai point-to-point: Verkon toteuttaminen on sekä laitteiden että ohjelmiston osalta kalliimpi ratkaisu. Toisaalta point-to-point ratkaisu tarvitsee erilliset tiedonsiirtoväylät kommunikoivien laitteiden välille. Kompleksisuus: Vaikeuttaako valittu tiedonsiirtomenetelmä järjestelmän toteuttamista. Onko valittu menetelmä sopiva järjestelmän muuhun tietojen käsittelyyn.
Prosessoreiden välisessä tiedonsiirrossa voidaan käyttää monia menetelmiä: Tiedonsiirtorekisteri Kuvassa tietoa siirretään 8-bitin rekisterin avulla. Kun CPU1 kirjoittaa rekisteriin, se asettaa samalla flip-flopin. Kun CPU2 lukee rekisterin, flip-flop nollautuu. Flip-flopin avulla CPU1 tietää, milloin CPU2 on käynyt lukemassa rekisterin ja CPU2 saa tiedon rekisteriin tulleesta datasta. REG FULL linjaa voidaan joko tutkia pollaamalla tai jos halutaan nopeampi käsittely kytketään se kontrollerin ulkoiseen keskeytyslinjaan. FIFO CPU kirjoittaa puskuriin ja toinen CPU lukee datan (first-in-first-out). Vapauttaa vastaanottajan lukemaan datan silloin, kun sille sopii. Samoin lähettäjä voi jatkaa tehtäviään heti tallennuksen jälkeen. FIFO-puskurissa yleensä tieto (pin), kun dataa puskurissa. Ongelma: ei äärettömän suuria puskureita kuinka huolehditaan, että kaikki tieto siirtyy lähettäjältä vastaanottajalle. DPRAM (Dual-Port RAM) Jos siirrettävää tietoa on paljon, voidaan käyttää kahden suorittimen kesken jaettua DPRAM-muistia. Tiedonsiirto hoidetaan joko vuorottelemalla suorittimien kesken tai synkronisesti niin, että jokaisella CPU:lla on yhtä aikaa pääsy muistiin. Esim. IDT (integrated Device Technologies) 7052 2Kx8 neliporttinen, jolloin neljällä CPU:lla pääsy RAM:lle. Ongelmia voi aiheutua, jos CPU lukee muistialuetta juuri, kun jokin toinen CPU sinne kirjoittaa. Mahdollinen ratkaisu voisi olla väylän varaus yhdelle CPU:lle kerrallaan.
DPRAM (Dual-Port RAM) DS1609 dual port interface to Intel 8086 microprocessor. Sarjaliikennöinti Suorittimien väliseen liikennöintiin voidaan käyttää esim. synkronoitua sarjaliikenneväylää. Microwire ja I2C soveltuvat myös tarkoitukseen (yksi tai usempi laitteista master). Monen master-laitteen väylässä voi tulla hallintaongelma, kuka väylää saa käyttää. Jos I2C-väylässä monta laitetta yrittää liikennöidä yhtä aikaa, toinen laitteista tunnistaa tilanteen ja odottaa.
Jos piirit ovat eri levyllä, niin tietoa voidaan siirtää esim. RS-232:lla CAN-väylällä Asynkronisena sarjaliikenteenä käyttäen avokollektorikytkentää (kuvassa). Standardi printteriporttia voidaan käyttää kommunikointiin. Standardi Interlink-portti voi myös toimia tiedonsiirtoväylänä. Tiedonsiirtoprotokollat Käytetään tiedonsiirtoon jotain standardiprotokollaa, esim. MODBUS, jossa yksi laitteista on master, muut orjalaitteita. MODBUS on riippumaton käytetystä fyysisestä tiedonsiirtotekniikasta. Muita protokollia ovat esim. TCP/IP tai UDP/IP, nämä ovat kuitenkin raskaampia tiedonsiirtomenetelmiä. Lähteet: Stuart R. Ball, Embedded Microprocessor Systems: Real World Design, Elsevier. Piirivalmistajien sivustot