eleonora Δημοσ. 18 Μαΐου 2006 Δημοσ. 18 Μαΐου 2006 Καλησπέρα, Εχω φτιάξει τον ακόλουθο κώδικα σε behavioral verilog για την υλοποίηση με hardware της διαίρεσης 2 αριθμών ,ενός οχτάμπιτου διαιρεταίου και ενός τετράμπιτου διαιρέτη. >module simple_divider(quotient,remainder,ready,dividend,divider,start,clk); input [7:0] dividend; input [3:0] divider; input start, clk; output quotient,remainder; output ready; reg [7:0] quotient; reg [7:0] dividend_copy,diff; reg [3:0] divider_copy; wire [7:0] remainder = dividend_copy[7:0]; reg [3:0] bit; wire ready = !bit; initial bit = 0; always @( posedge clk ) if( ready && start ) begin bit = 8; quotient = 0; dividend_copy = {8'd0,dividend}; divider_copy = {1'b0,divider,7'd0}; end else begin diff = dividend_copy - divider_copy; quotient = quotient << 1; if( !diff[7] ) begin dividend_copy = diff; quotient[0] = 1'd1; end divider_copy = divider_copy >> 1; bit = bit - 1; end endmodule Στην εξομοίωση όμως δεν βγαζει επιθυμητό αποτέλεσμα:evil: .Μήπως κανείς μπορεί να μου επισημάνει τυχόν αλλαγές που πρέπει να κάνω?Μήπως υπάρχει εναλλακτικός τρόπος?
chris_4 Δημοσ. 19 Μαΐου 2006 Δημοσ. 19 Μαΐου 2006 Δεν καταλαβαινω καλα τον κωδικα που έχεις γραψει, παντως (αν το reg ειναι καταχωρητης αν καταλαβα καλα) για την διαιρεση 8bitου με 4bitου σίγουρα χρειαζεσαι καποια ολισθηση των bits, δε βλεπω καμια τετοια εντολη. έχω λυσεις για τετουου ειδους προβληματα αλλα επεξεργαστης είναι ο aim6502. προσέξe να παιρνεις τα MSB του διαιρεταιου πρώτα (αφου ο διαιρέτης εχει 4 bit)- ολισθηση -σωνεις -λουπα -και τελος προσθεση.(καπωσ ετσι πρεπει να το πας)
Sta Δημοσ. 20 Μαΐου 2006 Δημοσ. 20 Μαΐου 2006 Δώσε λίγο τον αλγόριθμο για τη συγκεκριμένη διαίρεση και το επανεξετάζω για να σε βοηθήσω.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.