Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Podlaczenie logiki Koprocesora do DMA.

10 Kwi 2008 20:36 1663 3
  • Poziom 11  
    Witam,
    Jak podlaczyc koprocesor do DMA?

    Moj projekt sklada sie z:
    1. IPCore PCIE (PCIE, kanaly DMA) - zaszyforwany VHDL,(czarna skrzynka)
    2. Logiki kontrolno, sterujacej - rejestry konfigurujace transferu DMA, miganie diodami itp.- kod VHDL
    3. Logiki CoProcesora (np.: sumator, drzewo sumatorow, filtr itp.) - kod VHDL

    Kanal DMA do zapisu (DMA Write) - szerkosc danych 64 bity (stala wartosc, nie mozna zmienic)
    Kanal DMA do odczytu (DMA Read) - szerkosc danych 64 bity (stala wartosc, nie mozna zmienic)
    Wejscie logiki CoProcesora - od 4 bitow do 2000 (srednio 128,256,512) (zmienna wartosc, w zaleznosci od CoProcesora)
    Wyjscie logiki CoProcesora - od 4 bitow do 120 (zmienna wartosc, w zaleznosci od CoProcesora)

    W chwili obecnej, dla testowania ukladu Koprocesor pracuje na sygnalach we/wy 64 bitowych (np.: prosty sumator, drzewo sumatorow itp).Sygnal z kanalu DMA podawany jest bezposrednio na koprocesor, sygnal wyjsciowy z koprocesora gromadzony jest w kolejce FIFO. FIFO (lub inny rodzaj pamieci) potrzebne jest do efektywnego blokowego przesylu danych przez kontrolel DMA. I to dziala, schemat blokowy ponizej

    Podlaczenie logiki Koprocesora do DMA.

    Mam natomiast problem z polaczeniem CoProcesora z we/wy roznym od 64 bity.
    Jedyne rozwiazanie jakie przychodzi mi do glowy to stworzenie dwoch dedykowanych FIFO:
    - InFIFO - wejscie 64bity - wyjscie n-bitowe (gdzie n=szerokosci we koprocesora)
    - OutFIFO - wejscie m-bitowe (gdzie m=szerokosci wy koprocesora)- wyjscie 64bity
    Podlaczenie logiki Koprocesora do DMA.

    Jak zaimplementowac FIFO z rozna szerkoscia danych we/wy i zegarami zapisu odczytu?

    Ma to sens? Moze mozna jakos prosciej?

    Pozdrawiam
    Mariusz
  • Poziom 28  
    mariusz102102 napisał:
    Jak zaimplementowac FIFO z rozna szerkoscia danych we/wy i zegarami zapisu odczytu?


    to akurat nie powinno stanowic wiekszego problemu,
    pod warunkiem, ze fifo nie bedzie pracowac ze zbyt duza
    czestotliwoscia;
    robisz fifo 64 bitowe i na jego wejsciu/wyjsciu
    cos w rodzaju ukladu pakujacego 'wezsze' dane na 64 bitowe
    slowo i drugi uklad rozpakowujacy 64 bity na mniejsze slowa;
    w tej chwili wydaje mi sie, ze 'packer' i 'unpacker' beda wymagaly
    zegara kilkukrotnie szybszego niz clock fifo - dlatego wspomnialem
    o niezbyt duzej predkosci pracy samej kolejki, ale moze sie myle;

    no i jeszcze warunek, ze twoje 'n' i 'm' to stale, a nie zmienne;

    J.A
  • Poziom 18  
    mariusz102102 napisał:

    Jak zaimplementowac FIFO z rozna szerkoscia danych we/wy i zegarami zapisu odczytu?

    Fifo z CoreGenerator-a, lepiej nie zrobisz. Dostępne szerokosci połówkowe i wielokrotności, sam sprawdź jakie są opcje. Raczej w oparciu o BlockRAM, nie musi być głębokie, zegary mogą być niezależne.

    mariusz102102 napisał:

    Ma to sens? Moze mozna jakos prosciej?

    Ma sens jeśli chcesz koniecznie wykorzystać 64 bity kanału DMA, prościej można ignorować bity i przesyłać np. zera

    Fajnie że Ci ten PCI-E działa.

    Dodano po 3 [minuty]:

    no chyba że n i m to zmienne, albo "dziwne" wartości, wtedy musisz sam napisać upychanie do fifo.
  • Poziom 11  
    Witam,

    Dzieki za informacje. Zabieram sie w takim razie do pisanie dedykowanych FIFO_64_n i FIFO_m_64.

    Dla wyjasnienia.
    n i m to wartosci stale dla danego koprocesora, nie zmieniaja sie podczas pracy ukladu, ale moga sie zmienic po nastepnej syntezie, implementacji

    Chce stworzyc uniwersalne srodowisko, w ktorym moga pracowac rozne koprocesory z rozna szerokoscia danych we/wy - n i m. Czyli podmieniam w VHDL np. logike drzewa sumatrów, na logike filtra i wartosc parametrow n i m (const lub gereneric) gdzie n i m to szerokosc we wy koprocesora. Synteza, implementacja wgranie w uklad i powinno wszystko dzialac w miare optymalnie :)

    Pozdrawiam
    Mariusz