RTV forum PL | NewsGroups PL

Dostęp do pamięci SRAM 15 ns z zegarem 50 MHz analiza kodu i wskazówki

dostęp do SRAM

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Dostęp do pamięci SRAM 15 ns z zegarem 50 MHz analiza kodu i wskazówki

Tomasz O.
Guest

Thu Jul 12, 2007 1:08 pm   



Witam,

Nie do końca działa mi dostęp do pam SRAM 15 ns. Pamięć musi pracować
min w jednym takcie zegara 25MHz odczyt w drugim zapis. Poniżej
zamieściłem kod:

process(clk_50MHz,clk_cnt)
begin

if rst = '0' then data_IO <= "ZZZZZZZZ";
elsif(clk_50MHz'event and clk_50MHz = '1') then
if(clk_cnt = "11") then
OE <= '0';
addr_out <= addr_vga;
data_IO <= "ZZZZZZZZ";
r_w <= '1';

elsif(clk_cnt = "00") then
temp <= data_O;

elsif(clk_cnt = "01") then
OE <= '1';
addr_out <= adres;
data_IO <= data;
r_w <= '0';

elsif(clk_cnt = "10") then
OE <= '1';
addr_out <= adres;
data_IO <= data;
r_w <= '0';

end if;
end if;

end process;

Krótkie wyjaśnienie używam oscylatora 50MHZ, clk_cnt zlicza impulsy i w
zależności od wartości steruje zapisem/odczytem, rej temp jest po to
żeby zapisać odczytaną daną. Za wszelkie uwagi z góry dziękuje.

Pozdrawiam,
Tomasz O.

J.F.
Guest

Thu Jul 12, 2007 2:07 pm   



On Thu, 12 Jul 2007 14:08:53 +0200, Tomasz O. wrote:
Quote:
Nie do końca działa mi dostęp do pam SRAM 15 ns. Pamięć musi pracować
min w jednym takcie zegara 25MHz odczyt w drugim zapis. Poniżej
zamieściłem kod:

A jak zmniejszysz zegar to dziala ?

Quote:
elsif(clk_cnt = "01") then
OE <= '1';
addr_out <= adres;
data_IO <= data;
r_w <= '0';

elsif(clk_cnt = "10") then
OE <= '1';
addr_out <= adres;
data_IO <= data;
r_w <= '0';

Nie wiem co masz za pamiec, ale one maja rozne wymagania timingowe -
np adres i data musza byc ustawione na liniach na dlugo zanim
-WE zmienimy na zero.

J.

JA
Guest

Thu Jul 12, 2007 4:00 pm   



Tomasz wrote:

Quote:
Nie do końca działa mi dostęp do pam SRAM 15 ns.

a co nie dziala ?
jakie objawy ?


< if(clk_cnt = "11") then
< OE <= '0';
< addr_out <= addr_vga;
< data_IO <= "ZZZZZZZZ";
< r_w <= '1';

< elsif(clk_cnt = "00") then
< temp <= data_O;

to wyglada na odczyt z pamieci, chyba powinno byc
temp <= data_IO ?

nie zakladaj, ze kompilator jest inteligentny;
dopisz w elsif co ma zrobic z data_IO, OE i r_w
dla clk_cnt = 00;
moze z powodow optymalizacyjnych zmienil OE na '1' ?
albo otworzyl bufory danych ?

jesli jest jakis problem z timingiem
[mozesz to sprawdzic jakims symulatorem ?]
wtedy albo recznie umiesc rejestry adresu
OE r_w kolo pinow wyjsciowych,
albo w procesie zmien clk_50MHz na ~clk_50MHz;

JA


--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Tomasz O.
Guest

Thu Jul 12, 2007 4:36 pm   



JA pisze:
Quote:
Tomasz wrote:

Nie do końca działa mi dostęp do pam SRAM 15 ns.

a co nie dziala ?
jakie objawy ?

Objawy są takie, że podczas wyświetlania na monitorze pojawiają się
śmieci, sprawa wygląda lepiej jeśli tylko odczytuje(obraz jest
stabilniejszy) ale np. zamiast świecenie konkretnego piksela świeci
kilka w linii.

Pozdrawiam
Tomasz O.

JA
Guest

Fri Jul 13, 2007 9:40 am   



Tomasz wrote:

Quote:
Objawy są takie, że podczas wyświetlania na monitorze
pojawiają się śmieci, sprawa wygląda lepiej jeśli tylko
odczytuje(obraz jest stabilniejszy) ale np. zamiast
świecenie konkretnego piksela świeci kilka w linii.

to jest pamiec synchroniczna, prawda ?
te 15ns tak by sugerowaly;
inaczej ten rtl co go wkleiles nie ma sensu;

masz jakis dowod na to, ze to ten kawalek kodu,
ktory przestawiles jest powoduje klopoty, a nie
zrodlo sygnalu badz to, co wysyla dane do monitora ?

jesli poslugujesz sie programem xilinxa czy altery,
to za pomoca wbudowanego analizatora logicznego
mozesz przesledzic przeplyw danych do/z pamieci;
mozesz przesymulowac swoj rtl; [wlasciwie to od tego
powinno sie zaczac]

w najgorszym wypadku trzeba wziac oscyloskop
i sprawdzic co sie dzieje na pinach miedzy
fpga a pamieca;
zmieniajac kontroler w taki sposob, by pisal
do pamieci na zmiane FF 00 [jakis inny latwy
do rozpoznania wzor] bedziesz w stanie stosunkowo
latwo stwierdzic oscyloskopem, czy wpis jest poprawny;
potem przelacz kontroler na odczyt tylko, by zobaczyc,
ze odczytujesz to samo, co wpisales;
no i sprawdz timing adresu, wr, oe wzgledem clock;

'wylacz pamiec' i slij do monitora konkretny pattern,
np. zmien linie:

Quote:
elsif(clk_cnt = "00") then
temp <= data_O;

na temp <= temp + 1;

jesli dalej na monitorze smieci, to problem nie w komunikacji
z pamiecia;
itd - manipulujac kodem mozesz okreslic dosc dokladnie
ktory kawalek dziala wadliwie;

JA


--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

[g.d.]
Guest

Fri Jul 13, 2007 10:41 am   



Tomasz O. <olek_ot@o2.pl> napisał(a):

Quote:

Objawy są takie, że podczas wyświetlania na monitorze pojawiają się
śmieci, sprawa wygląda lepiej jeśli tylko odczytuje(obraz jest
stabilniejszy) ale np. zamiast świecenie konkretnego piksela świeci
kilka w linii.

Z tresci wnioskuje ze to ma byc VRAM. Z opisu wyglada na problemy timmingowe,

a pierwszym podejrzanym sa sygnaly wchodzac/wychodzace do pamieci:

1. Upewnij sie ze sygnaly wyjsciowe/wejsciowe sa ztrzaskiwane w samych IO
blokach.
2. Sprobuj zwiekszyc wydajnosc pradowa i ewentualnie "slew rate" IO bloków.
3. Sprawdz czy standardy napiec sie zgadzaja.

0. Sprawdz czy jest constraint na okres zegara clk_cnt.

--
Pozdrawiam,
[g.d.]

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

PAndy
Guest

Fri Jul 13, 2007 12:08 pm   



"[g.d.]" <g_d.SKASUJ@gazeta.pl> wrote in message
news:f77for$dd5$1@inews.gazeta.pl...

Quote:
Z tresci wnioskuje ze to ma byc VRAM. Z opisu wyglada na problemy
timmingowe,

bo? skad wynika ze to ma byc VRAM (VRAM to pamieci z dwoma portami -
rownolegly tak jak w klasycznym RAM i drugi szeregowy dla CRTC)

Tomasz O.
Guest

Fri Jul 13, 2007 7:15 pm   



Z góry przepraszam za nieobecność ale do poniedziałku nie ma mnie w
domu. Urządzenie to karta graficzna VGA. Pamięć dokładnie to UMC
UM61256-15 i ma ona "symulować" pamięć dwuportową (niestety ciężko o
dokumentacje ale mam dokumentację odpowiednika bodajże 65256 ale nie
jestem pewien ponieważ jestem poza domem). W poniedziałek postaram się
odpowiedzieć na wszystkie pytania i zastosuję się do podanych wskazówek.
Bardzo mi zależy żeby to działało bo to praca dyplomowa.

Pozdrawiam
Tomasz O.

PAndy
Guest

Mon Jul 16, 2007 8:32 am   



"Tomasz O." <olek_ot@o2.pl> wrote in message
news:f78f3g$6pp$1@news.interia.pl...
Quote:
Z góry przepraszam za nieobecność ale do poniedziałku nie ma mnie w
domu. Urządzenie to karta graficzna VGA. Pamięć dokładnie to UMC
UM61256-15 i ma ona "symulować" pamięć dwuportową (niestety ciężko o
dokumentacje ale mam dokumentację odpowiednika bodajże 65256 ale nie
jestem pewien ponieważ jestem poza domem). W poniedziałek postaram się
odpowiedzieć na wszystkie pytania i zastosuję się do podanych
wskazówek. Bardzo mi zależy żeby to działało bo to praca dyplomowa.

IMO problemy zlego timingu - wez na spokojnie datasheet do SRAM i
popatrz na zaleznosci czasowe (szczegolnie na wszystkie czasy ustalania
adresow i strobow zapisu/odczytu)

Tomasz O.
Guest

Tue Jul 17, 2007 1:28 pm   



JA pisze:
Quote:
Tomasz wrote:

Objawy są takie, że podczas wyświetlania na monitorze
pojawiają się śmieci, sprawa wygląda lepiej jeśli tylko
odczytuje(obraz jest stabilniejszy) ale np. zamiast
świecenie konkretnego piksela świeci kilka w linii.

to jest pamiec synchroniczna, prawda ?
te 15ns tak by sugerowaly;
inaczej ten rtl co go wkleiles nie ma sensu;

Czemu nie ma sensu i jak powinien wyglądać dla pamięci asynchronicznej ??

JA
Guest

Tue Jul 17, 2007 2:10 pm   



Tomasz wrote:


Quote:
Czemu nie ma sensu

gdy zajmowalem sie jeszcze async. s-ramami,
to pamiec zatrzaskiwala sobie adres opadajacym
zboczem sygnalu 'write_enable', u ciebie to jest
r_w jesli sie nie myle, a dane rosnacym zboczem
tejze linii;
nie sadze, by teraz bylo inaczej;

w twoim kodzie zegar systemowy aktywuje jednoczesnie
i adres i linie 'wpisz' wiec tylko dzieki zbiegowi
okolicznosci, dzieki przypadkowo odpowiednim
opoznieniom w fpga moze zostac zachowany wymagany przez
pamiec setup time dla adresu;
podobnie ma sie sprawa z danymi, tym razem mozesz miec
problem z hold time;

Quote:
i jak powinien wyglądać dla pamięci asynchronicznej ??

na przyklad tak:
krok 0 - wpisz adres i dane do buforow wyjsciowych
krok 1 - przepusc clk_50MHz jako r_w
/ np. write_gate <= 0; --to ma byc rejestr
r_w = write_gate OR clk_50MHz; -- to ma byc bramka,
nie rejestr, musi
byc poza 'process';
slabo znam vhdl, wiec nie sugeruj sie znaczkami:
"<=", "=", "OR";
"OR" to tylko oznaczenie funkcji,
a "=" i "<=" dla rozroznienia miedzy FF a bramka /
krok 2 - ustaw adres do odczytu, zamknij bramke write_gate
/ write_gate <= 1; /
ustaw bufory danych w tri-state;
krok 3 - przepisz dane z pamieci do rejestrow temp;

oczywiscie to tylko generalna idea,
ktorej w zaden sposob nie sprawdzilem;

JA


--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

JA
Guest

Tue Jul 17, 2007 4:48 pm   



Quote:
Czemu nie ma sensu /.../

to chyba nieodpowiednie okreslenie;
powinno byc raczej: nie jest poprawny :)

JA


--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Tomasz O.
Guest

Tue Jul 17, 2007 5:18 pm   



JA pisze:
Quote:


Czemu nie ma sensu /.../

to chyba nieodpowiednie okreslenie;
powinno byc raczej: nie jest poprawny :)

JA


:) nic nie szkodzi. Przerabiam kod do podanych wskazówek i mam nadzieje

że w najbliższym czasie karta zacznie działać.

Tomasz O.

elektroda NewsGroups Forum Index - Elektronika Polska - Dostęp do pamięci SRAM 15 ns z zegarem 50 MHz analiza kodu i wskazówki

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map