Εδώ είναι μια σύντομη αναφορά για την τρέχουσα κατάστασή μου MC1 έργο, το οποίο είναι ένα SoC προορίζω FPGA:μικρό.
Ο MC1 είναι ένας προσαρμοσμένος υπολογιστής που χρησιμοποιείται κυρίως για δοκιμή και απόδειξη MRISC32 ΕΙΝΑΙ ΕΝΑ. Επί του παρόντος τα κύρια χαρακτηριστικά του υπολογιστή είναι:
- Βασίζεται γύρω από το MRISC32-A1 μαλακή CPU, που λειτουργεί στα 100+ MHz.
- Διαθέτει αρκετά ισχυρή προγραμματιζόμενη λογική βίντεο διπλού επιπέδου που μπορεί να δώσει σήμα βίντεο 1920×[email protected].
- Διαθέτει ROM on-FPGA και RAM βίντεο.
Ακολουθεί μια σύντομη επίδειξη που εκτελείται σε ένα Intel Cyclone V FPGA:
Η αρχιτεκτονική του υπολογιστή
Το MC1 υλοποιείται σε φορητό VHDL και θα πρέπει να είναι αρκετά απλό στη μεταφορά στα περισσότερα FPGA:s (με επαρκείς δυνατότητες υλικού, όπως BRAM με διπλή θύρα).

Το πιο ενδιαφέρον μέρος του MC1 (εκτός από το MRISC32-A1) είναι πιθανώς η λογική του βίντεο που καθιστά δυνατή τη μίξη και αντιστοίχιση μορφών εικονοστοιχείων, παλετών, αναλύσεων και τρόπων ανάμειξης σε ένα μόνο καρέ βίντεο, χάρη στον επεξεργαστή προγράμματος ελέγχου βίντεο (ένας προγραμματιζόμενος, διοχετευμένος ράστερ-συγχρονισμένος επεξεργαστής, παρόμοιος με τον Χάλκινος φίλος).
Η CPU
Η CPU του MC1 είναι ένα MRISC32-A1, το οποίο είναι ένα μεμονωμένο ζήτημα, προκειμένου να υλοποιηθεί με διοχέτευση το MRISC32 ISA. Το ISA έχει καλυφθεί σε ορισμένες προηγούμενες αναρτήσεις ιστολογίου. Πολλές από τις δυνατότητες της CPU χρησιμοποιήθηκαν στην επίδειξη.
Για παράδειγμα, στο ρετρό/ράστερ μέρος οι οδηγίες κορεσμού 4×8 bit ήταν χρήσιμες για υπολογισμούς χρωμάτων RGBA:

Ένα άλλο χρήσιμο χαρακτηριστικό είναι οι οδηγίες κινητής υποδιαστολής 2×16 bit που χρησιμοποιούνται κατά τον υπολογισμό της διαίρεσης προοπτικής για το πεδίο αστεριών 3D (υπάρχουν 32768 αστέρια στη σκηνή):

Οι διανυσματικές οδηγίες MRISC32 χρησιμοποιήθηκαν για την επιτάχυνση της απόδοσης φράκταλ Mandelbrot:

Το ένα μέρος που γράφτηκε σχεδόν αποκλειστικά σε καθαρή C++ ήταν το ray tracer. Φυσικά η υποστήριξη 32-bit κινητής υποδιαστολής της CPU MRISC32-A1 κατέστησε δυνατή την επίτευξη αξιοπρεπών επιδόσεων (περίπου 2 FPS στα 320×180).

Το MRISC32 ISA
Το καλύτερο μέρος της δημιουργίας του δικού σας ISA είναι ότι μπορείτε να το σχεδιάσετε ακριβώς όπως σας αρέσει, και αφού το έχετε χρησιμοποιήσει για κάποιο χρονικό διάστημα, μπορώ να πω ότι πραγματικά βγήκε πολύ καλά: προτιμώ πραγματικά τον προγραμματισμό για το MRISC32 ISA, σε σύγκριση σε άλλα ISA:s που έχω χρησιμοποιήσει (ARMv7, RISC-V, x86, 68k, MIPS, κ.λπ.).
Από την άλλη πλευρά, το χειρότερο μέρος της δημιουργίας του δικού σας ISA είναι ότι πρέπει να φτιάξετε τις δικές σας θύρες αλυσίδας εργαλείων. Έχω ξοδέψει πάρα πολύ χρόνο στο Back end GNU GCC MRISC32για παράδειγμα, και εκ των υστέρων θα μπορούσε να ήταν καλύτερο να ξεκινήσετε με ένα πίσω τέλος LLVM.
Μελλοντικά σχέδια
Τα επόμενα βήματα είναι:
- Προσθέστε έναν ελεγκτή SDRAM για να επωφεληθείτε από την ενσωματωμένη μνήμη (π.χ. η πλακέτα που χρησιμοποιώ έχει 64 MB SDRAM). Αυτό θα επιτρέψει την εκτέλεση πιο προηγμένων προγραμμάτων, όπως π.χ ΜΟΙΡΑ.
- Προσθήκη I/O κάρτας SD. Αυτό θα καταστήσει δυνατή τη φόρτωση προγραμμάτων στη μνήμη RAM αντί να τα εκτελείτε από τη ROM (η ανακατασκευή του bitstream FPGA για την ενημέρωση ενός προγράμματος είναι κάπως κουραστική).