ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ ΣΧΟΛΗ ΟΙΚΟΝΟΜΙΑΣ, ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ Αναφορά 2ης εργαστηριακής άσκησης: Απόδειξη Ισοδυναμίας Συναρτήσεων ΑΘΑΝΑΣΙΟΣ ΛΑΓΙΟΚΑΠΑΣ Α.Μ.: 2022201400117 Εαρινό εξάμηνο 2014-2015
Περιεχόμενα Περιεχόμενα... 2 Στόχος... 3 Μεθοδολογία... 3 Αναλυτική απόδειξη... 5 Απόδειξη με πίνακα αληθείας... 10 Συμπεράσματα... 11 2
Στόχος Ο γενικός στόχος της άσκησης είναι η απόδειξη της ισοδυναμίας των τεσσάρων συναρτήσεων μέσω προσομοίωσης. Δηλαδή εφόσον υλοποιήσουμε τον πίνακα αληθείας κάθε συνάρτησης και κάνουμε την αναλυτική παράστασή της κάθε μιας στον προσομοιωτή θα πρέπει εφόσον τα έχουμε καταγράψει όλα σωστά στον προσομοιωτή να μας βγάζει τα αποτελέσματα κάθε συνάρτησης και να δούμε ποιες είναι ισοδύναμες, άμα υπάρχουν ισοδύναμες συναρτήσεις. Μεθοδολογία Από κάθε συνάρτηση βγάζουμε το αντίστοιχο κύκλωμα το οποίο προκύπτει από τις πράξεις που περιέχει κάθε συνάρτηση. Για παράδειγμα η πράξη (*) αντιστοιχεί σε πύλη (and), η πράξη (+) αντιστοιχεί σε πύλη (or), ενώ όταν κάποια μεταβλητή είναι σε τόνο (a ), αυτό σημαίνει ότι πριν φτάσει στην πύλη έχει περάσει από πύλη (not) και έχει αλλάξει την τιμή της από 1 σε 0 ή αντίστροφα. Στην συνέχεια δημιουργούμε τον αντίστοιχο πίνακα αληθείας του κυκλώματος ώστε να δούμε τα αποτελέσματα για κάθε διαφορετικό συνδυασμό εισόδων των μεταβλητών. Τέλος αφού έχουμε κάνει όλα αυτά μέσα στον προσομοιωτή και τον έχουμε κανει build και δεν έχει κάποιο (error) μπορούμε να το τρέξουμε και να συγκρίνουμε τις συναρτήσεις για το άμα είναι ισοδύναμες ή όχι. 3
Αναλυτική απόδειξη Αρχικά δημιουργούμε την αποτύπωση του κάθε κυκλώματος στον προσομοιοτή. Η αποτύπωση του κυκλώματος της f 1(a,b,c,d)=a*b'+b*a' είναι το εξής: a wire _ not _ b b gate _ and _ 1 wire _ 3 out 1 c gate _ not _ b wire _ 4 Gate _ or d gate _ not _ a wire _ not _ a gate _ and _ 2 module ex_first(out1,a,b,c,d); input a,b,c,d; output out1; wire wire_not_a,wire_not_b,wire_3,wire_4; and gate_and_1(wire_3,wire_not_b,a); not gate_not_b(wire_not_b,b); or gate_or(out1,wire_3,wire_4); not gate_not_a(wire_not_a,a); and gate_and_2(wire_4,wire_not_a,b); endmodule 4
εξής: Η αποτύπωση του κυκλώματος της συνάρτησης f 2(a,b,c,d)=(a*b+a'*b')' είναι η gate _ not _ a a wire _ not _ a gate _ not _ 1 wire _ not _ b wire _ 3 gate _ not _ b b gate _ or out 2 wire _ 5 c wire _ 4 b gate _ not _ 2 module ex_second(out2,a,b,c,d); input a,b,c,d; output out2; wire wire_not_a,wire_not_b,wire_3,wire_4,wire_5; not gate_not_a(wire_not_a,a); not gate_not_b(wire_not_b,b); not gate_not_ot(out2,wire_5); and gate_and_1(wire_3,wire_not_a,wire_not_b); and gate_and_2(wire_4,a,b); or gate_or(wire_5,wire_3,wire_4); endmodule 5
Η αποτύπωση του κυκλώματος της συνάρτησης f 3(a,b,c,d)=(a+c')' είναι η εξής: a b gate _ or gate _ not _ or out 3 c wire _ not _ c Wire _ 2 d gate _ not _ c module ex_third(out3,a,b,c,d); input a,b,c,d; output out3; wire wire_not_c,wire_2; not gate_not_c(wire_not_c,c); or gate_or(wire_2,wire_not_c,a); not gate_not_or(out3,wire_2); endmodule 6
Το κύκλωμα της συνάρτησης f 4(a,b,c,d)=a'c είναι το εξής: a gate _ not _ a b wire _ not _ a gate _ and out 3 c d module ex_third(out3,a,b,c,d); input a,b,c,d; output out3; wire wire_not_a; not gate_not_a(wire_not_a,a); and gate_and(out3,wire_not_a,c); endmodule Τέλος εφόσον έχουμε σχηματίσει με τους κώδικες όλες τις αποτυπώσεις τον κυκλωμάτων στον προσομοιοτή πρέπει μέσα από τον οδηγό προσομοίοσης να δηλώσουμε όλες τις εισόδους και εξόδους καθώς και τον πίνακα αληθείας και τον χρόνο με τον οποίο θα εναλλάσσονται οι τιμές του πίνακα αληθείας στα κυκλώματα. Αυτό γίνεται ως εξής: 7
module test(); reg first_in,second_in,third_in,fourth_in; wire out1,out2,out3,out4; ex_first circuit(out1,first_in,second_in,third_in,fourth_in); ex_second circuit(out2,first_in,second_in,third_in,fourth_in); ex_third circuit(out3,first_in,second_in,third_in,fourth_in); ex_fourth circuit(out4,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 8
Απόδειξη με πίνακα αληθείας Ο πίνακας αληθείας τον συναρτήσεων είναι ο εξής: a b c d f1 f2 f3 f4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 9
Συμπεράσματα Τόσο από τον πίνακα αληθείας όσο και από τα αποτελέσματα της προσομοίοσης προκύπτει ότι η συνάρτηση f1 είναι ισοδύναμη με την συνάρτηση f2 και η f3 με την f4 αλλά χωρίς να έχουν το ίδιο ακριβώς κύκλωμα, δηλαδή μπορεί να έχουν διαφορετικό κόστος κατασκευής ή χρόνο υλοποίησης.0 10