Search
QtMips je simulátor a nástroj k vizualizaci zpracování instrukcí procesorem s architekturou MIPS. Program umožňuje zvolit mezi více možnými způsoby zpracování instrukcí od jednoduché jednocyklové architektury až po plně zřetězené (pipeline) zpracování v pěti stupních. Přitom je možné volit mezi řešením hazardů formou pozastavení nebo, kde je to možné, formou přeposílání výsledků. Pro demonstraci datových hazardů je k dispozici je i konfigurace zřetězeného zpracování bez detekce a řešení hazardů. Program dále umožňuje konfigurovat vyrovnávací paměti (cache) jak pro čtení instrukcí tak pro čtení i zápis dat. Obsah a struktura vyrovnávacích pamětí je opět graficky znázorněna stejně jako jsou barevně zvýrazněné buňky paměti, jejich obsah se nachází v dané chvíli ve vyrovnávací paměti.
Simulátor je výsledkem diplomového projektu Ing. Karla Kočího. V jeho diplomové práci Graphical CPU Simulator with Cache Visualization lze nalézt analýzu alternativních simulátorů architektury MIPS, popis objektového návrhu simulátoru a návod jak simulátor QtMips používat.
Jako základní modelová architektura byla pro předmět APO vybraná architektura MIPS. Důvody k její volbě:
K výuce se po dlouhou dobu používal simulátor dodávaný s učebnicemi Computer Organization and Design. Jeho architektura byla již nevyhovující, přitom aplikace byla implementovaná s využitím starého WIN 32 API. Méně problémů bylo s jejím provozem v emulaci než nativně na Windows. K aplikaci nebylo možné sehnat zdrojové kódy a problémy řešit. QtMips je výsledkem zadané diplomové práce. Jedná se již o třetí práci na toto téma a v tomto případě považujeme výsledek za zdařilý. Aby se práce soustředila na implementaci vlastního simulátoru, bylo rozhodnuté, že nebude obsahovat editor ani integrovaný překladač zdrojového kódu. K překladu se využívají plnohodnotné nástroje pro programování MISP a jiných procesorů od malých vestavných aplikací až po superpočítače - překladač GCC a GNU assembler vzniklé v rámci projektu GNU.
Pro editaci zdrojových kódů lze využít odlehčený editor Geany nebo jiný editor. Pro překlad pak GNU překladač kompilující programy pro architekturu MIPS. V nejjednodušší variantě například voláním
mips-elf-gcc -ggdb -nostartfiles -o program program.S
.S
-ggdb
-nostartfiles
crt.o
objdump --headers program
objdump --source program
.globl _start .set noat .set noreorder .ent _start _start: addi $1, $0, 0x1234 // prostor pto pokačování loop: break beq $0, $0, loop nop .end _start
.globl
_start
.noat
.noreorder
.ent
loop
break
.end
Podrobnější popis a formátů souborů a kompilace programů naleznete na stránce projektu QtMips. QtMips - spustitelné formáty a kompilátory
Zdrojové kódy jsou spravované na platformě GitHub. Na této platformě je možné snadno vytvořit vlastní vývojovou větev (fork). Původní práce pana Kočího se nachází na adrese https://github.com/Cynerd/QtMips, současná nejnovější větev na stránce https://github.com/cvut/QtMips. Zkompilované verze programu pro platformu GNU/Linux 64-bitů a Windows 32-bitů se nacházejí ve složce release projektu https://github.com/cvut/QtMips/releases. Zabalené archivy obsahují i potřebné knihovny. Vlastní grafická verze programu na Windows se nachází ve spustitelném programu qtmips_gui.exe. Na platformě GNU/Linux je nutné buď nainstalovat potřebné knihovny (jedná se o Qt5) v odpovídající verzi do systému nebo program spouštět skriptem qtmips.sh který nastaví cesty k lokálně distribuovaným knihovnám a spustí vlastní aplikaci bin/qtmips_gui. Pro aktuální verze distribuce Ubuntu GNU/Linuxu jsou připravené zkompilované balíky na adrese https://launchpad.net/~ppisa/+archive/ubuntu/qtmips. Pro několik dalších distribucí jsou k dispozici balíky kompilované Suse Open Build Service. V laboratorní síti je aplikace nainstalovaná do systému a lze jí spouštět přímo z příkazové řádky příkazem qtmips_gui nebo z nabídky aplikací ve složce Development. Instalace se nachází v adresáři /opt/qtmips a je jí možné dotud i zkopírovat na vlastní médium nebo do emailu.
qtmips_gui.exe
qtmips.sh
bin/qtmips_gui
qtmips_gui
Development
/opt/qtmips
K dispozici je i experimentální verze emulátoru zkompilovaného jako WASM aplikace pro prohlížeče s podporou WebGL, WASM a Javascriptu http://cmp.felk.cvut.cz/~pisa/apo/qtmips/qtmips_gui.html.
K překladu zdrojových kódů je pak potřeba překladač, který je popsaný na stránce Křížový překladač GNU pro architekturu MIPS-ELF.
Nejdříve je potřeba nainstalovat vývojové prostředí knihoven Qt5. Na distribucích Debian i Ubuntu se instalace vývojového prostředí docílí příkazy
sudo apt-get install build-essential sudo apt-get install qtcreator sudo apt-get install qt5-default
Vlastní aplikaci lze z vývojového repozitáře naklonovat příkazem
git clone git://github.com/cvut/QtMips.git
K vlastní kompilaci lze buď projekt otevřít v prostředí QtCreator nebo provést kompilaci z příkazové řádky
mkdir QtMips-build cd QtMips-build qmake "CONFIG+=static" "CONFIG+=staticlib" -recursive ../QtMips/qtmips.pro make
Pokud se na systému nachází jako počáteční vývojové prostředí ke Qt4 může být nutné použít plnou cestu programu qmake
qmake
/usr/lib/x86_64-linux-gnu/qt5/bin/qmake "CONFIG+=static" "CONFIG+=staticlib" -recursive ../QtMips/qtmips.pro
Více opět na stránkách projektu.