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

MAx II Development Kit 1.0.0 - pamięć SRAM???

16 Sty 2007 22:38 1439 2
  • Poziom 9  
    Witam,

    Mam taki problem, jestem raczej poczatkującym Vhdl-owcem tzn. do tej pory zrobiłem kilka prostych projektów które działały jedynie w symulacji (w ramach zajęć laboratoryjnych nie wgrywalismy ich na płytki). Teraz mam do wykonania projekt, który powinienem uruchomić na wspomianej w temaci płytce. Posiada ona wbydowaną pamięć SRAM 1Mb,
    mój problem polega na tym że w projekcie muszę skożystać z "rejestru" maksymalnie 2^16=65536 bitowego (może być mniej to zależy od danych od danych wejsciowych jakie podaję na wejscie układu, tzn na wejscie podaję liczbę N i tylu bitowego rejestru potrzebuję. Nmax=65536).

    Krótka zasada działania tego rejestru, to: na początku zapisuje do niego same jedynki, w trakcie działania całego układu zeruję wybrane pola i na koniec chcę podać zawarość tego rejestru na wyjście układu.

    Teraz moje, pytanie może ktoś z was używał pamięci SRAM w podanym przezemnie układzie uruchomieniowym i mógłby mi przedstawić ideologią jak się do tego zabrać? Jedyne co wiem to że musze to zrobić w tej pamięci SRAM, ale jak? Czy są tam jakieś ustalone adresy komórek do których muszę się odwoływać ( jeśli tak to poprosił bym o jakiś prosty przykład jak to się implementuje w vhdlu), czy samemu impementuj bloczek SRAM w moim przypadku 65536, 1-bitowych pól i do nich zapisuje moje dane (ale w takim razie jak taki bloczek zapisać w SRAMie wbudowanym na płytce i połaczyć z resztą bloczków, które będą oprogramowane w ukłądzie maxII)?

    pozdrawiam
  • Poziom 16  
    Czesc,

    Pamiec SRAM a w zasadzie ARAM (Asynchronous RAM) jest bardziej niz prosta w obsludze. Przy zapisie w jednym cyklu dajesz dane i adres a w nastepnym Write enable i w nastepnym sciagasz write enable trzymajac dane i adres ten sam. To tak dla bezpieczenstwa ;). Przy odczycie dajesz adres i read enable i w nastepnym cyklu zatrzaskujesz dane. Tez dla bezpieczenstwa ;)

    Pozatym, rejestr 2^16 gdzie jest to liczba bitow jest ciezki do zrealizowania. FPGA maja tylko 1000 pinow i moga nie miec tyle przerzutnikow w swoich zasobach. No ale jak 2^16 to zakres liczby czyli to liczba 16 bitowa albo masz czas na zaimlementowanie to w ramie to sprawa jest prosta i patrz wyzej.

    Pozdrawiam,
    tony_tg
  • Poziom 11  
    Może niezbyt ekonomiczne, ale najszybsze do zrobienia:
    zrób rejestr tylko nie bitowy, tylko bajtowy: (1 bit to cały bajt w pamięci)
    N -> bedzie to szerokość adresu (16 bitów to 64kB a masz 128kB)
    N = 2 to masz 4B czyli adresy: 00,01,10,11. itd..
    Zapis do pamięci: ustawiasz WR (write enable) na wejście danych na stałe vector 8-bitowy (0xFF) a adres leci Ci z licznika o 0 do 2^N
    potem zapisujesz pod odpowiedni adres swoje 0x00 lub odczytujesz zawartość.

    Adresowanie zawsze będziesz miał od 0 do 2^N, gdzie N szerokość adresu (rozmiar pamięci).