Cpu

From base48
Revision as of 14:37, 19 July 2014 by Hexo (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Shiny Cyril

Ciele projektu

Sestaveni procesoru z nezavislych soucastek na technlogii TTL / CMOS jednoduche architektury i pro demostraci principu CPU Architektura - RISC (MISC)

Navrh

Zvolena ISA je popisana v instr.txt [1].

Bit c znamena ci je instrukcia podmienena alebo nie. Ak je (bit je 1) a vysledok posledneho odcitania bol nulovy, tak sa instrukcia nevykona. ISA je premenlivej sirky (zlozitejsi dekoder a fetch jednotka) od 1B do 4B.

Navrhovane rozlozenie pamate je v mem.txt [2].

CPU nema PC (IP) priamo ako register, ale ako MM region plus commit register (tiez MM) ktory sluzi na realizaciu skoku a pripadnu zmenu rezimu.

CPU bude mat tri (styri) rezimy - kernel, interrupt a user, pripadne podla potreby - kernel normal, kernel interrupt, user normal, user interrupt. Nutnostou je radic preruseni a ochrana(sprava?) pamate. Otazne bolo ci je nutny zasobnik a Stack Pointer a ukazalo sa ze ano. Dalej sa ukazalo ze niektore registre musia byt bankovane, kvoli data race-om, ktore vzniknu pri skoceni do prerusenia. Priklad - processor nema jump instrukciu. Skok sa realizuje zapisom adresy do memory mapped registra PC, ktory je rozlozeny cez tri adresy 0xFFFFF[D-F] a naslednym zapisom do MMr PCC (PC commit). V pripade, ze CPU v strede tohto procesu uskoci do prerusenia, a nasledne skoci naspat, tak v procese zapisu navratovej adresy prepise obsah MMr PC, cim doslo k data race-u s povodnym procesom. Problem sa vyriesil bankovanim - v kazdom rezime sa pred PC komitom fyzicky zapisuje inam. Podobne to bude aj s inymi MMr.

Linky

K dispozicii je assembler freezing-adventure [3] a emulator laughing-bugfixes [4] a tiez projektovy repozitar [5] a schema [6] k logisimu [7].

Nasledovat bude kompiler Scheme-like jazyka petulant-hapiness [8], dokoncenie emulatora a nejake priklady na spustenie.

Od githubu dostalo CPU meno Shiny Cyril.


OLD CONTENT, needs tidying

Ciele projektu

Sestaveni procesoru z nezavislych soucastek na technlogii TTL / CMOS jednoducha architektury i pro demostraci principu CPU RISC Architektura

TODO: zvolit architekturu

Architektur je vícero druhů, a velmi závisí na zvolené technologii (součástkách). Jinou architekturu budu preferovat pokud použiju FPGA (ASIC) a jinou když budu skládat stroj z elektronek ;-)

Pro rozšíření obzorů si dovolím připomenout již zapomenuté: stroje, podivné experimenty a úspěšné procesory:

TX-0 PDP-8 CDP1802 L-1 EDUC-8 KENBAK-1 MMIX

o mmix zaujimava RISC architektura s cistym designom

Brainfuck Engine

koncept pre CPU asi najjednoduchsi mozny, stranka podprojektu tu

RISC

Kolko registrov v nom chceme? Jeden akumulator, 2 registre alebo az 32? Vystaci nam 4-8bitova sirka? Minimalne poziadavky:

nahrat do registra pevnu konstantu scitat 2 registre nacitat hodnotu z RAM do registra, ulozit z reg. do RAM podpora nepriameho adresovania Prijemne vlastnosti zjednodusujuce dizajn:

pevna sirka instrukcie niekolko najnutnejsich instrukcii ktore dokazu vsetko co kopa dalsich odovodenych napr. add r0, 1 nahradi inc r0 spravne radenie instrukcii moze zariadit kompilator Konstrukcia

Nezavislost suciastok

TODO: zvolit povolene suciastky

Ako moc chceme aby boli suciastky nezavisle? Su povolene GAL polia do ktorych treba napalit logicke zapojenie, alebo aspon zakladne logicke IO? Ideme az na tranzistory? Aby sme neskoncili so salovym pocitacom :)

Sestavit počítač s použitím transistorů není nemožné, viz MT15. A ani to není velké. Odběr taky naní tak hrozný. Samozřejmě RAM je realizována pomocí IO. Dělat ji z tranzistorů by bylo velmi náročné (u statické RAM předpokládejme cca 8 tranzistorů na bit v četně infrastruktury). Co se týče core memory, tak s tou už nikdo neumí zacházet. Ale bylo mi řečeno, že se ještě vyrábí. (za jakou cenu jsem se raději neptal, a proč se vyrábí taky ne – asi je odolná vůči tvrdému záření.)

Realizace pomocí IO, například standardní TTL či CMOS řady je také možná. Ale je nutné se omezit jen na běžné jednoduché obvody. Součástky jako vícebránová RAM, ALU či řadič mikroprogramu, které jsou v starých katalozích uvedeny již nejsou dostupné.

DPS / moduly

sa asi bude riesit po nadizajnovani obvodov, no myslim si ze pri pouzivani adresnych / datovych zbernic DPS budu musiet byt obojstranne a na doske budu prepojky :)

RAM

TODO: zvolit ako bude implementovana RAM

Pouzijeme IO RAM alebo ideme az na tranzistory? lacne hotove I/O su napr 6114 - 2kB 8bit alebo 62256 - 32kB 8bit

Rozhrania

TODO: vymysliet rozhrania

Analogový výstup (D/A converter)

Tady vystačíme s odporovým žebříčkem na paralelním portu.

Analogový vstup (A/D converter)

Tohle bude chtít trochu víc práce. A nebude to tak malé jako D/A.

paralelne / LPT

Mylil som sa, najjednoduchsie rozhranie je paralelny port, len je narocny na mnozstvo zil v prepajacom kabli. Blokujuca implementacia paralelneho portu by vyzadovala nejaku synchronizacnu logiku - stav cakania na prijatie dat na druhej strane, alebo cakanie na prijem dat z druhej strany.

RS232 / COM

Dalsou moznostou je seriovy port. prikaz nacitania znaku by cakal kym po linke pride jeden byte. Lacne riesenie je pouzit 82C50 UART. Na doske s RS232 by musela byt inicializacna rom ktora po resete nahra par hodnot do riadiacich registrov + adresny citac ktory by prechadzal adresy v rom a sucasne rovnaku adresu v kontroleri a generator zapisovacich impulzov. Alternativou by boli bufferovane DIP mechanicke prepinace, buffery by boli vyberane dekadickym citacom pomocou ich output enable pinov, data nahodene na prepinacoch by sa po resete postupne nahrali do kontrolera, dekadicky citac by docital do vystupu ktory by zastavil jeho dalsie citanie / zapisovanie a uvolnil by pouzitie portu (nieco ako signal povolenie behu bf programu).

Video

Tiez mozeme zostrojit videogenerator PAL? VGA? DVI? s textovym rezimom, ktory by si vystacil pri 80×25=2kB RAM bez informacie o farbe, ale to by bol cely zvlast projekt. RAM videogeneratora by bola pripojena na adresnu zbernicu spolu s busy priznakom ktory by blokoval pristup CPU do RAM v momente ked videogenerator pamat potrebuje. ROM by mohla obsahovat textovy font, pri rozmeroch 8×8 a pri celej ASCII tabulke by zabral 16kB ROM.

Navrh a simulacia

Mozeme ist navrhovat a simulovat na papier, alebo mozeme napisat VHDL popis navrhu a simulovat ho az kym nebude ako tak fungovat a potom mozeme prototypovat hw. Ta prva moznost ponuka cvicenie a lepsie porozumenie navrhovaneho obvodu, cisto ta druha moznost viacmenej vylucuje chyby ale hrozi ze by bol obvod navrhnuty pokus/omyl na slepo

Brain Rulez! Nástroje jako VHDL a různé simulátory jsou jen nástroje. Brain Rulez!

Takže bych začal pěkne po staru. Tužku a hromadu papíru. A nebo odpovídajíc době, textový editor a jednoduché diagramové malovátko.

Choice 1. Google Docs rulez (+collaboration) Choice 2. (Vi | Emacs) + Dia. idea, hw