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.

kolejka FIFO na CPLD + SRAM

22 Jun 2004 23:56 2303 7
  • Level 27  
    W projektowanym przeze mnie urządzeniu zaistaniała potrzeba zastosowania pamięci FIFO. Okazało się jednak, że tego typu pamięci są nie do zdobycia w Polsce a jak już są, to mają horrendalną cenę.
    Postanowiłem zrobić własną pamięć FIFO bazując na klasycznej pamięci SRAM i odpowiednim sterowniku. Pamięci SRAM są dostępne i tanie. Sterownik natomiast wydawał się prosty, jednak końcowy projekt okazał się dosyć rozbudowany (kilka układów 74HCxxx). Postanowiłem więc do pracy zaprzęgnąć układ CPLD.
    Przedstawiam projekt sterownika pamięci realizującego kolejkę FIFO. Układ wyposażony jest w dwa 16-bitowe liczniki binarne (generujące odpowiednio adres odczytu i zapisu), multiplekser realizujący przełączanie szyny adresowej pomiędzy licznik odczytu a zapisu, oraz komparator generujący sygnał pustej pamięci (EMPTY).
    Sterownik przewidziany jest do współpracy z pamięcią o przestrzeni adresowej od 0x000 do 0xffff. Syganały odczytu i zapisu doprowadzane są bezpośrednio do pamięci (operacje te występują na narastających zboczach).
    Moje pytania są następujące:
    1. Co sądzicie o tym projekcie?
    2. Jak określić, czy projekt będzie dało się zrealizować na wybranym przeze mnie układzie CPLD (np. XC9572XL). Z projektu wynika, że będą potrzebne 32 przerzutniki do liczników, 16 komutatorów i trochę bramek logicznych na komparator. XC9572 ma tego aż za dużo - ale czy będzie dało się to wszystko odpowiednio połączyć?
    3. Można by jeszcze dorobić sygnał całkowitego zapełnienia pamięci, wymagałoby to jednak dorobienia kolejnego licznika (rewersyjnego) a zatem kolejne 16 przerzutników i trochę bramek
    4. A może po prostu ktoś wie gdzie można kupić za rozsądne pieniądze fifo o pojemności 64 - 256 kB ?
  • Level 18  
    AD 1.
    Jak dla mnie zrobiłeś bufor kołowy. nie prościej zrobić to samo programowo. deklarujesz dwa wskaźniki ptr start i ptr koniec piszesz pod adres startu a odczytujesz spod adresu konca. Za każdym razem większając adres startu przy zapisie i adres końca przy odczycie efekt będzie taki sam. ( przy załoźeniu ze z tej pamięci korzysta tylko procek). Sprawdzenie warunku czy kolejka jest pusta sprowadza się do porównania tych dwóch wskaźników.
    AD 2.
    tego to nawet najstarszy górale nie wiedzą jak program rozłoży to w układzie. Najprościej to sprawdzić praktycznie, ale jeśłi są duże rezerwy układu to powinno wejść. Zawsze można wykorzystać inną strategie alokacji w układzie, domyślnie jest speed( z reguły jest większa), ale można spróbować size.
    AD 3.
    To samo co w punkcie pierwszym dodanie prostego warunku w programie.
    AD 4.
    Polecam internet.

    Pozdrawiam.
  • Level 42  
    Czemu mi się wydaje że powinno się zastosować pamięci dwuportową RAM? Ile potrzebujesz tej pamięci fifo?
  • Level 27  
    Robot: jasne, że na procku byłoby prościej, tylko ja tutaj muszę dosyć szybko działać. Zrobienie tego na procku wiązałoby się z obliczaniem dwóch 16-bitowych adresów i sterowaniem magistralą - czyli tracę sporo czasu, a w moim systemie każdy zaoszczędzony takt zegara jest na wagę złota. Dodatkowo tracę 2 porty mikrokontrolera na wystawienie adresu - to rozwiązanie odpada.
    To, że pamięć fifo to bufor cykliczny z dwoma wskaźnikami, to chyba najprostsza i najbardziel logiczna realizacja fifo.
    Elektryk: no pewnie, że dwuportowa byłaby lepsza, a najlepsza byłaby fifo. Chodziło o to, żeby zrobić to na elementach dostępnych, a pamięć dwuportowa to również towar deficytowy (i pewnie nietani).
    W dalszym ciągu czekam na odpowiedzi na moje pytania.
  • Level 42  
    Chodziło mi o to że na zwykłej pamięci nie zbudujesz pamięci fifo z całkowicie niezależnym odczytem i zapisem, co jest wymagane dla pamięci fifo w większości projektów.
  • Level 27  
    elektryk - sterownik ten nie umożliwia jednoczesnego zapisu i odczytu, bo to mi nie jest w ogóle potrzebne a znacznie skomplikowałoby projekt.
    Czekam na kolejne posty
  • Level 18  
    Jeśli już realizujesz sterownik w CPLD to może od razu zaimplemntuje w strukture pamięć SRAM, wszystko będziesz miał w jednym miejscu.
    Możesz użyć VHDL'a do opisu pamięci. Wiem że układy Altery miały gotowe bloki biblioteczne do budowy pamięci, a i na układach Xilinxa widziałem projekt z podwójną kolejką FIFO.
    Pozdrawiam.
  • Level 27  
    ok, już odpowiedziałem sobie na drugie pytanie - układ "zmieści się" do XL9572. Trzeba było zrobić projekt, przeprowadzić syntezę i zobaczyć czy fitter sobie z tym poradzi (poradził sobie).

    Robot_ - niestety, ten CPLD nie ma wewnętrznej pamięci SRAM, a układy które mają pewnie są drogie. Poza tym ja potrzebuję minimum 64kB, więc to jest troszkę dużo.
pcbway logo