Guest
Thu Sep 11, 2014 9:13 pm
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 !!
JarekC.DIY
Guest
Fri Sep 12, 2014 7:47 am
Użytkownik <stchebel@gmail.com> napisał w wiadomości
news:d6fed0ef-648f-4cbb-9e67-db1eb4ffd1a2@googlegroups.com...
Quote:
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=36452&page=2
Pozdrawiam
JarekC
Guest
Wed Sep 17, 2014 1:58 am
W dniu piątek, 12 września 2014 09:47:35 UTC+2 użytkownik JarekC.DIY napisał:
Quote:
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 ?