Představení mého prvního uceleného procesoru Limen z roku 2016 v rámci obhajoby maturitní práce na SŠIEŘ Rožnov pod Radhoštěm. Tento procesor dal později vzniknout mému prvnímu dvoujádrovému procesoru Limen Alpha. Procesor byl popsán v jazyce VHDL.
Zdrojový kód Limen: https://github.com/dominiksalvet/limen
Text maturitní práce: https://github.com/dominiksalvet/high-school-thesis
2. Zadání maturitní práce
Cílem práce je návrh 16bitového procesoru vlastní
architektury a konstrukce a jeho následný popis v jazyce
VHDL, tak aby ho bylo možno implementovat do
hradlového pole.
4. Cycle - charakteristika
●
procesor, spíše mikrokontrolér, této architektury byl
implementovám pouze v populární hře Minecraft, a to
přímo za pomocí herních mechanizmů bez doplňků
●
8bitová CISC/Von Neumannová architektura řízena
řídícími signály (nikoli hodinovým signálem)
●
3 registry volného použití (nikoli však obecného)
●
paměť adresuje po 16 bitech, adresuje tak až 512B paměti
●
4 V/V porty, ke kterým se přistupuje skrze speciální
instrukce
●
vzhledem k vykonávané instrukci má pomyslný výkon
zhruba 1 instrukci za 5 sekund
6. Six Alpha - charakteristika
●
4bitová RISC/Harvardská architektura
●
jeden hlavní registr - akumulátor
●
2 náběžné hrany vstupního hodinového signálu = 1 vykonaná instrukce
●
paměť programu i dat je součástí architektury, čili jedná se spíše o architekturu
mikrokontroléru
●
pro Xilinx Spartan 3E dosahuje takt zhruba 74MHz, čili má výkon 37MIPS (Milión
Instrukcí za Sekundu)
Paměť programu
●
adresuje se po bytu, naadresuje až 128B paměti
Paměť dat
●
adresuje se po nibblu (4bity), naadresuje maximálně 16B paměti
●
V/V porty jsou v adresním prostoru dat
7. Six Alpha - schéma
A
ALU
RWM
PRG
MEM
IP
I/O interface
SCR
8. Limen Alpha - charakteristika
●
16bitová RISC/Von Neumannová architektura
●
8 registrů obecného použití (R0 je vždy roven nule)
●
adresuje paměť po dvojici bytu, adresuje maximálně
128kB paměti
●
jedna instrukce je dokončena každé 4 náběžné hrany
vstupního hodinového signálu
●
nynější verze Alpha pro Xilinx Spartan 3E dosahuje taktu
zhruba 66MHz, výkon je tedy roven 16.5MIPS
9. Limen Alpha - výčet instrukcí
●
ST - uložit
●
LD - načíst
●
ADD - sečíst
●
SL - nastavit menší
●
SLU - nastavit menší (bez znaménka)
●
OR - log. disjunkce
●
NOR - negace log. disjunkce
●
AND - log. konjunkce
●
NAND - negace log. konjunkce
●
XOR - exklusivní log. disjunkce
●
SLL - log. bit. posun vlevo
●
SRL - log. bit. posun vpravo
●
SRA - arit. bit. posun vpravo
●
SUB - odečíst
●
LI - načíst 8 bitů
●
LIS - načíst 8 bitu bit. posunutých
●
LIL - načíst spodních 8 bitů
●
LIH - načíst vrchních 8 bitů
●
JNE - skoč, pokud není rovno
●
JE - skoč, pokud je rovno
●
JL - skoč, pokud je menší
●
JLE - skoč, pokud je menší/rovno
●
JG - skoč pokud je větší
●
JGE - skoč, pokud je větší/rovno
●
JWL - skoč s odkazem
12. Limen Alpha - schéma jádra
ALU
Register file
IP
Control
registers
SE
IR
Bus
interface
CT
0x0004
AR
IIP
Rx
Ry
Rz
13. Limen Alpha - praktická ukázka
●
jádro Limen Alpha je zabaleno do “testovacího systému”
pro názornou ukázku jeho běhu
●
sedmisegmentový displej zobrazuje obsah IP registru
(instrukčního ukazatele) v hexadecimální soustavě, tj.
adresa aktuálně zpracovávané instrukce
●
tlačítko BTN0 je navedeno na signál restartu procesoru
●
tlačítko BTN1 je navedeno na signál přerušení procesoru
●
vstupní hodinový signál do testovacího systému je 25MHz,
kde je skrze děličku kmitočtu přiveden do jádra procesoru
s frekvencí 4Hz (tj. 1 instrukce za sekundu)
14. Budoucnost vývoje architektury Six
●
Alpha
– hotovo
●
Beta
– binární kompatibilita s architekturou Six Alpha
– změnit způsob přístupu k portům
– paměti dat a programu mimo jádro
– zvažuje se vylepšení celého jádra
15. Budoucnost vývoje architektury Limen
●
Alpha
– navrhnout dvoustupňový pipelining ALU
– dodělat dvoujádrovou variantu (základy již položeny)
=> dohromady je navýšení výkonu odhadováno na čtyřnásobek,
čili zhruba na 66MIPS (33MIPS / jádro)
●
Beta
– dodělat jádro architektury Limen se 6-ti stupňovým pipeliningem,
binárně kompatibilní s jádrem Limen Alpha (první testy ukazují
výkon jednoho jádra až 100MIPS)
– zvažuje se zavedení jednoduché ochrany paměti pro snadnou
implementaci jednoúlohového operačního systému s ochranou
jeho adresního prostoru
16. Limen Beta - schéma
OB
OT
AR
ALU
RF
RY
RX
CT JA
RX
SE
IR
BI_ACS
BI_FES
IP
+
1
IP
Address Fetch Decode Compute Route Access
AR
17. Představení architektury Tine
●
Alpha
– jednoduchost a ortogonalita bude klíčem celé architektury
– 8bitová RISC/Vonn Neumannova architektura
– paměť se bude adresovat po bytu, bude tak moci adresovat
až 256B paměti
●
Beta
– první pokus o asynchronně řízenou architekturu procesoru
– logicky shodná s Tine Alpha, pouze předělaná do
asynchronní podoby (tzn. nepotřebuje hodinový signál na
řízení provozu a synchronizaci jednotlivých částí procesoru)
18. Představení architektury Elys
●
není zatím konkrétně rozčleněna na verze a celý návrh prochází mnoha
úpravami čistě teoretického rázu, nicméně toto jsou nynější předpoklady:
– bude se jednat o 64bitovou RISC/Von Neumannovou architekturu
– šířka instrukčního slova bude 32 bitů
– základní sada obecných registrů bude čítat počtu 64, z nichž vrchních
32 bude vyhrazeno pro kernel mód (tj. pro rutiny v jádře operačního
systému)
– pro jednoduchost a rychlost se bude paměť adresovat po 32 a 64
bitech (někdo tu laťku někdy posunout musí)
– architektura bude podporovat pouze naprosto triviální instrukce, které
budou na úrovni hardwaru co nejvíce paralelizovány a optimalizovány
– zvažuje se dokonce absence instrukcí pro násobení a dělení (neplatí
pro FPU), které se dají softwarově nahradit s vcelku slušnou
výpočetní složitostí (ovšem stále jsou v průměru zhruba 3x pomalejší
než hardwarové instrukce na dnešních univerzálních CPU)