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....252Każdy kolejny odczyt powoduje rotację w prawo o dokładnie 16 bajtów.
Jakieś porady?