Ξεκινώντας με το MRISC32 – Bits’n’Bites

0
Ξεκινώντας με το MRISC32 – Bits’n’Bites

Αυτή είναι μια γρήγορη εισαγωγή στην ανάπτυξη λογισμικού για το MRISC32 αρχιτεκτονική.

MRISC32

Η αρχιτεκτονική MRISC32 είναι μια νέα αρχιτεκτονική συνόλων εντολών Vector/RISC 32-bit, σχεδιασμένη να είναι αποτελεσματική, ισχυρή, προοδευτική και εύκολη στην εργασία. Είναι επίσης ανοιχτό και εντελώς δωρεάν για οποιονδήποτε να το χρησιμοποιήσει όπως θέλει.

Ο μεταγλωττιστής

Για τη μεταγλώττιση προγραμμάτων υπάρχει μια θύρα MRISC32 του GCC + μπινουτίλ + newlib, το οποίο είναι διαθέσιμο για Linux, macOS και Windows. Μπορείτε να κατεβάσετε την πιο πρόσφατη έκδοση από το mrisc32-gnu-εργαλειοθήκη σπίτι του έργου.

Κατά τη στιγμή της σύνταξης, ο μεταγλωττιστής βασίζεται στο GCC 12.x (trunk) και περιέχει υποστήριξη για:

  • C (με τυπική βιβλιοθήκη C)
  • C++ (ακόμη περιορισμένη υποστήριξη)
  • συμβολική γλώσσα
  • Σύνδεση ELF, αποσυναρμολόγηση κ.λπ

Με εγκατεστημένη την αλυσίδα εργαλείων μπορείτε να ξεκινήσετε τη μεταγλώττιση προγραμμάτων. Εξετάστε το ακόλουθο πρόγραμμα C, τετράγωνο.γ:

int square(int x) {
  return x * x;
}

Μπορεί να μεταγλωττιστεί χρησιμοποιώντας την ακόλουθη εντολή:

mrisc32-elf-gcc -O2 -c square.c

Αυτό θα παράγει ένα ΞΩΤΙΚΟ αρχείο αντικειμένου, τετράγωνο.οτο οποίο μπορείτε να αποσυναρμολογήσετε χρησιμοποιώντας το objdump εργαλείο:

$ mrisc32-elf-objdump -d square.o
square.o:     file format elf32-mrisc32

Disassembly of section .text:

00000000 <square>:
   0:	00210227 	mul     r1, r1, r1
   4:	c3c00000 	ret

Οι δύο τελευταίες γραμμές είναι η εφαρμογή γλώσσας συναρμολόγησης MRISC32 της συνάρτησης C, τετράγωνο().

Η πρώτη εντολή (mul r1, r1, r1), πολλαπλασιάζει τον καταχωρητή r1 με τον εαυτό του και αποθηκεύει το αποτέλεσμα στον καταχωρητή r1. Η επιλογή των καταχωρητών προέρχεται από το MRISC32 ABI που ορίζει ότι το όρισμα συνάρτησης (int x) μεταβιβάζεται στον καταχωρητή r1 και το αποτέλεσμα της συνάρτησης επιστρέφεται στον καταχωρητή r1. Η δεύτερη εντολή (ret) επιστρέφει στη συνάρτηση κλήσης.

Ο προσομοιωτής

Ενώ η μεταγλώττιση προγραμμάτων είναι διασκεδαστική, θέλετε επίσης να μπορείτε να εκτελείτε τα προγράμματά σας. Εδώ είναι που το Προσομοιωτής MRISC32 Όπως και η αλυσίδα εργαλείων, ο προσομοιωτής εκτελείται σε Linux, macOS και Windows και υπάρχουν προκατασκευασμένα δυαδικά αρχεία που μπορούν να ληφθούν.

Γειά σου Κόσμε!

Ας ξεκινήσουμε με ένα απλό „Γεια σου κόσμο!“ Πρόγραμμα C, γεια.γ:

#include <stdio.h>

int main(void) {
  printf("Hello world!\n");
  return 0;
}

Για να ενεργοποιήσετε την κονσόλα που βασίζεται σε προσομοιωτή και το αρχείο I/O κ.λπ., πρέπει να περάσετε – μαθαίνω όταν συνδέετε τα προγράμματά σας, η οποία επιλέγει την έκδοση προσομοιωτή ορισμένων ρουτινών newlib (από προεπιλογή η αλυσίδα εργαλείων GNU χρησιμοποιεί μια πλατφόρμα αγνωστική έκδοση του newlib). Έτσι μπορούμε να μεταγλωττίσουμε και να συνδέσουμε το πρόγραμμα ως εξής:

mrisc32-elf-gcc -o hello.elf hello.c -msim

Αυτό παράγει το εκτελέσιμο δυαδικό ELF γεια σου.ξωτικό. Ωστόσο, ο προσομοιωτής δεν ξέρει πώς να φορτώνει δυαδικά αρχεία ELF (ακόμα). Μπορούμε να εκτελέσουμε το δυαδικό ELF στον προσομοιωτή ως εξής:

$ mr32sim hello.elf
Hello world!

Μπορείτε επίσης να περάσετε τη σημαία -v στη γραμμή εντολών για να λάβετε περισσότερες πληροφορίες σχετικά με την εκτέλεση του προγράμματος:

$ mr32sim -v hello.elf
Read ELF32 executable hello.elf into RAM @ 0x00000200
------------------------------------------------------------------------
Hello world!
------------------------------------------------------------------------
Exit code: 0
CPU instructions:
 Fetched instructions: 1497
 Vector loops:         100
 Total CPU cycles:     1593

Κατασκευή και λειτουργία του DOOM

Αν θέλετε να δοκιμάσετε κάτι πιο προηγμένο, μπορείτε να το δοκιμάσετε Θύρα MRISC32 του DOOM (η κατασκευή DOOM απαιτεί CMake και νίντζα):

git clone https://github.com/mbitsnbites/mc1-doom.git
cd mc1-doom/src
mkdir out
cd out
cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=../mc1-toolchain.cmake -DCMAKE_BUILD_TYPE=Release ..
ninja

Αυτό θα παράγει το δυαδικό ELF src/out/mc1doom. Για να εκτελέσετε το πρόγραμμα χρειάζεστε επίσης ένα αρχείο δεδομένων παιχνιδιού DOOM και ευτυχώς έναν σύνδεσμο προς το κοινόχρηστο λογισμικό DOOM 1 χαμός1.wad μπορεί να βρεθεί στο doomwiki.org. Κατεβάστε το αρχείο wad και τοποθετήστε το στο src φάκελο και ξεκινήστε τον προσομοιωτή εκτελώντας το τρέχω.shτρέχω.ρόπαλο στα Windows) σενάριο στον ίδιο φάκελο:

./run.sh

Εάν όλα έχουν ρυθμιστεί σωστά, θα πρέπει τώρα να εκτελείτε την έκδοση MRISC32 του DOOM:

Αν ρίξετε μια ματιά στο τρέχω.sh script, θα δείτε ότι περνάει μερικές επιπλέον επιλογές στον προσομοιωτή που ενεργοποιούν τη λειτουργία γραφικών του προσομοιωτή. Τρέξιμο mr32sim –βοήθεια για να λάβετε περισσότερες πληροφορίες σχετικά με τις επιλογές.

Για να παίξετε πραγματικά το παιχνίδι, περάστε το -φά επιλογή (για πλήρη οθόνη) κατά την εκκίνηση του προσομοιωτή. Είσοδος πληκτρολογίου (ΣΥΝΟΛΟ ΠΑΡΑΓΩΓΗΣβέλη, CTRL, κ.λπ.) και η είσοδος του ποντικιού θα πρέπει να λειτουργούν όπως αναμένεται.

Πού είναι το υλικό;

(Για τους τολμηρούς)

Υπάρχει μια εφαρμογή ανοιχτού κώδικα VHDL της αρχιτεκτονικής MRISC32, δηλαδή το CPU MRISC32-A1και υπάρχει επίσης ένας υπολογιστής FPGA που ονομάζεται MC1 που βασίζεται στην CPU MRISC32-A1.

Ενώ το MRISC32-A1 και το MC1 δεν είναι ακόμα πραγματικά έτοιμα για prime time, όποιος έχει εμπειρία ανάπτυξης FPGA θα πρέπει να μπορεί να το βάλει σε λειτουργία σε μια πλακέτα FPGA κατηγορίας χομπίστων.

Με την ανάπτυξη που βρίσκεται ακόμη στην αρχή MC1-SDK είναι ακόμη δυνατή η δημιουργία εικόνων κάρτας SD με δυνατότητα εκκίνησης που μπορούν να εκτελεστούν στον υπολογιστή MC1.

Προειδοποιήστε, ωστόσο, ότι όλα αυτά απαιτούν κάποια εμπειρία και επιμονή, καθώς η διαμόρφωση και η διαδικασία κατασκευής του MC1 FPGA δεν έχουν βελτιωθεί ακόμη.

Βουτιά πιο βαθιά

Για να εξοικειωθείτε περισσότερο με την αρχιτεκτονική MRISC32, το Έργο MRISC32 στο GitHub είναι ένας καλός πόρος. Ακολουθούν μερικές ακόμη υποδείξεις:

Μπορείτε επίσης να κάνετε ερωτήσεις στο δημόσια φόρουμ συζήτησης MRISC32.

Schreibe einen Kommentar