chtel bych se zeptat k zapojeni von neumannova schematu podle obrazku v clanku :-)
vzdy sem hop chapal tak, ze ridicim prvkem je alu, na kterou tecou data ze vstupu a vystupu, alu pak spolupracuje s radicem, se kterym tvori precesor a alu take pristupuje k operacni pameti, coz je ovsem v rozporu s vyse uvedenym clankem. mohl by mi nekdo vysvetlit, kde se stala chyba? dekuji
Uplne primo vetsinou ne, v mikroprocesoru je vytvorena interni sbernice, ze ktere si data bere jak radic, tak i ALU a registry (ovsem vsechno to musi ridit radic, jinak by napriklad ALU nevedela, odkud dostane data, ani kam je ma ulozit - ty vstupni registry A a B a vystupni registr C jsou samozrejme pouze docasne). Dobre je to videt na nasledujicich dvou obrazcich. Prvni obrazek je hodne zjednoduseny, protoze nejsou zakresleny datove cesty, kudy radic (instruction decoder+timing and control) ridi jednotlive moduly.
Dekuji za vycerpavajici odpoved, uz zrejme chapu kde je ukryty ten problem. Vy zde popisujete zjednodusene realne reseni, ja sem ovsem mel na mysli neumannovo reseni, ktere bylo presentovano puvodne v roce 1945. Zajimal jsem se predevsim o tenhle abstrakt. Jeste zkusim neco vygooglit az budu mit chvili cas :-)
Budeme se tim zabyvat podrobneji v nekterem dalsim dilu serialu. Ne ze bych vam to ted nechtel rict, ale sam tu latku jeste nemam pripravenou, zatim si v hlave tridim, co vlastne napsat a hlavne v jakem poradi. V kazdem pripade je toto tema docela zajimave (a prave ucebnice zustavaji vetsinou pouze u zakladniho schematu), takze bych nachystal i nejake ilustracni obrazky, jak vlastne ty trpajzlici prenasi bitiky mezi jednotlivymi moduly :-)
Zajimave je, ze von Neumannova koncepce vlastne nic nerika o tom, ze se musi jednat o procesory s vnitrni sbernici a vlastne ani to, ze musi jit o "binarni" procesory takove, jake zname dnes, tj. procesory (vetsinou) taktovane vetsinou hodinami - ta koncepce je z tohoto pohledu hodne obecna.
Mimochodem, kdyz uz jsme u tech ilustracnich obrazku - nezna nekdo utilitku, ktera dokaze ze sekvence bitmap sestrojit GIF animaci se specifikaci zpozdeni mezi jednotlivymi snimky? Idealne OS. Sam moc dobre vim, jake problemy mel GIF kvuli patentum (http://www.root.cz/clanky/pripad-gif/), ale treba neco existuje.
Dostaneme se k tomu v nekterem z dalsich dilu, ale pokusim se zkracene odpovedet uz ted:
ALU je ve sve podstate pomerne jednoducha az primitivni vec (samozrejme uvnitr je to slozitejsi, treba nasobicky uz jsou celkem vychytane, ale ted myslim pohled zvenku) - predstavme si napriklad ALU takovou, jaka se vyrabela v rade integrovanych obvodu 7400, tj. jako jednoduchy integrovany obvod (cislo vam uz presne nereknu, ale vyrabelo ji treba i nase Tesla Eltos, urcite se to da vsude mozne po katalozich najit).
Ten integrac ma na vstupnich nozickach dve binarni cisla o dane sirce (4, 8, 16 popr. 32 bitu podle typu soucastky, v 7400 to jsou 4 bity) a na vystupu jedno binarni cislo (opet o stejne ci vetsi bitove sirce). Potom jeste nekolik vodicu, na ktere se posila kod pozadovane matematicke ci logicke operace: napriklad +, -, negace (unarni), rotace doleva/doprava, and, or, xor.
ALU zvolenou operaci jako spravna hloupoucka a poslusna soucastka provede, tj. precte si ta dve slova ze vstupnich nozicek, dale (paralelne) precte kod pozadovane operace a po par taktech se na vystupnich nozickach objevi vysledek. Nic dalsiho se od ALU ocekavat neda, veskere rizeni, tj. odkud se maji data do ALU vzit, kam se ulozi vysledek, co udelat s priznakem preteceni ci priznakem nuly a dalsi veci ridi prave radic.
1) musi zaridit, aby se z pameti precetla dalsi instrukce, resp. jeji operacni kod
2) na zaklade operacniho kodu treba musi zajistit, aby se dalsi slovo prectene z pameti preneslo do nejakeho registru nebo aby se ALU prestala flakat a secetla dve cisla, co ma na vstupu
3) taky muze dojit ke skoku na jinou adresu, treba k podminenemu skoku, skoku do podprogramu, navratu z podprogramu. Takze radic zajistuje to, aby se ukazatel na dalsi instrukci (IP) spravne zmenil.
4) vysledky ALU operaci je taky zapotrebi nekam ulozit, takze radic ridi "vyhybku" na interni sbernici procesoru, ktera data presune do pozadovaneho registru nebo do pameti
5) atd. - zalezi na instrukcni sade a vlastni architekture procesoru
Takze je rizen castecne svou konstrukci a castecne programem stejne jako ALU nebo dalsi jednotky. Jenom toho do nej a z nej vede trochu vic a je mnohem slozitejsi stejne jako forma programu pro nej urcena. Hlavni cast vnasejici rad do chaosu. Chapu to dobre ?
Procez kdyz budu procesory stosovat serio-paralelne zacnou se mi pri navrhu software vynorovat ty same problemy ktere mam pri navrhu a rizeni hardware procesoru slozeneho z ruznych ruzne spolupracujicich s-p pospojovanych jednotek. ?
Presne tak, zakladni vlastnosti radice mu da vyrobce daneho procesoru. Z uzivatelskeho hlediska je to vlastne instrukcni sada, tj. to, co procesor "umi". Uvnitr to muze byt trosku slozitejsi, ale ne moc (zacina se nekde u 2000 ekvivalentu tranzistoru). Pro nas ostatni je to cerna skrinka s jasne definovanym rozhranim, funkci popsanou jak seznamem instrukci, tak i casovanim a vlivem na ostatni casti mikroprocesoru.
Praveze vyhoda mikroprocesoru a mikroradicu je v tom, ze se ta slozitost "schova" do programu, ktery je vetsinou lip upravovatelny nez cisty hardware. Nekde na puli cesty mezi cistym programovanim a obvodovym navrhem HW je VHDL a podobne jazyky.
Samozrejme pokud slozitost reseneho problemu roste, tak je zapotrebi se presunout na vyssi uroven abstrakce. Priklad: slozity dotaz do databaze se resi pomoci vysokourovnoveho SQL a ne ceckovym nebo assemblerovskym programem a uz vubec ne navrhem zapojeni obvodu, ktery tento dotaz v HW implementuje. Jinymi slovy: pokud se pri propojovani uz dostavate na tezko zvladatelnou uroven (treba ze zmena v jedne casti vede k velkym zmenam celeho systemu), muze presun od HW k SW pomoci, ale je to samozrejme mysleno obecne.
Nechci do toho panu Tišnovskému příliš kecat, ale řekl bych, že FPGA a VHDL už je poměrně vzdálené od tematiky tohoto serveru. Nejde o to, že by to s tím nesouviselo, to v žádném případě. Ale ono je opravdu zapotřebí stanovit si nějaký základ, který se předpokládá, a od toho vyjít. VHDL a FPGA už je čistě elektronická záležitost a člověk by tam zase narazil na pojmy jako klopný obvod, hradlo a pod., pak by se mohla řešit problematika tranzistoru atd. I když je fakt, že když už se někdo vrhne na popis činnosti počítače, tak buď musí předpokládat elektronické vzdělání, nebo je třeba to všechno vysvětlit, protože bez toho se to pochopit nedá.
Na druhou stranu bych poznamenal, že za našich začátečnických let se postupovalo skutečně od základů - tj. elektronika, tranzistory a vše kolem, pak logické obvody a vše kolem - hradla, klopné obvody, registry, multiplexery atd., základy booleovské algebry, konstrukce čtyřbitové sčítačky s pomocí TTL obvodů, LEDek a trafopáječky, ta se pak použila ke konstrukci primitivní ALU (sčítání, bitové posuvy a porovnávání; ALU se sice vyráběla jako jeden šváb MH74181, ale jednak nebyl z nejlevnějších a jednak obsahoval operace, které nikdo nikdy k ničemu nepotřeboval, ale neobsahoval operace, které potřebné jsou - například tam byl posun doleva, ale už tam nebyl posun doprava, místo toho tam byla jakási obskurní kombinace asi tří logických funkcí), vysvětlení (poměrně podrobné) procesoru, a pak teprve jsme "byli připuštěni", samozřejmě po dlouhém školení, k zázraku moderní techniky - k počítači. Ale dá se říci, že jeho funkci jsme měli zmáknutou ještě dříve, než jsme se ho vůbec směli dotknout. A dokonce se našli blázni, kteří chtěli mít počítač doma, tak využili znalostí a začali si pomocí TTL obvodů (!) pájet vlastní procesor pro svůj budoucí počítač. Na vlastní oči jsem viděl jen fungující čtyřbitový prototyp - a nutno dodat, že ho měl ten maník koncipován dost pokrokově - dvoustupňovou pipeline, instrukce zadrátované - takže čistá RISC architektura :-) V 80. letech :-) A tomu hošíkovi mohlo být tak kolem 15 let! Jestli se mu to nakonec podařilo, to už jsem se nikdy nedozvěděl, protože se dotyčný odstěhoval.
P.S.: zákaznické obvody se v PC využívají téměř odnepaměti. Rozdíl mezi FPGA a zákaznickým obvodem bych zhruba přirovnal k rozdílu mezi přepisovatelným a lisovaným CD. Takže je to asi na stejné úrovni, jako bude-li nějaké hudební nakladelství vydávat písničky na přepisovatelném CD :-)
FPGA bylo použito v open HW (grafická karta) jsou tu na rootu o ní články. FPGA patří k tematu a přišla na ně řeč zde i když nepřímo ("Nekde na puli cesty mezi cistym programovanim a obvodovym navrhem HW je VHDL a podobne jazyky."), tak se JEN PTÁM (...), nebijte mě prosím :-)
Proti základům nic nemám. Jenomže o základech jsou mraky dokumentů kdežto o pokročilejších věcech ne. To ovšem zároveň neneguje probírání základů v článcích. Ty si rád přečtu i když něco už znám.
Přemýšlím proč vás můj dotaz tak nastartoval. Setkáváte se často s chabou znalostí základů ?
Mě nic nenastartovalo, jen jsem přidal komentář :-)
Nicméně proti tomu, že VHDL je na půli cesty mezi HW návrhem a programováním bych se dost ostře ohradil. Při pohledu na VHDL by se to zdát mohlo, ale je to zásadní omyl! Z něhož, pokud se na tomhle předpokladu staví, vedou zásadní vývojové chyby. VHDL je jen jazyk určený k popisu HW a to musí mít člověk v každém okamžiku na vědomí. Vynecháme-li simulace, pak si je třeba uvědomit, že ve VHDL se nepíše program! Ve VHDL "slovně" popisujete to, co byste mohl klidně udělat s páječkou v ruce a hrstí obvodů. Ve chvílích, kdy se člověk nechá unést a začne využívat různých cyklů, funkcí a procedur, začne ze syntezátoru proudit čím dál horší, náročnější a nespolehlivější popis, až nakonec přestane být řešení syntetizovatelné zcela. Pokud někdo nemá znalosti z oblasti digitální elektroniky, ale umí programovat, měl by si je nejdříve doplnit, než se pustí do hraní si s VHDL. Protože, jak už jsem řekl, ač to tak na první pohled vypadá, přesto nemá syntetizovatelný VHDL popis s programováním téměř nic společného (o nic víc, než obvodový návrh). Umění programovat vám ve VHDL nijak nepomůže, skoro naopak, může spíše uškodit při neopatrnosti.
Jinak řekl bych, že člověk si dnes může sestudovat cokoli ho napadne, aniž by se musel zvednout od počítače. Literatury je dost jak elektronické, tak papírové, jak v angličtině, tak v češtině. Ale nemám samozřejmě nic proti novým článkům a knížkám (i když je fakt, že poslední dobou mívám pocit, že ty nové knihy obvykle nedosahují kvalit starší literatury). Jde ale o to, že nemůžete chtít, aby se v článku o počítačích vysvětlilo všechno - počínaje takřka Ohmovým zákonem :-) To by pak musel býti dost rozsáhlý seriál :-)
A pokud jde o váš poslední dotaz - ano, bohužel se setkávám s tím, že znalosti jsou čím dál mizernější. Jak už jsem naznačil - před nějakými 20 lety měli i 15tiletí kluci, kteří se o to zajímali, znalosti na takové úrovni, že dokázali napsat vlastní překladač (v Assembleru) nebo si ubastlit vlastní procesor. To dnes v podstatě nehrozí. Navíc ale, právě díky těm svým komplexním znalostem, dokázali s danými prostředky dosahovat mnohem větších výkonů, než dnešní generace. Já vím, že je to dnes nesnadné, ale v té osmibitové a šestnáctibitové éře jste počítač, s kterým jste pracovali, znali doslova do posledního šroubku a tyhle znalosti vůbec nebyly zbytečné, jak si dnes spousta lidí myslí. Umožňovaly větší nadhled a větší výběr možností při řešení problému. Podívejte se dnes na vývojářská diskusní fóra, co se tam v 80% případů řeší - triviality, plynoucí z neznalosti, plynoucí z lenosti otevřít učebnici a kódy zkušených programátorů a studovat, učit se, zkoušet. A bohužel, když se podíváte i na řadu profesionálních řešení, tak zjišťujete, že jsou na velmi mizerné úrovni, jak po analytické, tak po programátorské stránce. Vytrácí se elegance, software je čím dále více splácanina a la Pejsek a kočička. A to samé se dá vlastně říci i o hardwaru a procesorech...
S tim poslednim odstavcem se neda nez souhlasit - jak v oblasti HW, tak i programovani. Ony ty osmibity a jeste tak sestnactibity (v podstate vsak 32 bity, narozdil od PC) v tomto ohledu byly dost dobre.
FPGA bylo použito v open HW (grafická karta) jsou tu na rootu o ní články. FPGA patří k tematu a přišla na ně řeč zde i když nepřímo ("Nekde na puli cesty mezi cistym programovanim a obvodovym navrhem HW je VHDL a podobne jazyky."), tak se JEN PTÁM (...), nebijte mě prosím :-)
Proti základům nic nemám. Jenomže o základech jsou mraky dokumentů kdežto o pokročilejších věcech ne. To ovšem zároveň neneguje probírání základů v článcích. Ty si rád přečtu i když něco už znám.
Přemýšlím proč vás můj dotaz tak nastartoval. Setkáváte se často s chabou znalostí základů ?