-
1. Data: 2014-09-11 21:13:14
Temat: Szybkie kostki USB
Od: s...@g...com
Problem jest taki:
PC<=>USB(FT2232H)<=>FPGA(Spartan6)<=ADC
Potrzebuję szybkiej transmisji danych przez USB. 20MB/s załatwia sprawę.
FT2232H w trybie Synchronuous FIFO jest faktycznie szybkie (>35MB/s), ale zachowuje
się dość upierdliwie. Zawija mi dziadyga cały ciąg danych o ileś tam bajtów przy
każdym kolejnym odczycie. Przykładowo, do celów testowych zaimplementowałem w FPGA
ROM o zawartości 0,1,2,3......255. No i pierwszy odczyt daje mi ciąg:
252,253,254,255,0,1,2,3......251. Każdy kolejny odczyt daje mi ciąg przesunięty
zawsze o tę samą liczbę bajtów. Np. 250,251,252,253,254,255,0,1,..249.
Licznik adresów ROM jest resetowany przed każdym kolejnym odczytem, sprawdzone, nie
ma się tutaj czego czepiać. Drajvery od FTDI są jakie są i gówno mogę tutaj zdziałać.
No chyba, że ktoś z Was ma już jakieś doświadczenie w obsłudze tego trybu i coś
podpowie? Aha, zapis PC=>USB=>FPGA działa w tym trybie bez zarzutów.
A może zaproponujecie jakąś inną kostkę USB? Cypress robi takie badziewia, ale zanim
się na coś zdecyduję, chciałbym zasięgnąć Waszej opinii, zanim będzie mnie szlag
trafiał jak w przypadku FTDI. Ważne: >20MB/s !!
-
2. Data: 2014-09-12 09:47:35
Temat: Re: Szybkie kostki USB
Od: "JarekC.DIY" <j...@g...pl>
Użytkownik <s...@g...com> napisał w wiadomości
news:d6fed0ef-648f-4cbb-9e67-db1eb4ffd1a2@googlegrou
ps.com...
>Problem jest taki:
>
>PC<=>USB(FT2232H)<=>FPGA(Spartan6)<=ADC
>
>Potrzebuję szybkiej transmisji danych przez USB. 20MB/s załatwia sprawę.
>FT2232H w trybie Synchronuous FIFO jest faktycznie szybkie (>35MB/s), ale
>zachowuje się dość upierdliwie. Zawija mi dziadyga cały ciąg danych o ileś
>tam >bajtów przy każdym kolejnym odczycie. Przykładowo, do celów testowych
>zaimplementowałem w FPGA ROM o zawartości 0,1,2,3......255. No i pierwszy
> >odczyt daje mi ciąg: 252,253,254,255,0,1,2,3......251. Każdy kolejny
>odczyt daje mi ciąg przesunięty zawsze o tę samą liczbę bajtów. Np.
> >250,251,252,253,254,255,0,1,..249.
>Licznik adresów ROM jest resetowany przed każdym kolejnym odczytem,
>sprawdzone, nie ma się tutaj czego czepiać. Drajvery od FTDI są jakie są i
>gówno mogę >tutaj zdziałać. No chyba, że ktoś z Was ma już jakieś
>doświadczenie w obsłudze tego trybu i coś podpowie? Aha, zapis
>PC=>USB=>FPGA działa w tym trybie >bez zarzutów.
>
>A może zaproponujecie jakąś inną kostkę USB? Cypress robi takie badziewia,
>ale zanim się na coś zdecyduję, chciałbym zasięgnąć Waszej opinii, zanim
>będzie >mnie szlag trafiał jak w przypadku FTDI. Ważne: >20MB/s !!
A czytałeś ten wątek:
http://www.alteraforum.com/forum/showthread.php?t=36
452&page=2
Pozdrawiam
JarekC
-
3. Data: 2014-09-17 01:58:33
Temat: Re: Szybkie kostki USB
Od: s...@g...com
W dniu piątek, 12 września 2014 09:47:35 UTC+2 użytkownik JarekC.DIY napisał:
> A czyta�e� ten w�tek:
>
> http://www.alteraforum.com/forum/showthread.php?t=36
452&page=2
>
Owszem. Prawdopodobnie problem u kolegów nadal nie jest rozwiązany do końca, tylko
być może o tym nie wiedzą, bo przesyłają stosunkowo małe pakiety. Zaimplementowałem u
siebie ten fragment w HDL'u, zresztą bardzo podobny do mojego i działa podobnie. Nie
mniej jednak, jeżeli czytam 16320 bajtów (64 bajty mniej niż 16K) to nie mam tego
efektu "przesunięcia" o ileś tam bajtów przy każdym kolejnym odczycie. Dane owszem,
są "zawinięte", ale zawsze tak samo. Z tym da się już żyć. Nawiasem mówiąc,
sprawdzałem przebiegi Chipscopem i wszystko jest cacy. Na 100% FTDI ma spaprane
drajvery. Na różnych forach znalazłem bardzo podobne opisy tego problemu i nigdzie
problem nie został rozwiązany. Jeżeli jesteś zainteresowany, podaję swój fragment w
VHDL'u:
entity fifo_vhd is
Port ( CLK : in STD_LOGIC;
TXE : in STD_LOGIC;
RST : in STD_LOGIC;
RXF : in STD_LOGIC;
OE : out STD_LOGIC;
WR : out STD_LOGIC;
READ_EN : out STD_LOGIC;
RD_ADDR : out STD_LOGIC_VECTOR (13 downto 0));
end fifo_vhd;
architecture Behavioral of fifo_vhd is
signal RD_ADDRs: std_logic_vector (13 downto 0);
begin
process (CLK,TXE,RXF,RST)
begin
if RST='1' then
RD_ADDRs<=(others=>'0');
RD_ADDR<=(others=>'0');
WR<='1';
READ_EN<='0';
OE<='1';
else
if CLK'event and CLK='1' then
if TXE='0' and RXF='1' then
WR<='0';
OE<='0';
READ_EN<='1';
RD_ADDRs<=RD_ADDRs+1;
RD_ADDR<=RD_ADDRs;
else READ_EN<='0';
WR<='1';
OE<='1';
end if;
end if;
end if;
end process;
end Behavioral;
Wracając do głównego pytania... Jakie inne kostki USB ?