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 pro začátek rozhodnuté, že nebude obsahovat editor ani integrovaný překladač zdrojového kódu. Během dalšího vývoje byl ale jednoduchý editor a překladač jazyka symbolických address, assembler, zaintegrovaný. Pro větší projekty a programování v jezyce C se i nadále předpokládá využívatí plnohodnotných nástrojů pro programování počítačů s architekturou 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ů, Windows 32-bitů (MinGW32) a Mac OS 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 balíček pro distribuci Arch Linux https://aur.archlinux.org/packages/qtmips/ (Balíček připravil Martin Sobotka, student předmětu B35APO).
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.