footballer20 Δημοσ. 20 Μαρτίου 2011 Share Δημοσ. 20 Μαρτίου 2011 Καλησπέρα... Θα ήθελα να σχεδιάσω ένα καταχωρητή 4 bits με σειριακή είσοδο και παράλληλη έξοδο σε Verilog ο οποίος να έχει ασύγχρονη είσοδο καθαρισμού(reset)...Πως μπορώ να κάνω ταυτόχρονα reset όλα τα flip flops του καταχωρητή???Χρησιμοποιώντας την εντολή {if(reset) q<=4'b0000;} μου μηδενίζει τα flip flops όπως βλέπω στις κυματομορφές αλλά το κάνει σταδιακά(φαίνεται σα να ολισθαίνει το πρώτο 0 στα υπόλοιπα) και δεν τα μηδενίζει όλα ταυτόχρονα....Σκέφτηκα μήπως έκανα προσπέλαση ξεχωριστά σε όλα flip flops αλλά τα έχω δηλώσει ως q[3:0] (διανύσματα δηλαδή) και δεν καταφέρνω να έχω πρόσβαση σε κάθε μία συνιστώσα για να τη μηδενίσω...Καμιά ιδέα?? Σας ευχαριστώ εκ των προτέρων για το χρόνο σας και αναμένω τις απαντήσεις σας... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Dr.Fuzzy Δημοσ. 20 Μαρτίου 2011 Share Δημοσ. 20 Μαρτίου 2011 Καλησπέρα... Θα ήθελα να σχεδιάσω ένα καταχωρητή 4 bits με σειριακή είσοδο και παράλληλη έξοδο σε Verilog ο οποίος να έχει ασύγχρονη είσοδο καθαρισμού(reset)...Πως μπορώ να κάνω ταυτόχρονα reset όλα τα flip flops του καταχωρητή???Χρησιμοποιώντας την εντολή {if(reset) q<=4'b0000;} μου μηδενίζει τα flip flops όπως βλέπω στις κυματομορφές αλλά το κάνει σταδιακά(φαίνεται σα να ολισθαίνει το πρώτο 0 στα υπόλοιπα) και δεν τα μηδενίζει όλα ταυτόχρονα....Σκέφτηκα μήπως έκανα προσπέλαση ξεχωριστά σε όλα flip flops αλλά τα έχω δηλώσει ως q[3:0] (διανύσματα δηλαδή) και δεν καταφέρνω να έχω πρόσβαση σε κάθε μία συνιστώσα για να τη μηδενίσω...Καμιά ιδέα?? Σας ευχαριστώ εκ των προτέρων για το χρόνο σας και αναμένω τις απαντήσεις σας... Δες ένα παράδειγμα ενός 8-bit register με ασύγχρονο reset για να καταλάβεις: > module 8BIT_REG( DI, CLK, RST, DO); input [7:0] DI; input CLK, RST; output [7:0] DO; reg [7:0] DO; always @( posedge CLK or posedge RST) if (RST == 1'b1) DO = 8'b00000000; else DO = DI; endmodule Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
footballer20 Δημοσ. 21 Μαρτίου 2011 Μέλος Share Δημοσ. 21 Μαρτίου 2011 Ναι κάτι παρόμοιο είχα γράψει και εγώ, απλά το πρόβλημά μου είναι ότι στις κυματομορφές ο καταχωρητής δεν μηδενίζεται αμέσως μόλις εφαρμόζεται reset=0 αλλά σταδιακά μηδενίζεται(1111 -> 0111 -> 0011 -> 0001 -> 0000) και δεν ξερω κατά πόσο είναι σωστό αυτό αφού το reset είναι ασύγχρονο...Μπορεί να είναι και θέμα του testbench μου αφού ο κώδικάς φαίνεται σωστός.... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Dr.Fuzzy Δημοσ. 21 Μαρτίου 2011 Share Δημοσ. 21 Μαρτίου 2011 Ναι κάτι παρόμοιο είχα γράψει και εγώ, απλά το πρόβλημά μου είναι ότι στις κυματομορφές ο καταχωρητής δεν μηδενίζεται αμέσως μόλις εφαρμόζεται reset=0 αλλά σταδιακά μηδενίζεται(1111 -> 0111 -> 0011 -> 0001 -> 0000) και δεν ξερω κατά πόσο είναι σωστό αυτό αφού το reset είναι ασύγχρονο...Μπορεί να είναι και θέμα του testbench μου αφού ο κώδικάς φαίνεται σωστός.... Κάτι λάθος στο tb σου είναι. Το ασύγχρονο με το σύγχρονο reset επίσης δεν έχει σχέση με αυτό που περιγράφεις. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
footballer20 Δημοσ. 22 Μαρτίου 2011 Μέλος Share Δημοσ. 22 Μαρτίου 2011 Κάτι λάθος στο tb σου είναι. Το ασύγχρονο με το σύγχρονο reset επίσης δεν έχει σχέση με αυτό που περιγράφεις. Πώς θα πρέπει τότε να είναι το testbench ώστε να φαίνεται ότι το reset είναι ασύγχρονο??? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Dr.Fuzzy Δημοσ. 22 Μαρτίου 2011 Share Δημοσ. 22 Μαρτίου 2011 Πώς θα πρέπει τότε να είναι το testbench ώστε να φαίνεται ότι το reset είναι ασύγχρονο??? Κάνε post το tb σου να σου πω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
footballer20 Δημοσ. 22 Μαρτίου 2011 Μέλος Share Δημοσ. 22 Μαρτίου 2011 Κάνε post το tb σου να σου πω. Αυτό έχω γράψει ως testbench: module SIPO_register_testbench; reg clk; reg clr; reg sin; wire [3:0] q; SIPO_register S0(clk,clr,sin,q); always #100 clk=~clk; initial begin clk=1'b0; clr=1'b0; #400 sin=1'b0; #800 sin=1'b1; #1500 clr=1'b1; end initial #7000 $finish; endmodule Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Dr.Fuzzy Δημοσ. 23 Μαρτίου 2011 Share Δημοσ. 23 Μαρτίου 2011 Αυτό έχω γράψει ως testbench: module SIPO_register_testbench; reg clk; reg clr; reg sin; wire [3:0] q; SIPO_register S0(clk,clr,sin,q); always #100 clk=~clk; initial begin clk=1'b0; clr=1'b0; #400 sin=1'b0; #800 sin=1'b1; #1500 clr=1'b1; end initial #7000 $finish; endmodule Το ασύγχρονο με το σύγχρονο reset δεν έχει καμία σχέση με αυτό που περιγράφεις ως πρόβλημα, σου το έγραψα και παραπάνω! Αν κρίνω από το όνομα του σήματος στο ΤΒ σου αυτό που έχεις υλοποιήσει είναι CLEAR και οχι RST. Τελικά τι είναι; Κανε post και τον κώδικα του καταχωρητή και βάλτους σε Tags για να διαβάζονται. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.