Προς το περιεχόμενο

Εργασία σε assebly για MIPS


pagratios

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους,

 

έχω μία εργασία όπου φτιάχνω έναν επεξεργαστή mips μόνο που δεν έχω να υλοποιήσω όλες τις εντολές. Αυτές που πρέπει να υλοποιήσω είναι οι εξής

LW,SW,ADDU,SUBU,ANDI,SRAV,BNE,SLTI,JR,JRAL

 

Το πρόβλημα δεν είναι στο πως θα τις υλοποιήσω σε VHDL αλλά πως μπορώ να περάσω στους καταχωρητές αριθμούς γιατί δυστυχώς δεν έχω κάποια ori,xori,addi αλλά την andi και ο μόνος καταχωρητής που έχει τιμή σταθερή είναι ο zero. Το μόνο που σκέφτηκα είναι να κάνω slti s0, zero,10 ώστε να πάρει ο s0 την τιμή 1 και να συνεχίσω με αυτόν αλλά δεν έχω ούτε την jump. Για να χρησιμοποιήσω την jalr πρέπει να βάλω σε έναν καταχωρήτη την διεύθυνση της εντολής που θέλω να πάει αλλά άμα αυτή είναι η 0000002C έχω πρόβλημα γιατί πρέπει να βάλω πολλές addu την μία κάτω από την άλλη.

 

Μπορείτε να βρείτε κάποιον άλλο τρόπο πιο εύκολο ή την κάτσαμε λόγο κακού συνδυασμού εντολών?

Δημοσ.

Ξέρει κάποιος πως γίνεται στον pcspim να βγάζω unsigned αποτελέσματα?

 

γιατί κάνω

 

slti s0, zero , 10 #s0=1

subu s1, zero, s0 # έπρεπε να μου βγαζεί το ολα ffffffff και μου λέει -1

Δημοσ.

Στον επεξεργαστη δεν υπάρχει signed και unsigned, αρα δεν εχει να κάνει κάτι με τις ρυθμίσεις του.

Στο παράθυρο που τα βλέπεις πρεπει να επιλέξεις τι ειδους αναπαράσραση να κάνει (signed ή unsigned). (Πιθανά δεξί κλίκ και επιλογή προβολής).

Δημοσ.

Η signed (2's complement) ή unsigned arithmetic στην VHDL ή Verilog εξαρτάται από την βιβλιοθήκη που θα χρησιμοποιήσεις. Μπορείς λοιπόν να χρησιμοποιήσεις την IEEE.numeric_std που είναι από default signed και όπου θες unsigned να κάνεις cast ή εναλλακτικά να χρησιμοποιήσεις τις IEEE.std_logic_signed και IEEE.std_logic_unsigned.

 

:-)

Δημοσ.

Για κάποιο λόγο βγάζει -1 αλλά αν το κάνω andi με το 10 τότε τυπώνει 10. η αφαίρεση εντο μεταξύ είναι με την subu οπότε θα έπρεπε να βγάζει κάποιον θετικό.

Δημοσ.
Με μπέρδεψες, δηλαδή ALU, instruction, data registers, κλπ, πως θα τα κάνεις;

 

Αυτά τα έχω φτιάξει σύμφωνα με την θεωρία και πιο συγκεκριμένα το datapath το έχω κάνει χρησιμοποιώντας πύλες σε schematic και το control unit σε VHDL.

 

Στην αρχή το πρόβλημα που είχα ήταν ότι με τις εντολές που λέω στο πρώτο ποστ δεν μπορούσα να βάλω νούμερα στους καταχωρητές γιατί δεν είχα καμία ori, xori ή addiu αλλά μόνο andi και slti. Αυτό το έλυσα λέγοντας να κάνω μία σίγουρη ανισότητα δλδ

slti s0, zero, 10 ώστε να έχω σε έναν καταχωρητή το 1 και μετά λέω να κάνω και το

subu s1, zero, s0 ώστε να έχω στον s1 το 0χffffffff και να το χρησιμοποιώ με την

andi sx , s1, κάποιον αριθμό ώστε να έχω όποιο νούμερο χρειάζομαι. Στο modelsim θα το κάνω unsigned και θα είμαι οκ αλλά θέλει να του δείξουμε και στον pcspim τα αποτελέσματα και εκεί μου βγάζει τον s1 ως -1 και απλά ήθελα να μου πει κάποιος αν ξέρει πως γίνεται αντί για το -1 να βγάζει το 4,294,967,295.

post-32975-129063066098_thumb.jpg

Δημοσ.
Αυτά τα έχω φτιάξει σύμφωνα με την θεωρία και πιο συγκεκριμένα το datapath το έχω κάνει χρησιμοποιώντας πύλες σε schematic και το control unit σε VHDL.

 

ποιος ο λόγος να κάνεις το μισό σε schematic drawing; Το schematic drawing στην ψηφιακή σχεδίαση το χρησιμοποιούσαμε πριν 15+ χρόνια! Άλλωστε αυτός είναι ο λόγος που υπάρχουν οι γλώσσες περιγραφής υλικού και τα εργαλεία λογικής σύνθεσης! :-)

Δημοσ.
ποιος ο λόγος να κάνεις το μισό σε schematic drawing; Το schematic drawing στην ψηφιακή σχεδίαση το χρησιμοποιούσαμε πριν 15+ χρόνια! Άλλωστε αυτός είναι ο λόγος που υπάρχουν οι γλώσσες περιγραφής υλικού και τα εργαλεία λογικής σύνθεσης! :-)

 

 

Δίκιο έχεις αλλά σε αυτό το μάθημα όταν σου ζητάει το πρώτο κομμάτι δεν έχεις μάθει vhdl και για αυτό πρέπει να την κάνουμε έτσι.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...