Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Schemat logiczny dla 16bit CRC-CCITT

borsukh 19 Sty 2008 13:22 3415 4
  • #1 19 Sty 2008 13:22
    borsukh
    Poziom 9  

    Dobrzy ludzie pomóżcie,
    potrzebuje do projektu w Xilinxie wstawić układ obliczający 16 bitowy kod CRC-CCITT (równanie x^16 + x^12 + x^5 + 1) dla danej ramki. Jako, że we wszystkich źródłach do jakich dotarłem mówią, że schemat logiczny dla obliczeń CRC jest prosty, postanowiłem użyć właśnie tej metody. Jak się okazuje wszędzie tak mówią i chyba dochodzą do wniosku, że nawet nie warto zaszczycać tego rozwiązania jakimkolwiek większym komentarzem, ponieważ nie mogłem nigdzie znaleźć gotowego rozwiązania. Wszędzie jakieś źródła w C, Verilogu itp a schematu logicznego nigdzie. Ze strzępów informacji złożyłem taki oto układzik:
    Schemat logiczny dla 16bit CRC-CCITT

    Kilka słów wyjaśnienia - układ składa się z 16 kaskadowo połączonych przerzutników DS (z możliwością ustawienia stanu wejściem S). Przed przerzutnikiami numer 1,5 i 12 znajdują się dodatkowo bramki XOR2. Na jedno wejście każdej bramki wchodzi wyjście Q z przerzutnika poprzedzającego (na pierwszy XOR wchodzi po prostu data_in), a na drugie wyjście Q z ostatniego przerzutnika (numer 16). Wejścia R i CLK są oczywiście podłączone do wspólnego sygnału - odpowiednio Rst I CLK. Wejście S do sygnału Set.

    Układ jak można się domyślić nie działa, albo działa, a ja nie potrafię tego poprawnie zinterpretować. Procedura, jak ja to rozumiem, jest następująca. Cały rejestr jest przed operacją ustawiany na jedynki sygnałem Set. W następnym cyklu zegara zaczynam wsuwać dane od najstarszego bitu począwszy. Aby obliczyć CRC z powiedzmy takiej ramki - 0xA7F1F5CC muszę na końcu ramki dopisać ilość zer odpowiadających długości CRC, a zatem ramka która wejdzie do układu ma postać 0xA7F1F5CC0000. Ramka wchodzi do układu od lewej do prawej czyli zaczynając od A. W momencie gdy ostatnie 0 wejdzie do rejestru numer 1 powinienem przez odczytanie wyjść od Q0 do Q15 otrzymać wynikowy kod CRC-CCITT.

    Proszę o kogoś obeznanego w temacie o wytknięcie mi błędu w budowie schematu bądź też w mojej interpretacji sposobu obliczania kodu CRC z danej ramki, lub w obu tych rzeczach jednocześnie.[/img]

  • #2 21 Sty 2008 10:40
    [g.d.]
    Poziom 18  

    borsukh napisał:
    Dobrzy ludzie pomóżcie,
    potrzebuje do projektu w Xilinxie wstawić układ obliczający 16 bitowy kod CRC-CCITT (równanie x^16 + x^12 + x^5 + 1) dla danej ramki.


    W tym temacie jestem totalnym lajkonikiem, ale może ktoś mnie poprawi jak jakas bzdure napisze. CRC-CCITT jeszcze nie potrzebowalem, ale w analizatorach sygnatur i generatorach psedolosowych i tak jak rozumiem równanie które przytoczyłes, to sprzezenia biegna z wyjsc bitów 1, 5, 12, 16 z wejscie bitu 0 gdzie są one wszystkie xor-owane z aktualnymi danymi wejsciowymi. Ale może to jakaś inna bajka bo do generowania sekwencji psedolosowej na 16-bitach używa sie raczej sprzężeń z 7 i 9 bitu.

    Co do używania schematu to raczej sobie robisz pod górkę, opis w VHDL czy Verilog zajalby jedna linijke, odpowiednio dluga :D

    No i dochodzi kwestia przenoszenia kodu pomiedzy technologiami, producentów nie wspomnę. Rozumiem że zagadnienie jej czysto akademickie, bo składanie przerzutników na schemacie, który wygeneruje na tej podstawie opis VHDL/Verilog na ktorego wygląd i poprawność masz ograniczony wpływ jest realne tylko na ramach zajęć akademikich.

    Dodano po 2 [minuty]:

    Moze zacytuj źródło w C lub Verilogu, to powie wiecej niż cały twój post.

  • Pomocny post
    #4 21 Sty 2008 13:06
    [g.d.]
    Poziom 18  

    Widze że CRC to nie analizator sygnatur, ani generator pseudolosowy.

    Podstawowa różnicę jaką widzę pomiedzy twoim schematem a kodem z linku od bis to ze w twoim schemacie na poszczególnych bitach sprzeżenia są brane z wyjścia bitu 15, a w wygenerowanym kodzie jest to funkcja xor wyjscia bitu 15 i wejscia danych, może w tym lezy problem. Tak tylko nadmieniam bo poprzedni post z linkiem chyba wyczerpuje temat.

  • #5 22 Sty 2008 10:48
    borsukh
    Poziom 9  

    Dzięki za pomoc, faktycznie widzę gdzie był błąd w schemacie. Natomiast czy ktoś mógłby jeszcze zweryfikować procedurę uzyskania samego kodu CRC, którą umieściłem? Nadal nie jestem pewien wyników a tym kalkulatorom CRC online nie bardzo ufam...

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME