Guest
Tue Jul 01, 2014 2:06 pm
Witam,
Mam na pokładzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym działa OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygląda to mniej więcej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Załóżmy, że chcę odczytać RAM zaimplementowany w FPGA. Zawartość RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-zębna piła)
Przy pierwszym odczycie zawartość FT_In_Buffer jest cholera jakby zrotowana w prawo o losową ilość adresów. Np. o trzy adresy, w wyniku czego odczytuję:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Każdy kolejny odczyt powoduje rotację w prawo o dokładnie 16 bajtów..
Jakieś porady?
Adam Górski
Guest
Tue Jul 01, 2014 9:08 pm
W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Quote:
Witam,
Mam na pokładzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym działa OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygląda to mniej więcej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
=========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Załóżmy, że chcę odczytać RAM zaimplementowany w FPGA. Zawartość RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-zębna piła)
Przy pierwszym odczycie zawartość FT_In_Buffer jest cholera jakby zrotowana w prawo o losową ilość adresów. Np. o trzy adresy, w wyniku czego odczytuję:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Każdy kolejny odczyt powoduje rotację w prawo o dokładnie 16 bajtów..
Jakieś porady?
Wyczścić fifo przed użyciem ?
Ustawić RD_ADDR na początek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na początek ? Jaka jest idea
synchronizacji ?
Pzdr
Adam
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Guest
Wed Jul 02, 2014 1:04 am
W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 użytkownik Adam Górski napisał:
Quote:
W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Witam,
Mam na pok�adzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym dzia�a OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygl�da to mniej wi�cej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Za��my, �e chc� odczyta� RAM zaimplementowany w FPGA. Zawarto�� RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-z�bna pi�a)
Przy pierwszym odczycie zawarto�� FT_In_Buffer jest cholera jakby zrotowana w prawo o losow� ilo�� adres�w. Np. o trzy adresy, w wyniku czego odczytuj�:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Ka�dy kolejny odczyt powoduje rotacj� w prawo o dok�adnie 16 bajt�w..
Jakieďż˝ porady?
Wycz�ci� fifo przed u�yciem ?
Też o tym myślałem. Problem w tym, że w drajverach D2XX od FTDI brak takiej funkcji.
Quote:
Ustawi� RD_ADDR na pocz�tek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na pocz�tek ? Jaka jest idea
synchronizacji ?
Dokładnie!! Przed każdym rozpoczęciem odczytu daję impuls RST, który asynchronicznie zeruje licznik RD_ADDR (popatrz na kod VHDL). Impuls RST generuję programowo, działa poprawnie, sprawdziłem na oscylu. Synchronizacja jest banalnie prosta. Leci akwizycja danych do bufora w pamięci FPGA i sprawdzam bit statusu akwizycji. Jak akwizycja zakończona, to walę 2 komendy opisane w pierwszym poście. Aha!! Robiłem eksperymenty i tak np. przy odczycie tylko 512 bajtów z bufora, każdorazowo robi mi rotację o jeden bajt. Podejrzewam, że coś jest nawalone w drajverach D2XX, albo pieron wie co ?!
Quote:
Pzdr
Adam
---
Ta wiadomo�� e-mail jest wolna od wirus�w i z�o�liwego oprogramowania, poniewa� ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Adam Górski
Guest
Wed Jul 02, 2014 10:48 am
W dniu 2014-07-02 01:04, stchebel@gmail.com pisze:
Quote:
W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 użytkownik Adam Górski napisał:
W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Witam,
Mam na pok�adzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym dzia�a OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygl�da to mniej wi�cej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
=========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Za��my, �e chc� odczyta� RAM zaimplementowany w FPGA. Zawarto�� RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-z�bna pi�a)
Przy pierwszym odczycie zawarto�� FT_In_Buffer jest cholera jakby zrotowana w prawo o losow� ilo�� adres�w. Np. o trzy adresy, w wyniku czego odczytuj�:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Ka�dy kolejny odczyt powoduje rotacj� w prawo o dok�adnie 16 bajt�w..
Jakieďż˝ porady?
Wycz�ci� fifo przed u�yciem ?
Też o tym myślałem. Problem w tym, że w drajverach D2XX od FTDI brak takiej funkcji.
Ustawi� RD_ADDR na pocz�tek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na pocz�tek ? Jaka jest idea
synchronizacji ?
Dokładnie!! Przed każdym rozpoczęciem odczytu daję impuls RST, który asynchronicznie zeruje licznik RD_ADDR (popatrz na kod VHDL). Impuls RST generuję programowo, działa poprawnie, sprawdziłem na oscylu. Synchronizacja jest banalnie prosta. Leci akwizycja danych do bufora w pamięci FPGA i sprawdzam bit statusu akwizycji. Jak akwizycja zakończona, to walę 2 komendy opisane w pierwszym poście. Aha!! Robiłem eksperymenty i tak np. przy odczycie tylko 512 bajtów z bufora, każdorazowo robi mi rotację o jeden bajt. Podejrzewam, że coś jest nawalone w drajverach D2XX, albo pieron wie co ?!
Ok. Jaka to fpga ? Na pewno są tam jakieś mechanizmy dostępu przez jtaga
: podgląd ram-u , podgląd sygnałów itd czy nawet rejestratory z wyzwalaniem.
1. Czy jesteś pewien zawartości pamięci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisałeś że jest tam jakiś ram, ale może być dwuportowy
lub inna cholera.
2. Może być też tak że w momencie rozpoczęcia przesyłania FT czyści
sobie fifo ,wiec należałoby wpisać do fifo dopiero jak zacznie się
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
3. Szukałeś jakiś app note, white papers etc ?
VHDL nie wygląda źle, może ja bym go zrobił całkowicie synchronicznie,
albo przynajmniej synchronizował RST do zegara USB_CLK ( albo oba
powyższe ). Nie widzę reszty wiec nic więcej nie powiem.
Pzdr.
Adam Górski
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Guest
Wed Jul 02, 2014 1:15 pm
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
Quote:
Ok. Jaka to fpga ? Na pewno s� tam jakie� mechanizmy dost�pu przez jtaga
: podgl�d ram-u , podgl�d sygna��w itd czy nawet rejestratory z wyzwalaniem.
XC6SLX45
Quote:
1. Czy jeste� pewien zawarto�ci pami�ci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisa�e� �e jest tam jaki� ram, ale mo�e by� dwuportowy
lub inna cholera.
Pierwsze co zrobiłem, jak zobaczyłem jak się to pieprzy, wstawiłem rom'a ze wzorce 32-zębnej piły (32kB). To samo. Mało tego, zrobiłem też próbę wstawiając adres RD_ADDR jako dane do odczytu. To samo....
Quote:
2. Mo�e by� te� tak �e w momencie rozpocz�cia przesy�ania FT czy�ci
sobie fifo ,wiec nale�a�oby wpisa� do fifo dopiero jak zacznie si�
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
To powinno być pilnowane przez drajvery D2XX, a one są jakie są. Nie mam na to wpływu.
Quote:
3. Szuka�e� jaki� app note, white papers etc ?
Jasne, że tak.
http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf
Quote:
VHDL nie wygl�da �le, mo�e ja bym go zrobi� ca�kowicie synchronicznie,
albo przynajmniej synchronizowaďż˝ RST do zegara USB_CLK ( albo oba
powy�sze ). Nie widz� reszty wiec nic wi�cej nie powiem.
Szkoda:{
Guest
Wed Jul 02, 2014 1:25 pm
W dniu środa, 2 lipca 2014 13:15:11 UTC+2 użytkownik stch...@gmail.com napisał:
Quote:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
Ok. Jaka to fpga ? Na pewno s� tam jakie� mechanizmy dost�pu przez jtaga
: podgl�d ram-u , podgl�d sygna��w itd czy nawet rejestratory z wyzwalaniem.
XC6SLX45
1. Czy jeste� pewien zawarto�ci pami�ci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisa�e� �e jest tam jaki� ram, ale mo�e by� dwuportowy
lub inna cholera.
Pierwsze co zrobiłem, jak zobaczyłem jak się to pieprzy, wstawiłem rom'a ze wzorce 32-zębnej piły (32kB). To samo. Mało tego, zrobiłem też próbę wstawiając adres RD_ADDR jako dane do odczytu. To samo....
2. Mo�e by� te� tak �e w momencie rozpocz�cia przesy�ania FT czy�ci
sobie fifo ,wiec nale�a�oby wpisa� do fifo dopiero jak zacznie si�
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
To powinno być pilnowane przez drajvery D2XX, a one są jakie są. Nie mam na to wpływu.
3. Szuka�e� jaki� app note, white papers etc ?
Jasne, że tak.
http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf
VHDL nie wygl�da �le, mo�e ja bym go zrobi� ca�kowicie synchronicznie,
albo przynajmniej synchronizowaďż˝ RST do zegara USB_CLK ( albo oba
powy�sze ). Nie widz� reszty wiec nic wi�cej nie powiem.
Szkoda:{
===========
Wygląda na to, że nie ja jeden mam ten problem.
https://groups.google.com/forum/#!topic/comp.arch.embedded/PpgpMbT921I
Guest
Wed Jul 02, 2014 9:27 pm
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
Quote:
W dniu 2014-07-02 01:04, stchebel@gmail.com pisze:
W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 u�ytkownik Adam G�rski napisa�:
W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Witam,
Mam na pok�adzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym dzia�a OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygl�da to mniej wi�cej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Za��my, �e chc� odczyta� RAM zaimplementowany w FPGA. Zawarto�� RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-z�bna pi�a)
Przy pierwszym odczycie zawarto�� FT_In_Buffer jest cholera jakby zrotowana w prawo o losow� ilo�� adres�w. Np. o trzy adresy, w wyniku czego odczytuj�:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Ka�dy kolejny odczyt powoduje rotacj� w prawo o dok�adnie 16 bajt�w..
Jakieďż˝ porady?
Wycz�ci� fifo przed u�yciem ?
Te� o tym my�la�em. Problem w tym, �e w drajverach D2XX od FTDI brak takiej funkcji.
Ustawi� RD_ADDR na pocz�tek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na pocz�tek ? Jaka jest idea
synchronizacji ?
Dok�adnie!! Przed ka�dym rozpocz�ciem odczytu daj� impuls RST, kt�ry asynchronicznie zeruje licznik RD_ADDR (popatrz na kod VHDL). Impuls RST generuj� programowo, dzia�a poprawnie, sprawdzi�em na oscylu. Synchronizacja jest banalnie prosta. Leci akwizycja danych do bufora w pami�ci FPGA i sprawdzam bit statusu akwizycji. Jak akwizycja zako�czona, to wal� 2 komendy opisane w pierwszym po�cie. Aha!! Robi�em eksperymenty i tak np. przy odczycie tylko 512 bajt�w z bufora, ka�dorazowo robi mi rotacj� o jeden bajt. Podejrzewam, �e co� jest nawalone w drajverach D2XX, albo pieron wie co ?!
Ok. Jaka to fpga ? Na pewno s� tam jakie� mechanizmy dost�pu przez jtaga
: podgl�d ram-u , podgl�d sygna��w itd czy nawet rejestratory z wyzwalaniem.
1. Czy jeste� pewien zawarto�ci pami�ci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisa�e� �e jest tam jaki� ram, ale mo�e by� dwuportowy
lub inna cholera.
2. Mo�e by� te� tak �e w momencie rozpocz�cia przesy�ania FT czy�ci
sobie fifo ,wiec nale�a�oby wpisa� do fifo dopiero jak zacznie si�
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
3. Szuka�e� jaki� app note, white papers etc ?
VHDL nie wygl�da �le, mo�e ja bym go zrobi� ca�kowicie synchronicznie,
albo przynajmniej synchronizowaďż˝ RST do zegara USB_CLK ( albo oba
powy�sze ). Nie widz� reszty wiec nic wi�cej nie powiem.
Pzdr.
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery przez producenta, A producent.. , normalka, jak "application engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...
Adam Górski
Guest
Thu Jul 03, 2014 1:42 pm
W dniu 2014-07-02 13:25, stchebel@gmail.com pisze:
Quote:
W dniu środa, 2 lipca 2014 13:15:11 UTC+2 użytkownik stch...@gmail.com napisał:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
Ok. Jaka to fpga ? Na pewno s� tam jakie� mechanizmy dost�pu przez jtaga
: podgl�d ram-u , podgl�d sygna��w itd czy nawet rejestratory z wyzwalaniem.
XC6SLX45
1. Czy jeste� pewien zawarto�ci pami�ci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisa�e� �e jest tam jaki� ram, ale mo�e by� dwuportowy
lub inna cholera.
Pierwsze co zrobiłem, jak zobaczyłem jak się to pieprzy, wstawiłem rom'a ze wzorce 32-zębnej piły (32kB). To samo. Mało tego, zrobiłem też próbę wstawiając adres RD_ADDR jako dane do odczytu. To samo....
2. Mo�e by� te� tak �e w momencie rozpocz�cia przesy�ania FT czy�ci
sobie fifo ,wiec nale�a�oby wpisa� do fifo dopiero jak zacznie si�
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
To powinno być pilnowane przez drajvery D2XX, a one są jakie są. Nie mam na to wpływu.
3. Szuka�e� jaki� app note, white papers etc ?
Jasne, że tak.
http://www.ftdichip.com/Support/Documents/AppNotes/AN_130_FT2232H_Used_In_FT245%20Synchronous%20FIFO%20Mode.pdf
VHDL nie wygl�da �le, mo�e ja bym go zrobi� ca�kowicie synchronicznie,
albo przynajmniej synchronizowaďż˝ RST do zegara USB_CLK ( albo oba
powy�sze ). Nie widz� reszty wiec nic wi�cej nie powiem.
Szkoda:{
============
Wygląda na to, że nie ja jeden mam ten problem.
https://groups.google.com/forum/#!topic/comp.arch.embedded/PpgpMbT921I
Zapodaj proszę swój kod inicializujący FT2232H w delphi.
Adam
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Pszemol
Guest
Thu Jul 03, 2014 5:50 pm
<stchebel@gmail.com> wrote in message
news:7f7346f8-53d5-4162-8b10-54d00a407006@googlegroups.com...
Quote:
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery
przez producenta, A producent.. , normalka, jak "application engineer" nie
wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc,
support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie
znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe".
Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a
następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16
bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną,
zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje
rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...
Myślę że jest gotowe - wal na produkcję z tym i możecie sprzedawać ! ;-)
p.s. czy jest jakiś racjonalny powód dla którego z każdą kolejną
wypowiedzią ciągnąłeś wszystkie cytaty od początku wątka?
Zdajesz sobie chyba sprawę, że wszystko jest dostępne na grupie?
Adam Górski
Guest
Thu Jul 03, 2014 9:22 pm
W dniu 2014-07-02 21:27, stchebel@gmail.com pisze:
Quote:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
W dniu 2014-07-02 01:04, stchebel@gmail.com pisze:
W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 u�ytkownik Adam G�rski napisa�:
W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Witam,
Mam na pok�adzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym dzia�a OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygl�da to mniej wi�cej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
=========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Za��my, �e chc� odczyta� RAM zaimplementowany w FPGA. Zawarto�� RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-z�bna pi�a)
Przy pierwszym odczycie zawarto�� FT_In_Buffer jest cholera jakby zrotowana w prawo o losow� ilo�� adres�w. Np. o trzy adresy, w wyniku czego odczytuj�:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Ka�dy kolejny odczyt powoduje rotacj� w prawo o dok�adnie 16 bajt�w..
Jakieďż˝ porady?
Wycz�ci� fifo przed u�yciem ?
Te� o tym my�la�em. Problem w tym, �e w drajverach D2XX od FTDI brak takiej funkcji.
Ustawi� RD_ADDR na pocz�tek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na pocz�tek ? Jaka jest idea
synchronizacji ?
Dok�adnie!! Przed ka�dym rozpocz�ciem odczytu daj� impuls RST, kt�ry asynchronicznie zeruje licznik RD_ADDR (popatrz na kod VHDL). Impuls RST generuj� programowo, dzia�a poprawnie, sprawdzi�em na oscylu. Synchronizacja jest banalnie prosta. Leci akwizycja danych do bufora w pami�ci FPGA i sprawdzam bit statusu akwizycji. Jak akwizycja zako�czona, to wal� 2 komendy opisane w pierwszym po�cie. Aha!! Robi�em eksperymenty i tak np. przy odczycie tylko 512 bajt�w z bufora, ka�dorazowo robi mi rotacj� o jeden bajt. Podejrzewam, �e co� jest nawalone w drajverach D2XX, albo pieron wie co ?!
Ok. Jaka to fpga ? Na pewno s� tam jakie� mechanizmy dost�pu przez jtaga
: podgl�d ram-u , podgl�d sygna��w itd czy nawet rejestratory z wyzwalaniem.
1. Czy jeste� pewien zawarto�ci pami�ci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisa�e� �e jest tam jaki� ram, ale mo�e by� dwuportowy
lub inna cholera.
2. Mo�e by� te� tak �e w momencie rozpocz�cia przesy�ania FT czy�ci
sobie fifo ,wiec nale�a�oby wpisa� do fifo dopiero jak zacznie si�
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
3. Szuka�e� jaki� app note, white papers etc ?
VHDL nie wygl�da �le, mo�e ja bym go zrobi� ca�kowicie synchronicznie,
albo przynajmniej synchronizowaďż˝ RST do zegara USB_CLK ( albo oba
powy�sze ). Nie widz� reszty wiec nic wi�cej nie powiem.
Pzdr.
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery przez producenta, A producent.. , normalka, jak "application engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...
Rozwiązanie o którym piszesz ma króciutkie nóżki. Co będzie jak w/w bug
zostanie naprawiony ? ( O ile to jest bug ).
Jeżeli to komercyjne lub przemysłowe lub inne niż amatorskie, to jest to
rozwiązanie nie do przyjęcia. Tak naprawdę , nie wiadomo co powoduje
przesunięcie o te 16 bajtów.
1. Trzeba gnębić dystrybutora o dojście do ludzi którzy mogą mieć
pojęcie o w/w problemie.
2. Jeżeli app engineer nie ma pojęcia - domagać się pchnięcia sprawy wyżej.
Zrób jeszcze proszę jeden test:
1. Uruchom program odbierający na PC - niech sobie czeka na dane
2. Dane do fifo z fpga zacznij wpisywać dopiero po 2 - 3 sekundach tak
żeby połączenie z pc zostało zainicjowane zanim dodasz jakiekolwiek dane
do fifo.
Daj znać co wyszło
Pzdr
Adam
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
MiSter
Guest
Fri Jul 04, 2014 4:51 pm
Quote:
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane
drjwery przez producenta, A producent.. , normalka, jak "application
engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na
emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma
to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc
zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u
wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym
kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to
działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone
objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale
póki co jest skuteczne i muszę z tym żyć...
Rozwiązanie o którym piszesz ma króciutkie nóżki. Co będzie jak w/w bug
zostanie naprawiony ? ( O ile to jest bug ).
Nie sądzę, że problem jest po stronie producenta, Mój klient stosuję
ten układ w pewnym urządzeniu od dłuższego czasu w większych ilościach i
nie słyszałem ani razu o takim problemie, ale fakt nie znam jego
konfiguracji.
Mister
Adam Górski
Guest
Mon Jul 07, 2014 12:20 pm
W dniu 2014-07-02 21:27, stchebel@gmail.com pisze:
Quote:
W dniu środa, 2 lipca 2014 12:48:40 UTC+2 użytkownik Adam Górski napisał:
W dniu 2014-07-02 01:04, stchebel@gmail.com pisze:
W dniu wtorek, 1 lipca 2014 23:08:48 UTC+2 u�ytkownik Adam G�rski napisa�:
W dniu 2014-07-01 14:06, stchebel@gmail.com pisze:
Witam,
Mam na pok�adzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie synchronicznym dzia�a OK, natomiast mam jajca przy odczycie z FPGA do PC.
Najpierw hardware w FPGA. Wygl�da to mniej wi�cej tak:
USB_CLK: in std_logic;
RST : in std_logic;
TXE_n : in std_logic;
WR_n : out std_logic;
USB_DATA: inout std_logic_vector(7 downto 0);
RAM_DATA: in std_logic_vector(7 downto 0);
RD_ADDR: out std_logic_vector(12 downto 0);
signal RD_ADDRs: std_logic_vector(12 downto 0);
process (USB_CLK,RST,TXE_n)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
USB_DATA<=(others=>'Z');
WR_n<='1';
else
if USB_CLK'event and USB_CLK='1' then
WR_n<=TXE_n;
if TXE='0' then
USB_DATA<=RAM_DATA;
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else USB_DATA<=(others=>'Z');
end if;
end if;
end if;
end process;
=========
I teraz software (Delphi):
ResetAddressCounters;
ftresult:=FT_Read(FT_HANDLE,@FT_In_Buffer,8192,@Read_Result);
Za��my, �e chc� odczyta� RAM zaimplementowany w FPGA. Zawarto�� RAM'u:
0,1,2,3...255,0,1,2....255,....,.... - razem 8kB (taka 32-z�bna pi�a)
Przy pierwszym odczycie zawarto�� FT_In_Buffer jest cholera jakby zrotowana w prawo o losow� ilo�� adres�w. Np. o trzy adresy, w wyniku czego odczytuj�:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Ka�dy kolejny odczyt powoduje rotacj� w prawo o dok�adnie 16 bajt�w..
Jakieďż˝ porady?
Wycz�ci� fifo przed u�yciem ?
Te� o tym my�la�em. Problem w tym, �e w drajverach D2XX od FTDI brak takiej funkcji.
Ustawi� RD_ADDR na pocz�tek po pierwszym odczycie.
Jak z poziomu pc ustawiasz RD_ADDRES na pocz�tek ? Jaka jest idea
synchronizacji ?
Dok�adnie!! Przed ka�dym rozpocz�ciem odczytu daj� impuls RST, kt�ry asynchronicznie zeruje licznik RD_ADDR (popatrz na kod VHDL). Impuls RST generuj� programowo, dzia�a poprawnie, sprawdzi�em na oscylu. Synchronizacja jest banalnie prosta. Leci akwizycja danych do bufora w pami�ci FPGA i sprawdzam bit statusu akwizycji. Jak akwizycja zako�czona, to wal� 2 komendy opisane w pierwszym po�cie. Aha!! Robi�em eksperymenty i tak np. przy odczycie tylko 512 bajt�w z bufora, ka�dorazowo robi mi rotacj� o jeden bajt. Podejrzewam, �e co� jest nawalone w drajverach D2XX, albo pieron wie co ?!
Ok. Jaka to fpga ? Na pewno s� tam jakie� mechanizmy dost�pu przez jtaga
: podgl�d ram-u , podgl�d sygna��w itd czy nawet rejestratory z wyzwalaniem.
1. Czy jeste� pewien zawarto�ci pami�ci - ale tak na 10000%? Czyli np
rom ze wzorcem. Napisa�e� �e jest tam jaki� ram, ale mo�e by� dwuportowy
lub inna cholera.
2. Mo�e by� te� tak �e w momencie rozpocz�cia przesy�ania FT czy�ci
sobie fifo ,wiec nale�a�oby wpisa� do fifo dopiero jak zacznie si�
odczyt po pc stronie. Na pewno jest to w sheecie opisane.
3. Szuka�e� jaki� app note, white papers etc ?
VHDL nie wygl�da �le, mo�e ja bym go zrobi� ca�kowicie synchronicznie,
albo przynajmniej synchronizowaďż˝ RST do zegara USB_CLK ( albo oba
powy�sze ). Nie widz� reszty wiec nic wi�cej nie powiem.
Pzdr.
Popatrz na kolejne moje wpisy.. Na 99.99% obstawiam na spaprane drjwery przez producenta, A producent.. , normalka, jak "application engineer" nie wie o co biega, to za Wuja Wacka nie odpowiada na emaile. Krótko mówiąc, support techniczny FTDI nie istnieje, albo ma to w d.... Ponieważ nie znam przyczyny. a tylko skutki, więc zastosowałem "leczenie objawowe". Najsampierw puszczam z ROM'u wzorzec, łapię jego przesunięcie adresowe, a następnie przy każdym kolejnym "frame"'ie danych robię przesunięcie o 16 bajtów. No i to działa. Niestety jest to zrobione metodą empiryczną, zostały wyleczone objawy, lecz nie przyczyny. Nie podoba mi się to moje rozwiązanie, ale póki co jest skuteczne i muszę z tym żyć...
Jakiś progres ?
Adam
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
as
Guest
Tue Jul 08, 2014 6:54 am
Mam na pokładzie swojej PCB, FT2232H i FPGA. Zapis z PC do FPGA w trybie
synchronicznym działa OK, natomiast mam jajca przy odczycie z FPGA do PC.
Przy pierwszym odczycie zawartość FT_In_Buffer jest cholera jakby zrotowana
w prawo o losową ilość adresów. Np. o trzy adresy, w wyniku czego odczytuję:
253,254,255,0,1,2,3....255,0,1,2....255,0,1,2....252
Każdy kolejny odczyt powoduje rotację w prawo o dokładnie 16 bajtów.
Jakieś porady?
Może brakuje ci jakiegoś rezystora podciągającego i przekonfigurowanie FTDI
powoduje np. szpilki na zegarze. W tego typu przypadkach dobrze mieć
analizator stanów logicznych. Ja kupiłem polecany niedawno na grupie:
http://www.ebay.com/itm/CY7C68013A-56-EZ-USB-FX2LP-USB2-0-Develope-Board-Module-Logic-Analyzer-EEPROM-AX-/141214164581?pt=LH_DefaultDomain_0&hash=item20e1052665
Całkiem fajnie się sprawuje. Jedynie musiałem zmienić eeprom na 24C02,
zaprogramować go tym samym wsadem co oryginalny 24C128, zdjąć zworkę J1 oraz
wlutować rezystor pomiędzy 1 i 2 nogę eeproma (adres na 000) - wtedy działa
najnowsze saleae (bez przeróbki działa starsza wersja).
Guest
Sat Jul 26, 2014 2:51 am
W dniu poniedziałek, 7 lipca 2014 14:20:39 UTC+2 użytkownik Adam Górski napisał:
Quote:
Jakiďż˝ progres ?
Witaj Adam,
No w końcu coś 'do przodu' !! W końcu ten fragment projektu zaczął fungować.
No i teraz gdzie był problem, i jak został rozwiązany? Otóż problem jest nie w błędnej dokumentacji FTDI, lecz w jej niekompletności. FTDI zarówno w opisie HW jak i SW nic nie wspomina o przypadkach 'odaktywnienia' sygnału TXE# podczas softwarowej transakcji FT_Read. I tu jest jajco!! Stąd nie ja pierwszy i chyba nie ostatni wydałem z siebie tyle wulgaryzmów do monitora podczas prototypienia tak wydawałoby się badziewnego tematu. Aż w końcu mój syn znalazł coś takiego:
http://www.ovro.caltech.edu/~dwh/correlator/pdf/ftdi.pdf
Skorzystałem z Fig.17, Fig.22, Fig.8. + objaśnienia + przebiegi czasowe jako wzorzec do symulacji. W/g powyższego zrobiłem to na FSM edytorze (Aldec ewaluacyjny), przetłumaczył mi to na VHDL, symulacja i takie tam, ..w końcu działa !! Aha!! W/w malunki (8,22) są nasmarowane w/g konwencji ASM.
(Algorythmic State Machine). Nie mylić z czystym FSM. Trochę mnie to na sam początek poirytowało, ale już wiem o co chodzi.
Jeżeli ktokolwiek z grupy potrzebuje gotowego kodu TX/RX w VHDL'u na komunikację w trybie sync. FIFO dla FT2232H/FPGA, proszę dać znać.
Pzdr,
*.Sch
P.S. A coby nie było tak sielankowo, to wyskoczył inny problem , przy którym ZGŁÓPIAŁEM !! No ale, jest to temat na inny wątek.. Jutro to opiszę w szczegółach.