Αποστολέας Θέμα: Απορία σε λογικά κυκλώματα  (Αναγνώστηκε 5093 φορές)

0 μέλη και 1 επισκέπτης διαβάζουν αυτό το θέμα.

stereodata

  • Mobster
  • *
  • Μηνύματα: 10
    • Προφίλ
Απορία σε λογικά κυκλώματα
« στις: Μαΐου 12, 2007, 09:29:23 μμ »
Καλησπέρα σε όλους.

Εχω το εξης πρόβλημα . Θέλω να φτιαξω ένα συνδυαστικό κύκλωμα που θα δέχεται στην είσοδο ένα μη προσημασμένο αριθό των 3 δυαδικών ψηφίων (Α=Α2Α1Α0) και θα παράγει στην έξοδο S είτε τον αριθμό Α είτε το αποτέλεσμα της αριθμητικής πράξης Α+2, ανάλογα με την τιμή μίας εισόδου επιλογής G (G=0 => S=A, G=1 => S=A+2).

Πρεπει να χρησιμοποιήσω  αποκωδικοποιητές 2‐σε‐4 (χωρίς είσοδο επίτρεψης) και λογικές πύλες OR 2 εισόδων.

 Εχει κανεις κάποια ιδεα πως μπορει να γινει? Θα εκτιμουσα την βοηθεια οποιου γνωριζει , στο πως θα μπορουσε να υπολοιηθει το κυκλωμα με αυτον τον τροπο , πως θα ειναι δηλαδη το λογικο του διαγραμμα. Μετα η Verilog γραφεται...
« Τελευταία τροποποίηση: Μαΐου 16, 2007, 01:16:43 μμ από stereodata »

u_quark

  • Don
  • *****
  • Μηνύματα: 643
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #1 στις: Μαΐου 13, 2007, 03:43:55 πμ »
Νομίζω ότι η απορία σου ξεφεύγει λίγο από το περιεχόμενο αυτού του forum και της κοινότητας (εκτός και αν τον κώδικα Verilog τον δόσεις με GPL ;D). Παρόλα αυτά για να ικανοποιήσω και εγώ το ψώνιο μου στην Λογική Σχεδίαση:

Ας πούμε S' το S' = A + 2. Αυτό γενικά είναι μία συνάρτηση 4ων bits ή ένας 3bitος αριθμός και ένα κρατούμενο όπως θες θεώρησε το. Ο πίνακας αληθείας του S' είναι:
A2A1A0S'3S'2S'1S'0
0000010
0010011
0100100
0110101
1000110
1010111
1101000
1111001

Τα S'3, S'2 και S'1 είναι ανεξάρτητα του A0 ενώ το S'0 είναι ίσο με το A0. Άρα μένει να υλοποιηθεί το μικρότερο:
A2A1S'3S'2S'1
00001
01010
10011
11100

Το οποίο εύκολα υλοποιείτε με έναν αποκωδικοποιητή 2-σε-4 και 2 πύλες OR (δες παρακάτω στο σχήμα).

Τώρα το τελικό αποτέλεσμα S είναι (κατά κάποιον τρόπο): S = ~G*A + G*S'. Για την υλοποίηση των συναρτήσεων AND και AND με μία είσοδο ανεστραμμένη, μπορεί να χρησιμοποιηθεί μια έξοδος του αποκωδικοποιητή 2-σε-4. Άρα τελικά το διάγραμμα έχει ως εξής:


http://foss.ntua.gr/wiki/images/Kikloma_tou_stereodata.png

Είναι πιθανόν να υπάρχει και ποιο βέλτιστη λύση. Δεν είμαι και 100% σίγουρος για την ορθότητα αυτής :P. Σχετικά με Verilog δεν ξέρω τίποτα. Αν θες VHDL κάτι μπορεί να γίνει.
I did a `cat /boot/vmlinuz > /dev/audio` and I think I heard God!

stereodata

  • Mobster
  • *
  • Μηνύματα: 10
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #2 στις: Μαΐου 13, 2007, 12:22:09 μμ »
Σ ' ευχαριστω φίλε u_quark. Φαίνεσαι να το κατεχεις. Θα το κοιταξω . Ισως να υπαρχει και πιο βελτιστη λυση , οπως λες και εσυ. Αν σκεφτω κατι καινουργιο θα το γραψω. Αν σου ερθει και εσενα καποια πιο συνοπτικη λυση κανε τον κοπο να την γραψεις και εδω.

Σευχαριστω για την βοηθεια σου

ΥΓ : Η Verilog δεν ειναι προβλημα .Αν βρεθει το λογικο κυκλωμα που θα χρησιμοποιηθει η Verilog γραφεται .Το θεμα ειναι να βρεθει το πιο συνοπτικο κυκλωμα
« Τελευταία τροποποίηση: Μαΐου 13, 2007, 12:24:53 μμ από stereodata »

u_quark

  • Don
  • *****
  • Μηνύματα: 643
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #3 στις: Μαΐου 13, 2007, 12:49:32 μμ »
Κοίτα η διαφορετική λύση θα ήταν να υλοποιηθεί με 3-σε-8 αποκωδικοποιητή οι συναρτήσεις με τις εισόδους βάζοντας και του G μέσα. Αλλά τότε θα έπρεπε να υλοποιηθεί ο 3-σε-8 με 2-σε-4 χωρίς είσοδο επίτρεψης που είναι πάλι λίγο μπελαλίδικο και μάλλον χρειάζεται περισσότερους αποκωδικοποιητές (πάλι χρησιμοποιώντας τους 2-σε-4 σαν πύλες AND).
I did a `cat /boot/vmlinuz > /dev/audio` and I think I heard God!

palpatine

  • Επίτιμος Γενικός Γραμματέας
  • Επίτιμος Διαχειριστής
  • Consigliere
  • ****
  • Μηνύματα: 284
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #4 στις: Μαΐου 13, 2007, 05:31:59 μμ »
An katalava kala...

vasika mallon opws to theteis to provlima prepei na ehoume ena kyklwma me dyo half adders, est HA1 kai HA2, opou eisodoi tou HA1 einai to A1 kai to G (0 an 0, 1 an +2), kai tou HA2 eisodoi to C2 (dld to kratoumeno apo tin proigoumeni vathmida) kai A2. I alli eksodos tou prwtou einai to S1, kai tou defterou to S=>S2 kai to C=>C3 profanws

apo tis eksiswseis twn half adders pairnw:

S0=A0
S1=A1'G+G'A1
C1=A1*G
S2=A2C1'+A2'C1
C2(=S3)=A2*A1*G

einai gnwsto oti se enan mux me eisodous x0, x1 kai eksodous z0, z1, z2, z3 ishyei

z0=x0'x1'
z1=x0x1'
z2=x1'x0
z3=x1x0

Ara, an valoume se enan mux to A1=>x0 kai G=>x1, tote, einai swsto na poume oti

C1<=z3
S1<=z1 or z2 (==z1+z2)

kai ean akolouthws valoume se enan allon mux ws x0 to C1 kai ws x1 to A2, tote vlepoume oti ishyei episis

S2<=z1 or z2 (==z1+z2)
C2(=S3)<=z3

Vasika to kyklwma den einai tipota parapanw apo dyo half-adders sti seira, kathenas apo tous opoious borei na ginei apo enan mux 2-se-4 kai mia pyli OR kai stin ousia prosteteis mesw aftwn to A me to 00 i to 10==2

Tha sou egrafa ton kwdika, alla de thymamai k poly kala ti verilog, kai eimai se meros makria apo ta vivlia kai to pc mou  >:( En genei vevaia, na eheis yp'opsin sou oti i tasi sto EDA einai na grafeis behavioural kwdika (dld ton algorithmo) kai meta ti veltistopoiisi/hartografisi panw sto yliko sou na tin kanei o hardware compiler.

Dystyhws, (kalos) hardware compiler eleftheros den yparhei kai oi eborikoi kanoune $$$$. Ehw faei arketous apo ta epitima meli tou FOSS na ksekinisoume enan alla ws twra tzifos  ;D ::) :P :P :P.
my dream is to fly, over the rainbow so high...

Βασίλης Π.

  • Γενικός συντονιστής
  • Consigliere
  • *
  • Μηνύματα: 391
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #5 στις: Μαΐου 13, 2007, 06:23:53 μμ »
Ωραία, δημιούργησε μια σελίδα στο wiki με το τι έχεις στο μυαλό σου και τι θέλουμε να φτιάξουμε (κάτι σαν αυτό;). Εγώ ούτε με hardware description languages έχω επαφή ούτε με compilers, αλλά αυτό θα αλλάξει. Και ως προγραμματιστής δεν είμαι ιδιαίτερα κακός.

palpatine

  • Επίτιμος Γενικός Γραμματέας
  • Επίτιμος Διαχειριστής
  • Consigliere
  • ****
  • Μηνύματα: 284
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #6 στις: Μαΐου 13, 2007, 10:47:26 μμ »
Ωραία, δημιούργησε μια σελίδα στο wiki με το τι έχεις στο μυαλό σου και τι θέλουμε να φτιάξουμε (κάτι σαν αυτό;). Εγώ ούτε με hardware description languages έχω επαφή ούτε με compilers, αλλά αυτό θα αλλάξει. Και ως προγραμματιστής δεν είμαι ιδιαίτερα κακός.

lol me ton vasili ehoume kanei merikes fores aftin tin kouveda sto zaho alla kai egw mono stis idees menw

Βασικά κάτι τέτοιο όπως παραθέτεις θα πρέπει να γίνει κάποτε. Εκτός από το κίνημα ελεύθερου λογισμικού, υπάρχει και το κίνημα ελεύθερου hardware (γιατί τελικά όλα έχουν μια υλική υπόσταση) πχ. κώδικας vhdl και verilog για πολλά projects δίδεται στο www.opencores.org

To πρόβλημα είναι ότι ακόμα και με κώδικα hardware υπό GPL, εν τέλει ο προγραμματιστής θα πρέπει να καταφύγει σε έναν ιδιοταγή (ιδοταγή του κερατά όμως, τα προγράμματα για hardware synthesis κρακάρονται πολύ δύσκολα) αν θέλει το design του να υλοποιείται σε ένα fpga/asic. Δυστυχώς δεν υπάρχουν προγράμματα στυλ gcc για hardware. Υπάρχει βέβαια το icarus verilog, αλλά έχει μάλλον πολύ μικρές δυνατότητες και έχει ΠΟΛΥ αργή εξέλιξη (χμ μπας και είναι one-man project?)

Έχω σκεφτεί πολλά πράγματα πάνω σε αυτό το θέμα, το οποίο πιστεύω ότι θα μπορούσε ΑΝΕΤΑ να είναι το πρώτο μεγάλο και αξιόλογο project που θα αναλάμβανε η κοινότητά μας, σε συνδυασμό, άμα τα καταφέρναμε, με καθηγητές, εργαστήρια κλπ. Ένας hardware compiler θέλει πολύ καλές γνώσεις από προγραμματισμό, αλγορίθμους, μεταγλωττιστές, hardware design, αλλά και τεχνολογία λογισμικού και σωστό management που θα διασφαλίσει ότι οι γνώσεις θα συνδυαστούν σωστά, η ανάπτυξη θα γίνει βάσει ενός προτύπου/στόχου **ας είναι και bazaar μορφής** και ότι θα υπάρχει συνέχεια.

Ελπίζω σε μια από τις επόμενες ημέρες να φτιάξω μια αντίστοιχη σελιδούλα στο wiki, και να συνεννοηθώ ίσως με αντίστοιχους καθηγητές για να δω αν υπάρχει και η ζήτηση/προσφορά από το ίδρυμα. or maybe i'm just dreaming  ::) ::) ::) ::) ::)
my dream is to fly, over the rainbow so high...

u_quark

  • Don
  • *****
  • Μηνύματα: 643
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #7 στις: Μαΐου 14, 2007, 02:20:00 πμ »
palpatine υποκλίνομαι. Πολύ σωστό σε βρίσκω με τους half-adders και την μετατροπή της επιλογής σε πολλαπλασιασμό. Τώρα για το project που λες ακούγετε πολύ ωραίο (αν και λίγο μεγαλεπήβολο για πρώτο project της κοινότητας). Σε ότι αφορά compilers νομίζω ότι μπορώ να βοηθήσω (έτσι νόμιζα βέβαια και για λογική σχεδίαση αλλά άλλα αποδείχτηκαν). Αλλά αυτό είναι το εύκολο μέρος. Τά δύσκολα είναι τα άλλα  :P.

Edit: πάντως άμα το αποφασίσουμε και το πάρουμε ζεστά να αρχίσουμε κάτι τότε εγώ μέσα με 1000!
« Τελευταία τροποποίηση: Μαΐου 14, 2007, 02:24:44 πμ από u_quark »
I did a `cat /boot/vmlinuz > /dev/audio` and I think I heard God!

stereodata

  • Mobster
  • *
  • Μηνύματα: 10
    • Προφίλ
Απ: Απορία σε Verilog
« Απάντηση #8 στις: Μαΐου 14, 2007, 07:24:25 μμ »
Nai Palpatine , to kikloma me tous 2 halfadders prepei na einai to pio sintomo. Seyxaristo!

inaro

  • Επίτιμος Διαχειριστής
  • Consigliere
  • ****
  • Μηνύματα: 412
  • Αγγαρεία κάνω, ποινήν εκτίω.
    • Προφίλ
    • Michalis Famelis' homepage
Απ: Απορία σε Verilog
« Απάντηση #9 στις: Μαΐου 14, 2007, 09:48:58 μμ »
Palp, νομιζω βρηκες ενα πολυ ωραιο θεμα για διπλωματικη (και βαλε...)

way to go ;)
  .,p**"*=b_
 ?P"  .__ `*b
|P  .d?'`&, 9|
M:  |}   |- H'
&|  `#?_._oH'
`H.   "`"`'
 `#?.
   `^~.


http://plagal.wordpress.com/

stereodata

  • Mobster
  • *
  • Μηνύματα: 10
    • Προφίλ
Απ: Απορία!!
« Απάντηση #10 στις: Μαΐου 15, 2007, 01:18:32 μμ »
Λοιπόν παιδιά,  έστω ότι έχω την  συνάρτηση F = Χ0Α0'Α1' + Χ0'Α0Α1' + Χ0'Χ1'Α0 +Χ0Χ1'Α0' + Χ0'Χ1Α0'Α1 + Χ0Χ1Α0Α1  και θελω να την υλοποιησω μονο με πολυπλέκτες 2 σε 1 και αντιστροφείς.

Οποτε την τροποποιώ ως εξής: F = A1'(X0A0' + X0'A0) + Χ1'(Χ0Α0' + X0'A0) + Χ1Α1(Χ0'Α0' + X0A0) =

(Χ0Α0' + X0'A0) (Α1' + Χ1') + Χ1Α1(Χ0'Α0' + X0A0)= (Χ0Α0' + X0'A0) (Α1' + Χ1') + (Α1' + Χ1')'((Χ0Α0' + X0'A0))'  = [ (Χ0Α0' + X0'A0)' (Α1' + Χ1') + (Α1' + Χ1')'((Χ0Α0' + X0'A0)) ] '

Εδώ που εφτασα το συμπερασμα μου ειναι ενας πολυπλεκτης με εισοδους Α0 και Α0' , και εισοδο επιτρεψης Χ0.

Η έξοδος αυτου τωρα θα τιθεται σαν εισοδος επιτρεψης σε εναν αλλον πολυπλεκτη , ο οποιος  θα έχει τις εισοδους

 (Α1' + Χ1') και (Α1' + Χ1')' . Η εξοδος του δευτερου πολυπλεκτη ανεστραμμένη θα ειναι η F.

Πως θα μπορεσω να εκφρασω και τις εισοδους του δευτερου πολυπλεκτη με πολυπλεκτες 2 σε 1 , ωστε να μην χρειαστει να χρησιμοποιησω αλλες πυλες? Αυτες   ->   (Α1' + Χ1') και (Α1' + Χ1')'

Δεν εχω βρει καποιον τροπο. ????  ΠΙθανως να χρειαζεται να απλοποιηθει απο την αρχη αλλιως η συναρτηση . Τι λετε και εσεις?

Πρέπει να χρησιμοποιήσω μόνο πολυπλέκτες 2_1 και αντιστροφείς
« Τελευταία τροποποίηση: Μαΐου 16, 2007, 01:58:37 μμ από stereodata »

stereodata

  • Mobster
  • *
  • Μηνύματα: 10
    • Προφίλ
Απ: Απορία!!
« Απάντηση #11 στις: Μαΐου 16, 2007, 12:29:00 μμ »
Είχα κάνει ένα λαθάκι στις πράξεις μου και το διόρθωσα! Η βοήθεια σας θα μου φανεί κάτι περισσότερο από σημαντική παιδιά

stereodata

  • Mobster
  • *
  • Μηνύματα: 10
    • Προφίλ
Απ: Απορία σε λογικά κυκλώματα
« Απάντηση #12 στις: Ιουνίου 28, 2007, 04:56:34 μμ »
Τελικά το βρήκα κάθε πράξη της μορφής Αχ(Α και χ) μπορεί να δημιουργηθεί με πολυπλέκτη 2_1 ως εξής:

Σήμα επιλογής το Α και εισόδους πρώτη το 0 και δεύτερη το χ.

ή Σήμα επιλογής το χ και εισόδους πρώτη το 0 και δεύτερη το Α.