usb30 lose data

  这两天在看ep3c40_ad_da, 我使用USB20的PC采集数据,发现PC接到的数据有丢失现象: USB20的速度约40MB/S, ddr_fifo_2 : huanor_ddr2b_fifo 的clk_wr => 27MHZ;
 
  个人推断是USB20读取速度太低, 因fifo写入速度是27MHZx4byte=108Mbyte/s(注: 程序中32bit width),而fifo读取速度是40MB/S<108Mbyte/s,所以数据必然会丢失; 丢失的过程是: USB读的慢,导致fifo呈现满的状态; 来自5150的rawdata按照恒定的27MHZ频率送来数据, 当fifo被写满后,数据因写不进去而丢失.
  所以这类async做法必须满足, USB读取速度>写入速度,否则必丢; 即USB读取速度一定大于108Mbyte/s.
 
  或者串行操作,写满了通知读,读空后通知写.

elsif rising_edge(TV_PCLK) then
if f1_fi_wrusedw>=conv_std_logic_vector(2**AW-8,AW) then
f1_wr_hfull <= act_on;
else
f1_wr_hfull <= act_off;
end if;

f1_fi_wrreq <= act_off;
--AD CAP data
if DATA_DIR='0' and f1_wr_hfull=act_off then --DATA_DIR->0: EXT TO USB
f1_fi_wrreq <= act_on;
-- f1_fi_din <= conv_std_logic_vector(8, DW/2-10) & AD_B & conv_std_logic_vector(4, DW/2-8) & TV_D;
---- test_data-------------------------
f1_fi_din <= test_data;
test_data <= test_data + conv_std_logic_vector(1, DW);
---------------------------------------
end if;
end if;

posted @ 2013-03-30 18:26  winkle.zhang  阅读(172)  评论(0编辑  收藏  举报