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

Behavioral verilog for a divider


eleonora

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

Καλησπέρα,

 

Εχω φτιάξει τον ακόλουθο κώδικα σε 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: .Μήπως κανείς μπορεί να μου επισημάνει τυχόν αλλαγές που πρέπει να κάνω?Μήπως υπάρχει εναλλακτικός τρόπος?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν καταλαβαινω καλα τον κωδικα που έχεις γραψει, παντως (αν το reg ειναι καταχωρητης αν καταλαβα καλα) για την διαιρεση 8bitου με 4bitου σίγουρα χρειαζεσαι καποια ολισθηση των bits, δε βλεπω καμια τετοια εντολη. έχω λυσεις για τετουου ειδους προβληματα αλλα επεξεργαστης είναι ο aim6502. προσέξe να παιρνεις τα MSB του διαιρεταιου πρώτα (αφου ο διαιρέτης εχει 4 bit)- ολισθηση -σωνεις -λουπα -και τελος προσθεση.(καπωσ ετσι πρεπει να το πας)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

Χρησιμοποιούμε  cookies για να απολαμβάνεις το insomnia προσωποποιημένο στις ανάγκες σου αλλά και για την παροχή στοιχείων επισκεψιμότητας για να βελτιώσουμε την ποιότητα των υπηρεσιών μας