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.