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

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

Δημοσ. (επεξεργασμένο)

Εχω ενα μαθημα στο πανεπιστημιο το μαθημα της λογικης σχεδιασης οπου κανουμε προσομοιωση κυκλωματων με το προγραμμα synapitcad ,το προβλημα ειναι οτι κανουμε μονο θεωρια κ στο εργαστηριο δεν μας εχουν δειξει τιποτα για το synapitcad μονο φαιρνουμε εργασιες που μας βαζουν κ οτι γινει.

 

-Ελεγχος ισοδυναμιας 

Ζητουμενο της ασκησης ειναι να ελεγχθει μεσω προσομοιωσης ποιες απο τις ακολουθες συναρτησεις ειναι ισοδυναμες.

 

f1(a,b,c,d) = ab'+ba'

f2(a,b,c,d) = (ab+a'b')'

f3(a,b,c,d) = (a+c')'

f4(a,b,c,d) = a'c

 

σχεδιασα ενα κυκλωμα για καθε συναρτηση ,στη συνεχεια εκανα αποτυπωση του κυκλωματος με γλωσσα HDL ,τελος κανουμε μοναδα δοκιμης κ βαζουμε τιμες στο κυκλωμα,

τα εκανα compile τα ετρεξα κ μου εβγαλε αυτο που βλεπετε

 

για να δω αν οι συναρτησεις ειναι ισες θα δω αν η εξοδοι του κυκλωματος ειναι ιδιες,δηλαδη εχουν τις ιδιες κυματομορφες με τιμες 0 κ 1 τις καταλληλες χρονικες στιγμες,το προβλημα μου ειναι οτι το αποτελεσμα της προσομοιωσης ,δε το καταλαβαινω πολυ καλα,οποιος ξερει κατι ας βοηθησει

 

το αποτελεσμα της εξοδου(test1.out) για τη πρωτη συναρτηση το καταλαβαινω δεν εχω προβλημα,με βαση το πινακα αληθειας που εκανα ,μου εβγαζε σωστες τις κυματομορφες .Τις υπολοιπες εξοδους δεν καταλαβαινω η test2.out δεν θα επρεπε να βγαζει μονο τιμη 0 ,αφου στα 40 ns γινεται 1  a = 0 b = 1 συναρτηση θα επρεπε να βγαζει 1,στο test3.out γιατι ειναι σκιασμενη η κυματομορφη,το test4.out

δεν θα επρεπε να γινει μια φορα 1 γιατι ειναι μονο 0.

post-365637-0-00600100-1446366514_thumb.jpg

Επεξ/σία από orestis1996
Δημοσ.

βρηκα κατι γιατι ειναι η κυματομορφη γκρι "The gray region shows the uncertainty region for when the data may or may not be valid. These uncertainty regions grow in width as a logic value passes through different stages of a circuit." δεν το πολυ καταλαβα

Δημοσ.

Σε τι γλώσσα HDL το έχεις υλοποιήσει το κύκλωμα; To gray region απλά σημαίνει ότι είναι don't care ή έχεις πολλαπλούς οδηγούς πάνω στο συγκεκριμένο σήμα. Όπως και να έχει κάνε post τον κώδικα σου για να δούμε τι πάει λάθος.

Δημοσ.

Σε τι γλώσσα HDL το έχεις υλοποιήσει το κύκλωμα; To gray region απλά σημαίνει ότι είναι don't care ή έχεις πολλαπλούς οδηγούς πάνω στο συγκεκριμένο σήμα. Όπως και να έχει κάνε post τον κώδικα σου για να δούμε τι πάει λάθος.

Χρησιμοποιω HDL Verilog

 

Για τη συναρτηση f2(a,b,c,d) = (ab+a'b')' 

module second_circuit(the_output,a,b,c,d);
	
	input a,b,c,d;
	output the_output;

	wire wire_3,wire_4,wire_not_b,wire_not_a,wire_or;

	not gate_not_1(wire_not_a,a);
	and gate_and_1(wire_3,wire_not_b,a);
	not gate_not_2(wire_not_b,;
	and gate_and_2(wire_4,b,wire_not_a);

endmodule

module test2();

	reg first_in, second_in, third_in, fourth_in;
	wire out;

	second_circuit circuit(out, first_in, second_in, third_in, fourth_in);

	initial begin 
		first_in=0; second_in=0; third_in=0; fourth_in=0; #10
		first_in=0; second_in=0; third_in=0; fourth_in=1; #10
		first_in=0; second_in=0; third_in=1; fourth_in=0; #10
		first_in=0; second_in=0; third_in=1; fourth_in=1; #10
		first_in=0; second_in=1; third_in=0; fourth_in=0; #10
		first_in=0; second_in=1; third_in=0; fourth_in=1; #10
		first_in=0; second_in=1; third_in=1; fourth_in=0; #10
		first_in=0; second_in=1; third_in=1; fourth_in=1; #10
		first_in=1; second_in=0; third_in=0; fourth_in=0; #10
		first_in=1; second_in=0; third_in=0; fourth_in=1; #10
		first_in=1; second_in=0; third_in=1; fourth_in=0; #10
		first_in=1; second_in=0; third_in=1; fourth_in=1; #10
		first_in=1; second_in=1; third_in=0; fourth_in=0; #10
		first_in=1; second_in=1; third_in=0; fourth_in=1; #10
		first_in=1; second_in=1; third_in=1; fourth_in=0; #10
		first_in=1; second_in=1; third_in=1; fourth_in=1; #10
		$finish;
	end

endmodule

Για τη συναρτηση f3(a,b,c,d) = (a+c')'

module third_circuit(the_output,a,b,c,d);

	input a,b,c,d;
	output the_output;
	
	wire wire_not,wire_or;
	
	not	gate_not(wire_not,c);
	or	gate_or(wire_or,a,wire_not_1);
	not	gate_not(the_output,wire_or);

endmodule

module test3();

	reg first_in, second_in, third_in, fourth_in;
	wire out;

	third_circuit circuit(out, first_in, second_in, third_in, fourth_in);

	initial begin 
		first_in=0; second_in=0; third_in=0; fourth_in=0; #10
		first_in=0; second_in=0; third_in=0; fourth_in=1; #10
		first_in=0; second_in=0; third_in=1; fourth_in=0; #10
		first_in=0; second_in=0; third_in=1; fourth_in=1; #10
		first_in=0; second_in=1; third_in=0; fourth_in=0; #10
		first_in=0; second_in=1; third_in=0; fourth_in=1; #10
		first_in=0; second_in=1; third_in=1; fourth_in=0; #10
		first_in=0; second_in=1; third_in=1; fourth_in=1; #10
		first_in=1; second_in=0; third_in=0; fourth_in=0; #10
		first_in=1; second_in=0; third_in=0; fourth_in=1; #10
		first_in=1; second_in=0; third_in=1; fourth_in=0; #10
		first_in=1; second_in=0; third_in=1; fourth_in=1; #10
		first_in=1; second_in=1; third_in=0; fourth_in=0; #10
		first_in=1; second_in=1; third_in=0; fourth_in=1; #10
		first_in=1; second_in=1; third_in=1; fourth_in=0; #10
		first_in=1; second_in=1; third_in=1; fourth_in=1; #10
		$finish;
	end

endmodule

Για τη συναρτηση f4(a,b,c,d) = a'c

module fourth_circuit(the_output,a,b,c,d);

	input a,b,c,d;
	output the_output;
	
	wire wire_not,wire_and;
	
	not gate_not(wire_not,a);	
	and gate_and(wire_and,c,wire_not);

endmodule

module test4();

	reg first_in, second_in, third_in, fourth_in;
	wire out;

	fourth_circuit circuit(out, first_in, second_in, third_in, fourth_in);

	initial begin 
		first_in=0; second_in=0; third_in=0; fourth_in=0; #10
		first_in=0; second_in=0; third_in=0; fourth_in=1; #10
		first_in=0; second_in=0; third_in=1; fourth_in=0; #10
		first_in=0; second_in=0; third_in=1; fourth_in=1; #10
		first_in=0; second_in=1; third_in=0; fourth_in=0; #10
		first_in=0; second_in=1; third_in=0; fourth_in=1; #10
		first_in=0; second_in=1; third_in=1; fourth_in=0; #10
		first_in=0; second_in=1; third_in=1; fourth_in=1; #10
		first_in=1; second_in=0; third_in=0; fourth_in=0; #10
		first_in=1; second_in=0; third_in=0; fourth_in=1; #10
		first_in=1; second_in=0; third_in=1; fourth_in=0; #10
		first_in=1; second_in=0; third_in=1; fourth_in=1; #10
		first_in=1; second_in=1; third_in=0; fourth_in=0; #10
		first_in=1; second_in=1; third_in=0; fourth_in=1; #10
		first_in=1; second_in=1; third_in=1; fourth_in=0; #10
		first_in=1; second_in=1; third_in=1; fourth_in=1; #10
		$finish;
	end

endmodule

Για τη δευτερη συναρτηση f2(a,b,c,d) = (ab+a'b')'

για το ab  εφτιαξα μια πυλη AND 

για τα a'b' εφτιαξα μια πυλη AND οπου εχει ως εισοδους δυο πυλες NOT ,οποτε φτιαχνουμε μια πυλη NOT για το a  μια πυλη NOT για το b 

ab+a'b' εβαλα μια OR που εχεις ως εισοδους τις δυο πυλες AND

τελος επειδη εχει το ' ,(ab+a'b')'  εβαλα μια NOT

Για τη συναρτηση f3(a,b,c,d) = (a+c')' 

Για το a+c' φτιαχνω μια πυλη OR οπου εχεις ως εισοδου το a και το c' (που ειναι μια πυλη NOT με εισοδο c)

Για το (a+c')' φτιανω μια πυλη NOT με εισοδο το OR

Για τη συναρτηση f4(a,b,c,d) = a'c 

για το a'c εκανα μια πυλη AND  με εισοδους a' ,c .  

το a' ειναι μια πυλη NOT με εισοδο a

 

εχω σχεδιασει λαθος τα κυκλωματα με βαση τις συναρτησεις που δινονται?

Δημοσ.
wire wire_not,wire_or;

    ...

    not    gate_not(wire_not,c);

    or    gate_or(wire_or,a,wire_not_1);

 

Στο third_circuit το wire_not_1 δεν το έχεις δηλώσει. Γιαυτό είναι undefined η έξοδος σου. Λογικά ο κώδικας σου δεν πρέπει να κάνει καν compile.

 

Επίσης θα μπορούσες πολύ πιο έυκολα να υλοποιήσεις τις λογικές εξισώσεις σε μια ανάθεση με λογικούς τελεστές και όχι με περιγραφή σε επίπεδο πυλών. Πολύ συνοπτικά, ο σκοπός των γλωσσών περιγραφής υλικού δεν είναι να κάνουμε schematic drawing, αλλά να χρησιμοποιούμε τα επίπεδα αφαίρεσης που μας προσφέρουν προκειμένου να περιγράψουμε ένα κύκλωμα και να αφήσουμε το εργαλείο σύνθεσης να το υλοποιήσει.

Δημοσ.

Στο third_circuit το wire_not_1 δεν το έχεις δηλώσει. Γιαυτό είναι undefined η έξοδος σου. Λογικά ο κώδικας σου δεν πρέπει να κάνει καν compile.

 

Οντως εχεις δικιο δε το εχω δηλωσει ,οταν το εκανα compile γιατι δεν μου εβγαλε error?

το δηλωσα το wire_not_1  εκανα compile το ετρεξα κ μου εβγαλε το ιδιο

Δημοσ.

Πρέπει να σου έβγαλε, ξανά κάνε compile και δες καλύτερα το log. Μάλλον όταν κάνεις simulation απλά χρησιμοποιείς παλιό compilation μέσα στη work σου.

Δημοσ.

 

Επίσης θα μπορούσες πολύ πιο έυκολα να υλοποιήσεις τις λογικές εξισώσεις σε μια ανάθεση με λογικούς τελεστές και όχι με περιγραφή σε επίπεδο πυλών. 

Μου προτεινεις να κανω τις συναρτησεις με τις εκφρασεις bool?

assign f1 = (ab'&&ba') 

δεν το εχω δοκιμασει αμα το κανω θα μου βγαλει το σωστο αποτελεσμα που θελω ή ειναι κατι αλλο

Πρέπει να σου έβγαλε, ξανά κάνε compile και δες καλύτερα το log. Μάλλον όταν κάνεις simulation απλά χρησιμοποιείς παλιό compilation μέσα στη work σου.

οχι στο παραθυρο Report - Messages Errors 0

 

και κατω κατω μου βγαζει simulation Good

Δημοσ.

σου λέω ότι είναι προτιμότερο να γράφεις dataflow περιγραφή παρά gate-level, διότι στη δεύτερη περίπτωση το εργαλείο σύνθεσης δεν μπορεί να κάνει σωστό optimization στο κύκλωμα σου. Για να σου βγάλει σωστό αποτέλεσμα θα πρέπει ανεξαρτήτως πως θα το περιγράψεις να είναι σωστό το μοντέλο σου.

 

Καθαρά φιλικά καλό είναι να το πιάσεις απο την αρχή διότι έχεις ελλείψεις σε βασικές έννοιες.

Δημοσ.

σου λέω ότι είναι προτιμότερο να γράφεις dataflow περιγραφή παρά gate-level, διότι στη δεύτερη περίπτωση το εργαλείο σύνθεσης δεν μπορεί να κάνει σωστό optimization στο κύκλωμα σου. Για να σου βγάλει σωστό αποτέλεσμα θα πρέπει ανεξαρτήτως πως θα το περιγράψεις να είναι σωστό το μοντέλο σου.

 

Καθαρά φιλικά καλό είναι να το πιάσεις απο την αρχή διότι έχεις ελλείψεις σε βασικές έννοιες.

Στις διαλεξεις κανουμε λιγο θεωρια κ κανουμε κυριως ασκησεις (συμπληρωμα,πινακα αληθειας,ελαχιστοποιηση κυκλωματος),δεν μας λενε πραγματα παραπανω λεπτομεριες πανω στα κυκλωματα για να μαθουμε πως λειτουργουν ,κανουμε εργαστηριο οπου δινουμε τις ασκησεις που εχουμε φτιαξει κ αυτο τιποτα αλλο .Εχω κενα οχι γιατι δεν καθησα να διαβασω ουτε γιατι ειπαν κατι κ δε το επιασα αλλα επειδη δεν γινεται το μαθημα οπως πρεπει.

Στις διαλεξεις κανουμε λιγο θεωρια κ κανουμε κυριως ασκησεις (συμπληρωμα,πινακα αληθειας,ελαχιστοποιηση κυκλωματος),δεν μας λενε πραγματα παραπανω λεπτομεριες πανω στα κυκλωματα για να μαθουμε πως λειτουργουν ,κανουμε εργαστηριο οπου δινουμε τις ασκησεις που εχουμε φτιαξει κ αυτο τιποτα αλλο .Εχω κενα οχι γιατι δεν καθησα να διαβασω ουτε γιατι ειπαν κατι κ δε το επιασα αλλα επειδη δεν γινεται το μαθημα οπως πρεπει.

κ τι κανουν οι περισσοτεροι που παιρνουν το μαθημα αυτο,παιρνουν τις ασκησεις ετοιμες απο καποιον που ειναι μεγαλυτερο ετος κ τις εχει λυσει

Δημοσ.

Έστω ότι είναι έτσι, είναι όμως στο χέρι σου να διαβάσεις ένα απο τα πολλά βιβλία που υπάρχουν, παρουσιάσεις απο άλλα πανεπιστήμια, κλπ, κλπ που μπορείς να βρείς εύκολα με μια αναζήτηση στο google.

  • 2 μήνες μετά...
Δημοσ.

Είμαι άσχετος με το συγκεκριμένο πρόγραμμα αλλά μια ιδέα για αυτό: (a+c')'

αν τα ' είναι Not (ή invert για τις πύλες), τότε το C' είναι η αρνητική είσοδος..υπάρχουν τέτοιες στις πύλες...ενώ το ( )' είναι αρνητική έξοδος. Η διαφορά είναι στο χρόνο μεταξύ εισόδου και εξόδου. τα a, c' αν έρχονται σε χρόνο Α τότε το ( )' ΄βγαίνει σε χρόνο Α2 όπου το Α2-Α είναι ο χρόνος που από την είσοδο έχουμε έξοδο!

Μήπως λοιπόν η γλώσσα παραπάνω έχει τρόπο να δώσει εισόδους αρνητικές (negate) και εξόδους επίσης. Διότι αν είναι έτσι τότε τα 

a, b και c πρέπει να έχουν δυο εξόδους, μια κανονική και μια αντεστραμμένη, άρα λέμε για 3 πηγές με έξι συνολικά εξόδους που πηγαίνουν σε τέσσερα κυκλώματα; 

Προφανώς λοιπόν για να δούμε την ισοδυναμία πρέπει να ξεχωρίσουμε τα κυκλώματα με τις πηγές...τα δυο πρώτα από τα δυο δεύτερα. Το πρώτο με το τελευταίο δεν έχουν ίδιες πηγές..άρα τι ισοδυναμία να δω;

Τα f3 με f4 είναι ισοδύναμα! Απλά στο f3 κοιτάμε την αντεστραμμένη έξοδο.

Το ίδιο και τα f1 με f2.

Δημοσ.

Φιλαρακι να σε ρωτησω :P Ετσι απο περιεργια, σε ποιο πανεπιστημιο πηγαινεις? :P

..."πηγαίνω" αλλά ως καθηγητής όχι ως φοιτητής.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...