Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Komparator cyfrowy. Jak zrobić system U10?

marekkiek 26 Feb 2007 21:19 7051 6
Texa Poland
  • #1
    marekkiek
    Level 14  
    System uzupełnieniowy U16 prawdopodobnie udało mi się zrobić, obrazek.
    Jak zrobić system U10?
    Komparator cyfrowy chyba działa poprawnie, tylko 2 liczby 1-bitowe.

    Jak rozbudować ten komparator na większą liczbe bitów?
    Czy może on porównywać liczby w innym kodzie niż NB?

    Poozdrawiam.
  • Texa Poland
  • Helpful post
    #2
    paluszasty
    Level 25  
    Jest taki scalak 7485. Jest to komperator 4-bitowy. Mozna go łaczyc w wieksze "zespoły" Nie będzie problemów z porównywaniem liczb w NBC bo co to za róznica dla komperatora? Aha sa tez komperatory 8 bitowe np. 74682. W nocie na pewneo będzie opisana budowa wewnętrzna tych scalaków, Ale nie wydaje mi sie ze jest jakikolwiek sens budowanie czegos takeigo z pojendnczych bramek, to troche jak "zawracanie kijem wisły", są od tego gotowe scalaki, a jak nie sa one nawet łatwo dostępne to i tak szybciej bedzie zaprogramowac jakiegos Atmelka czy cos takeigo niz bawic sie w łączenei kosmicznej ilosci bramek.
    Pozdrawiam

    Dodano po 4 [minuty]:

    Własnie zerknołem na budowe wewnetrzna tego scalaka 74682....Budowa tego wymagała by ok 50 bramek..czyli pewnei z 20 scalaków, nie chce mi sie liczyć. Nie dostrzegam w tym sensu. Nawet dydaktycznego. Zrozumeic zasadn działania owszem, ale budowac to to chya tak jak wczesneij napisałem bez sensu. Swoją drogą co Ty właściwie chcesz zbudowac?
  • Texa Poland
  • Helpful post
    #3
    Quarz
    Level 43  
    Witam,
    komparator cyfrowy, ponieważ jest to zawsze automat kombinacyjny skończony dla dwóch wektorów wejściowych;
    X(x1, x2, x2,... xn) i
    Y(y1, y2, y3,... yn), da się zrealizować dla dowolnego kodu, który jednoznacznie przypisuje znak porównania (<, =, >) trzem wyjściom funkcji logicznej, np.:
    "<" = (X < Y),
    "=" = (X = Y),
    ">" = (X >Y), gdzie tylko jedno z wyjść "<", "=", ">" przyjmuje wartość logiczną wyróżnioną (jeden lub zero, wedle wyboru konwencji), można zrealizować niekoniecznie na bramkach logicznych.
    Przecież to jest w pewnym sensie "tablica szyfrowa", która zwraca stan wyjść (trzech, a więc wystarczą trzy bity dla każdej możliwej kombinacji wejść) w zależności od wektora wejściowego (adresowego);
    A(x1, x2, x2,... xn, y1, y2, y3,... yn), czyli kiedy komparator ma być n bitowy, to "tablica szyfrowa" musi być adresowana maksymalnie na 2^(2•n) komórek.
    Doskonale do tego celu nadają się pamięci nieulotne, np. PROM, EPROM, lub zwykła matryca diodowa, czy układy programowalne typu PAL (GAL).
    Zaleta jest tu, jeśli tylko ilość bitów adresowych jest niemniejsza od podwojonej "długości" komparatora, niezaprzeczalna; jest to tylko jedna "kostka".
    Pokażcie mi inne rozwiązanie podobnie eleganckie.
    Dla komparatora czterobitowego, dobrze nadają się układy PROM o 256 komórkach (2^8) i czterobitowym słowie wyjściowym (nie pamiętam w tej chwili oznaczeń).
    Dla większych ilości bitów słów do porównania można użyć pamięci EPROM (również jednorazowego programowania), lub EEPROM.
    Oczywiście zawartość binarną pliku do zaprogramowania należy sobie stworzyć, ale nie jest to trudne, można to zrobić np. za pomocą arkusza kalkulacyjnego Excel.

    Pozdrawiam
  • Helpful post
    #4
    paluszasty
    Level 25  
    Szczerze to nie kapuje tego pomysłuu z pamieciami nieulotnymi. Rozumier jak mozna zrealizowac komperator na uC, pojedynczych bramkach., czy ukłądach PLD, w sumei miedzy tymi 2 ostatnimi wersjami nei ma zadnej róznicy. Ale na pamieci EEPROM??? Zupełnei nei rozumiem koncepcji.
    Pozdrawiam
  • Helpful post
    #5
    Quarz
    Level 43  
    Witam,
    paluszasty wrote:
    Szczerze to nie kapuje tego pomysłuu z pamieciami nieulotnymi. Rozumier jak mozna zrealizowac komperator na uC, pojedynczych bramkach., czy ukłądach PLD, w sumei miedzy tymi 2 ostatnimi wersjami nei ma zadnej róznicy. Ale na pamieci EEPROM??? Zupełnei nei rozumiem koncepcji.

    przecież to proste i chyba oczywiste jeśli pamięta się, iż pamięć nieulotna o adresowaniu i wyjściu równoległym to zapisana tablica adresowana wektorem wejściowym, czyli słowem adresowym; A(a1, a2, ...am) której zawartość danej komórki pojawia się w postacji słowa - wektora wyjściowego; W(w1, w2, ... wn).
    Niech jak poprzednio będzie: X(x1, x2, x3, x4) i Y(y1, y2, y3, y4).
    Z powyższych bitów dwóch liczb czterobitowych X i Y tworzymy ośmiobitowy wektor adresu; A(x1, x2, x3, x4, y1, y2, y3, y4), przy czym najstarszy bit obu liczb X i Y to bit z największym indeksem ==> x4, y4.
    Jak widać, przestrzeń adresowa pamięci nieulotnej musi być conajmniej ośmiobitowa i niech przyporządkowanie bitów adresowych od a0 do a7 do bitów liczb X i Y będzie następujące:
    a7_a6_a5_a4|a3_a2_a1_a0 pozycja
    x4_x3_x2_x1|y4_y3_y2_y1 dziesiętna
    ----------------|----------------| adresu, "relacja"
    _0 _0 _0 _0 |_0 _0 _0 _0 | 0 "Y = X"
    _0 _0 _0 _0 |_0 _0 _0 _1 | 1 "Y > X"
    _0 _0 _0 _0 |_0 _0 _1 _0 | 2 "Y > X"
    ..................................................
    _0 _0 _0 _0 |_1 _1 _1 _1 | 15 "Y > X"
    ..................................................
    _0 _0 _0 _1 |_0 _0 _0 _0 | 16 "Y < X"
    _0 _0 _0 _1 |_0 _0 _0 _1 | 17 "Y = X"
    ..................................................
    _1 _0 _0 _0 |_0 _0 _0 _0 | 128 "Y < X"
    _1 _0 _0 _0 |_0 _0 _0 _1 | 129 "Y < X"
    ..................................................
    _1 _0 _0 _0 |_1 _0 _0 _0 | 136 "Y = X"
    _1 _0 _0 _0 |_1 _0 _0 _1 | 137 "Y > X"
    ...................................................
    _1 _0 _0 _1 |_1 _0 _0 _0 | 152 "Y < X"
    ...................................................
    _1 _1 _1 _1 |_1 _1 _0 _1 | 253 "Y < X"
    _1 _1 _1 _1 |_1 _1 _1 _0 | 254 "Y < X"
    _1 _1 _1 _1 |_1 _1 _1 _1 | 255 "Y = X"

    Oczywiście powyższą tablicę prawdy należy wypełnić w całości, czyli od pierwszego adresu: 0_0_0_0_0_0_0_0 (0) do ostatniego 1_1_1_1_1_1_1_ 1 (255), oraz wpisać właściwe relacje.
    Pozostaje jeszcze przypisanie wartości (słowo wyjściowe) dla odpowiednich relacji, czyli dla:
    "Y = X",
    "Y < X",
    "Y > X".
    Jeśli użyjemy, jak wcześniej wspominałem, pamięci PROM o czterobitowym słowie danych, to mamy do dyspozycji szesnaście stanów tego słowa - wektora wyjściowego; W(w1, w2, w3, w4), które możemy dowolnie zagospodarować, ponieważ dotąd wykorzystane są tylko trzy stany (0001, 0010, 0001), jest to sprawa wyboru i do ewentualnego wykorzystania.
    Można np. zakodować negacje powyższych trzech stanów pamiętając jednak o tym, że: NIE_"Y = X" to samo co: "Y < X"_OR_"Y > X".
    W wersji minimalnej można np. przyporządkować tak:
    "Y = X" ==> w1 = "1", pozostałe bity równe "0" (0001),
    "Y < X" ==> w2 = "1", pozostałe bity równe "0" (0010),
    "Y > X" ==> w3 = "1", pozostałe bity równe "0" (0100),
    wtedy dla wypisanych wyżej przykładów zawartości komórek W muszą być takie:
    w4 w3 w2 w1| pozycja
    ----------------| dziesiętna
    _0 _0 _0 _1 | 0
    _0 _1 _0 _0 | 1
    _0 _1 _0 _0 | 2
    .........................
    _0 _1 _0 _0 | 15
    _0 _0 _1 _0 | 16
    _0 _0 _0 _1 | 17
    ..........................
    _0 _0 _1 _0 | 128
    _0 _0 _1 _0 | 129
    ..........................
    _0 _0 _0 _1 | 136
    _0 _1 _0 _0 | 137
    ..........................
    _0 _0 _1 _0 | 152
    .........................
    _0 _0 _1 _0 | 253
    _0 _0 _1 _0 | 254
    _0 _0 _0 _1 | 255
    Jak widać, bit w4 nie został tu wykorzystany i równie dobrze może mieć wartość alternatywną.

    Po wypełnieniu wszystkich 256 komórek, można stworzyć plik binarny właściwy do zaprogramowania danego typu pamięci nieulotnej.
    Jak już wspominałem wcześniej, do wyliczenia zawartości poszczególnych komórek pamięci można wykorzystać odpowiednio spreparowany arkusz kalkulacyjny.
    Zapis binarny wektorów adresu i wyjściowego zmuszony byłem rozdzielić znakiem podkreślenia _ ponieważ inaczej nie mogłem utrzymać "pionu" kolumn... :D

    Pozdrawiam
  • #6
    marekkiek
    Level 14  
    Tak prawde mówiąc też mnie ten temat nie interesuje, jak to jest.
    Jednak muszę tym się zająć bo to mam na laborke z ukł cyfrowych.

    Komparator 2 bitowy u mnie wyszedł jakoś tak:
    AB - pierwsza liczba, A - bit niższy, B - bit wyższy
    CD - druga liczba C - bit niższy, D - bit wyższy
    AB>CD Y1=a/c+b/c/d+ab/d+(/abc/d)
    AB=CD Y2=(AxnotC)and(BxnotD)
    AB<CD Y3=Y2norY1
    (/abc/d)-powinno dzialac bez tego lecz nie dziala.


    Nie wiem co jest tego powodem, może źle zrobiłem funkcje, zminimalizowałem?
    Naprwde nie potrafie dojżeć gdzie tkwi bład.




    Jak zrobić układ sumatora 4 bitowego wykorzystując 7483 który bedzie obsługiwał liczby zapisywane w kodzie uzupełnieniowym.
    Tzw 3 bity liczba 4ty bit to znak.
    Czy wtenczas będzie mogło zajść odejmowanie?
    Jakie bramki użyć?


    Dzieki.
    Pozdrowienia.
  • #7
    marekkiek
    Level 14  
    Czy ten układ jest poprawny?
    Układ ma to być sumator, lecz z powodu braku takiego w EWB zostal zastąpiony popprzez ALU'181 z funkcją dodawania. <---'83

    Jak sygnalizować nadmiar?
    Wykorzystywać P czy G
    Oba odpowiadają za przeniesienia.

    Dzieki.