Cpu
Shiny Cyril
Ciele projektu
Sestaveni procesoru z nezavislych soucastek na technlogii TTL / CMOS jednoduche architektury i pro demostraci principu CPU Architektura - RISC (MISC)
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