Skocz do zawartości

Teoretyzowanie - obsługa DRAM (SDRAM, DDR)


H1M4W4R1

Pomocna odpowiedź

Preludium

Trochę mi się nudziło czekając, aż szef dostarczy robotę... Więc obejrzałem sobie filmik(i) na YT i zacząłem się zastanawiać jak obsłużyć RAM od strony elektronicznej.

Przykład

Dla przykładu wybrałem sobie stary moduł M12L16161A-7TG2Q, co by mieć jakiś pogląd dokumentacyjny.

Jeżeli dobrze rozumiem, to na początku muszę wykonać POWER-UP-SEQUENCE. (zgodnie z dokumentacją), po czym by odczytać dane wykonuję sekwencję:

  1. Wykonuję precharge banku
  2. Wybieram bank oraz rząd
  3. Wybieram kolumnę (wciąż z RAS w stanie niskim)
  4. Zmieniam stan RAS na wysoki (wykonuję odczyt)
  5. Wykonuję self-refresh (odsyłam dane na ich miejsce)
  6. Kończę self refresh

W przypadku zapisu praktycznie tak samo, tylko zamiast odczytu danych na linię DQ podaję dane, tak by w punkcie 3 i 4 były dostępne dla pamięci.

Jak ktoś ma problem ze zrozumieniem zapisu tutaj jest cały zamysł. Oczywiście nie wszystkie opóźnienia są tam wymienione (zależą od częstotliwości zegara).

Pytania

  1. W dokumentacji modułu napisane jest, że maksymalny czas cyklu zegara to 1000ns, czyli rozumiem, że muszę tam dać przynajmniej 2MHZ? 😉 
  2. Zakładając powyższe rozumiem, że mając czas RAS->CAS na poziomie ... 500ns (4MHz) mogę uznać, że warunki opóźnień zostaną spełnione (największe opóźnienie na pamięci wynosi 63ns - czas refreshu). W dokumentacji założyłem 4 cykle na auto-refresh, aczkolwiek raczej wystarczyłby jeden przy tak niskich częstotliwościach.
  3. Jakieś porady od doświadczonych osób? Aktualnie jeszcze nie kupiłem modułów i prawdopodobnie poszukam sobie jakiegoś antycznego DDR2 za pół ceny (zarówno do wylutowania jak i do podłączenia będzie jak znalazł). Tylko przy DDR jest ten problem, że muszę uwzględnić "problemy z zegarem" (tj. wykonywanie komend przy obu zboczach zamiast jak przy SDRAM tylko na opadającym/rosnącym).

Appendix

To wszystko będzie kontrolowane albo z jakiegoś FPGA (będzie wreszcie okazja zmusić się do nauki) albo z Pi Pico (PIO). Ewentualnie STM, ale tam są gotowe rozwiązania, a wolałbym samodzielnie się porozumieć z pamięcią...

Edytowano przez H1M4W4R1
  • Lubię! 1
Link do komentarza
Share on other sites

25 minut temu, FlyingDutch napisał:

Spróbuj to zrobić na FPGA, będziesz miał więcej frajdy z działającego projektu. Nie wiem na jakiej płytce FPGA to robisz?

Aktualnie jeszcze nie mam dość cierpliwości, by zabrać się za FPGA... znając mnie prędzej złożę płytkę z jakimś AllWinnerem H2/H3 niż dotknę tego tworu 😄 (taki mały żarcik) Po prostu mam talent do palenia scalaków, a tu już łatwo domyślić się co by się stało z FPGA... 😄 

O PIO myślałem z tego względu, że łatwo się tam wpiąć oscyloskopem (i mam tego całą szufladkę). Teoretycznie jest ono w stanie wyciągnąć prostokątny sygnał do 10MHz, a wykonywanie komend na DRAM'ie jest równoległe, więc raczej dało by radę patrząc na minimalny zegar 1MHz dla w/w układu... Jedyne co może być problemem to ilość wyprowadzeń, ale dla testów można część kosteczki pooszczędzać 😉 

26 minut temu, FlyingDutch napisał:

Oczywiście jeśli chcesz pójść łatwiejszą drogą

Łatwa droga nie istnieje, tylko czyste kodowanie sygnałów 😉 

W każdym razie dzięki za linki... Ale ten projekt aktualnie znajduje się raczej gdzieś na dnie "szuflady" niż na wierzchu... Są inne bardziej kreatywne na szczycie, ale muszę poczekać na dostawę RP2040 z botlandu... Wtedy będzie można się pobawić...

  • Lubię! 1
Link do komentarza
Share on other sites

15 godzin temu, H1M4W4R1 napisał:

wentualnie STM, ale tam są gotowe rozwiązania, a wolałbym samodzielnie się porozumieć z pamięcią...

@H1M4W4R1 jak nie FPGA to może jednak STM, masz płytkę F4 z SDRAM. Wiem, że są gotowce, sam kiedyś wgrałem dla testu, ale napisanie własnej biblioteki graficznej z tym RAMem byłoby ciekawym wyzwaniem  😉 

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

2 godziny temu, Gieneq napisał:

ale napisanie własnej biblioteki graficznej z tym RAMem byłoby ciekawym wyzwaniem

To jest zarezerwowane dla tych 50 RP2040, które zamówiłem z Botlandu 😉 

2 godziny temu, Gieneq napisał:

jak nie FPGA to może jednak STM, masz płytkę F4 z SDRAM.

Prędzej FPGA, może skuszę się na MAXIMATOR'a od Kamami za 250,- 😉 Chodzi o to, że chcę się nauczyć sygnałów, a nie korzystać z gotowych bibliotek tj. firmware... Dlatego STM został od ręki "skreślony".

  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, H1M4W4R1 napisał:

Prędzej FPGA, może skuszę się na MAXIMATOR'a od Kamami za 250,- 😉 Chodzi o to, że chcę się nauczyć sygnałów, a nie korzystać z gotowych bibliotek tj. firmware... Dlatego STM został od ręki "skreślony".

Cześć,

Maximator to bardzo fajna płytka FPGA (sam ją posiadam) ale nie za bardzo nadaje się do tego konkretnie projektu, a to z powodu wyprowadzenia bardzo małej ilości pinów układu FPGA na złącza. Do obsługi pamięci DDR jest potrzeba sporej ilości pinów I/O z układu FPGA.

Jeśli preferujesz układy Intela to polecam np. taką płytkę z układem FPGA Cyclone IV:

https://pl.aliexpress.com/item/32949281189.html?spm=a2g0o.store_pc_groupList.8148356.8.117a77a2BUq65g

Ma wyprowadzone na złącza aż 108 pinów I/O z układu FPGA (cena 23$ +3$  koszty wysyłki. Jedyna niedogodność to taka, że ta płytka ma już na pokładzie SDRAM 32 MB (i gotowy sterownik tejże pamięci w przykładach kodu do pobrania), jednakże nic nie stoi na przeszkodzie aby podłączyć zewnętrzna płytkę PCB z innym typem pamięci DDRAM.

Jeśli chcesz Xilinx'a to np. taka płytka z FPGA Artix7:

https://pl.aliexpress.com/item/1000006630084.html?spm=a2g0o.store_pc_groupList.8148356.2.48e37fb21epW1T

Niestety ta płytka jest droższa - cena 50$ (ale zawiera też "większy" układ FPGA, niż poprzednia wymieniona).

Ja kupiłem w tym sklepie "QMTECH" już 3 płytki i zawsze byłem bardzo zadowolony (szybka przesyłka - poniżej tygodnia). Dokumentacja jest wystarczająca, aby w pełni wykorzystać zestaw FPGA, ale czasami trzeba coś szukać na schemacie.

Pozdrawiam

 

 

  • Lubię! 1
Link do komentarza
Share on other sites

10 minut temu, FlyingDutch napisał:

Maximator to bardzo fajna płytka FPGA (sam ją posiadam) ale nie za bardzo nadaje się do tego konkretnie projektu, a to z powodu wyprowadzenia bardzo małej ilości pinów układu FPGA na złącza. Do obsługi pamięci DDR jest potrzeba sporej ilości pinów I/O z układu FPGA.

Mówisz, że mam skakać na główkę i zaczynać FPGA od obsługi DRAM?... nie tędy droga 😉

Na początek Maximator co by nauczyć się obsługi tego "czegoś" (i nie czekać przysłowiowy miesiąc na przesyłkę), potem jak uda mi się nie spalić tej płytki w ciągu tygodnia można pomyśleć o DRAM'ie.

Sam koszt to też nie problem 😛 Wszystko idzie "w firmę", a że moje koszty stałe zamykają się w ZUSie i serwerze VPS to mam spory zapas na "koszty inwestycyjne w rozwój i rozszerzanie działalności".

W każdym razie dzięki za pomoc. Jak uda mi się przekonać mój niechętny do VHDL mózg, by za niego się zabrać to może coś z tego wyjdzie...

Link do komentarza
Share on other sites

2 godziny temu, H1M4W4R1 napisał:

Mówisz, że mam skakać na główkę i zaczynać FPGA od obsługi DRAM?... nie tędy droga 😉

Na początek Maximator co by nauczyć się obsługi tego "czegoś" (i nie czekać przysłowiowy miesiąc na przesyłkę), potem jak uda mi się nie spalić tej płytki w ciągu tygodnia można pomyśleć o DRAM'ie...

Jeszcze jedna sprawa o której warto pamiętać - decydując się na zakup konkretnej płytki w rzeczywistości decydujesz się na cały "ekosystem" danego producenta. Mam na myśli zarówno sam software do syntezy jak i np. zestaw darmowych IPCore dostarczanych przez producenta, sposoby implementacji Soft-procesorów, typy magistral łączących bloki IP (to jest chyba jedna z najważniejszych różnic), postaci typowych "prymitywów" układu FPGA (np. wejść róznicowych, różnych buforów I/O, wejść zegarowych) itp.

Dlatego jeśli decydujesz się na zakup zestawu FPGA jednego producenta (niezależnie którego z nich), a potem kupujesz układ FPGA innego bądź przygotowany na to, że niektórych rzeczy będziesz musiał się uczyć od nowa. Takie moje spostrzeżenie dotyczące ludzi którzy działają w obszarze FPGA - bardzo często zostają przy producencie ich pierwszego zestawu FPGA (oczywiście jeśli ich praca zawodowa nie wymusi zmiany producenta) z tej prostej przyczyny, że nie chce im się uczyć mnóstwa różnic pomiędzy sposobem implementacji systemów w układach FPGA różnych producentów.

But - feel free you are the boss 😉

Pozdrawiam

  • Lubię! 1
Link do komentarza
Share on other sites

5 godzin temu, FlyingDutch napisał:

Dlatego jeśli decydujesz się na zakup zestawu FPGA jednego producenta (niezależnie którego z nich)

Verilog i VHDL są uniwersalne... jedynie pipeline się zmienia, ale tak samo przecież jest z mikrokontrolerami (tylko tam mniej zachodu). Poza tym Altera jakoś bardziej do mnie przemawia... 😄 

Właśnie obejrzałem sobie trochę Veriloga i trochę VHDL i IMO Verilog jest raczej lepszy dla mnie... (sorki jestem programistą, kod piszę 20x szybciej niż bym układał bramki w schemacie)...

A ***** biorę tego Maximatora... 250zł to grosze, a jednak zawsze jakaś rozrywka od tego RP2040... 

Patrząc na to, że jestem skrypterem LUA raczej Verilog będzie mi bardziej odpowiadał stylistycznie... bo VHDL jest zbyt przekombinowany...

  • Lubię! 1
Link do komentarza
Share on other sites

15 godzin temu, H1M4W4R1 napisał:

Patrząc na to, że jestem skrypterem LUA raczej Verilog będzie mi bardziej odpowiadał stylistycznie... bo VHDL jest zbyt przekombinowany...

Hej,

moim zdaniem Verilog jest trudniejszym językiem HDL niż VHDL z powodu większej "niejednoznaczności" opisu. Używam obu tych języków, ponieważ oba są szeroko stosowane. Język VHDL według mnie jest lepszy na początek nauki układów programowalnych właśnie ze względu na lepszą czytelność i jednoznaczność. Od wielu lat programuję w C/C++ i wydawałoby się iż Verilog ze składnią wywodzącą się z C powinien być dla mnie łatwiejszy, tak jednak nie jest. Jeśli znasz np. języki skryptowe Perl i Python to Verilog porównałbym do Perl'a a VHDL do Pythona. Ale to taka moja mała dygresja, nie musisz jej brać pod uwagę.

Pozdrawiam

  • Lubię! 1
Link do komentarza
Share on other sites

Dnia 9.06.2021 o 08:55, FlyingDutch napisał:

moim zdaniem Verilog jest trudniejszym językiem HDL niż VHDL z powodu większej "niejednoznaczności" opisu

Właśnie według mnie to VHDL jest trudniejszy, bo jest bardziej zagmatwany... VHDL bazuje na modelu behawioralnym,a Verilog jest bardziej zbliżony do obiektowego. Stąd IMO Verilog jest lepszy (poza tym całkiem nieźle mi idzie), "Hello World" (kosztem urwania jednej diody, bo była słabo przylutowana) i SPI już zaliczone 😉 Jedynie przycisk jakoś dziwnie się zachowuje, ale to raczej wina mojego lenistwa, bo nie chciało mi się robić pod niego SM, tylko zrobiłem go na negedge...

Dnia 9.06.2021 o 08:55, FlyingDutch napisał:

VHDL do Pythona

Najlepszy argument do trzymania się z daleka od VHDL 😄 

  • Nie zgadzam się! 1
Link do komentarza
Share on other sites

2 godziny temu, H1M4W4R1 napisał:

Właśnie według mnie to VHDL jest trudniejszy, bo jest bardziej zagmatwany... VHDL bazuje na modelu behawioralnym,a Verilog jest bardziej zbliżony do obiektowego. Stąd IMO Verilog jest lepszy (poza tym całkiem nieźle mi idzie), "Hello World" (kosztem urwania jednej diody, bo była słabo przylutowana) i SPI już zaliczone 😉 Jedynie przycisk jakoś dziwnie się zachowuje, ale to raczej wina mojego lenistwa, bo nie chciało mi się robić pod niego SM, tylko zrobiłem go na negedge...

Najlepszy argument do trzymania się z daleka od VHDL 😄 

VHDL został stworzony na bazie języka Ada, który jest używany przez DoD (US Department of defense) i USAF (Siły powietrzne US) do dzisiaj z tak śmiesznego powodu jak "czytelność" kodu dla dużych i wymagających systemów informatycznych. Gdzie jeszcze jest używana Ada - tutaj kilka przykładów:

https://www2.seas.gwu.edu/~mfeldman/ada-project-summary.html

Używam bardzo dużo C/C++ i lubię te języki programowania, ale uważam, że składnia Ady jest czytelniejsza. Podyskutuj z "Departamentem Obrony US" i wytłumacz im tak jak mnie wytłumaczyłeś, że Verilog jest czytelniejszy od VHDL'a. Po drugie języki HDL służą do innego celu niż programowanie i znaczenie napisanego kodu różni się znacznie od programu na CPU o podobnej składni.,

Tak samo wytłumacz milionom programistów (także naukowcom, którzy są z jedną grup użytkowników tego języka) na Świecie, że Python (w tym roku Python jest na pierwszym miejscu jeśli chodzi o oferty pracy) jest słabo czytelny i Bee..

Daję minusa w sensie, że po prostu nie zgadzam się z twoim zdaniem (a nie, że chcę negatywnie ocenić twój post). Mam nadzieję, że administratorzy Forbota w końcu wprowadzą rozróżnienie na "nie zgadzam się z przedmówcą" oraz "oceniam negatywnie ten post:".

Pozdrawiam

BTW: wiesz ,że w starszej wersji Verilog'a dla modułu (w opisie interfejsu) nie było nawet określone, czy dany port jest wejściowy, czy wyjściowy. Trzeba było, się tego domyślać z opisu architektury dla tego modułu. Z tą obiektowością, to chyba mówisz o "System Verilog", który jest używany, lecz jego oficjalny standard nie został nigdy ogłoszony...

Edytowano przez FlyingDutch
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.