FTDI社のUSB3.0ブリッジIC FT601の転送レートを同IC搭載ボードUSB-107を用いて実際に計測しました。
転送レートの理論値はデータ32bit幅・100MHz動作という仕様から、400MB/s (MByte/sec 以下同様)となっています。

設定
以下の設定で測定を行いました。
- 動作モード:245 FIFO, 100MHz
- 測定範囲(送信/受信):1MB~50MB を1MB Step (50点)
- 測定回数:10回を平均
- D3XXデバイスドライババージョン:v1.2.0.6
- 送受信対象ボード:EDA-302
結果
PCにより結果が異なりました。下記のPCでは送信 194MB/s, 受信 311MB/sとなりました。

別のPCでは送信 354MB/s, 受信 327MB/sとなりました。

FPGAの受信ステートマシン例
clkは100MHzです。FIFOへの書込処理が含まれています。
entity H_FT600_S245_32_RX_V3 is
port (
clk : in std_logic;
reset : in std_logic;
be : in std_logic_vector(3 downto 0);
rxf : in std_logic;
oe : out std_logic;
rd : out std_logic;
data : in std_logic_vector(31 downto 0);
rcv_length : out std_logic_vector(15 downto 0);
rcv_data : out std_logic_vector(31 downto 0);
fifo_wreq : out std_logic
);
end entity;
architecture rtl of H_FT600_S245_32_RX_V3 is
type state_type is (idle,s0,s1,s2,t0);
signal state : state_type;
signal rcv_length_r : std_logic_vector(15 downto 0);
signal rcv_data_r : std_logic_vector(31 downto 0);
signal rxf_r : std_logic;
signal oe_r : std_logic;
signal rd_r : std_logic;
signal data_r : std_logic_vector(31 downto 0);
begin
rcv_length <= rcv_length_r;
rcv_data <= rcv_data_r;
process (clk, reset, rxf)
begin
if reset = '1' then
state <= idle;
oe <= '1';
rd <= '1';
rcv_length_r <= X"0000";
rcv_data_r <= X"00000000";
oe_r <= '1';
rd_r <= '1';
fifo_wreq <= '0';
elsif rising_edge(clk) then
rxf_r <= rxf;
oe <= oe_r;
rd <= rd_r;
data_r <= data;
case state is
when idle =>
rcv_length_r <= X"0000";
rcv_data_r <= X"00000000";
rd_r <= '1';
if rxf_r = '0' then
state <= s0;
oe_r <= '0';
else
oe_r <= '1';
state <= idle;
end if;
when s0 =>
rd_r <= '0';
state <= s1;
when s1 =>
state <= s2;
when s2 =>
state <= t0;
---------------------------------------
when t0 =>
if rxf_r = '0' then
rcv_data_r <= data_r;
rcv_length_r <= rcv_length_r + '1';
fifo_wreq <= '1';
state <= t0;
else
oe_r <= '1';
rd_r <= '1';
fifo_wreq <= '0';
state <= idle;
end if;
---------------------------------------
end case;
end if;
end process;
end rtl;
FPGA送信ステートマシン例
clkは100MHz(反転位相)です。FIFOからの読込処理が含まれています。
entity H_FT600_S245_32_TX_V5 is
port(
clk180 : in std_logic;
reset : in std_logic;
txe : in std_logic;
wr : out std_logic;
be : out std_logic_vector(3 downto 0);
data : out std_logic_vector(31 downto 0);
fifo_data : in std_logic_vector(31 downto 0);
fifo_rreq : out std_logic
);
end entity;
architecture rtl of H_FT600_S245_32_TX_V5 is
type state_type is (idle,s0,s1,t0);
signal state : state_type;
signal txe_r : std_logic;
signal be_r : std_logic_vector(3 downto 0);
signal data_r : std_logic_vector(31 downto 0);
signal fifo_data_r : std_logic_vector(31 downto 0);
begin
data <= fifo_data_r;
be <= be_r;
---------------------------------------------
process (clk180, reset)
begin
if reset = '1' then
state <= idle;
wr <= '1';
txe_r <= '1';
fifo_rreq <= '0';
be_r <= (others=>'0');
data_r <= (others=>'0');
elsif rising_edge(clk180) then
txe_r <= txe;
fifo_data_r <= fifo_data;
case state is
when idle =>
be_r <= (others=>'1');
data_r <= (others=>'0');
fifo_rreq <= '0';
if txe_r = '0' then
state <= s0;
fifo_rreq <= '1';
else
state <= idle;
end if;
---------------------------------------------
when s0 =>
state <= s1;
when s1 =>
wr <= '0';
state <= t0;
--------------------------------------
when t0 =>
if txe_r = '0' then
if data_r = x"FFFFFFFF" then
data_r <= x"00000000";
else
data_r <= data_r + x"11111111";
end if;
state <= t0;
else
wr <= '1';
state <= idle;
end if;
--------------------------------------
end case;
end if;
end process;
end rtl;
下記もご参照ください
- FT600関連製品特設ページ:https://www.hdl.co.jp/FT600/index.html
お問い合わせについて
開発ツールの使い方などは、弊社のサポート外とさせていただいております。
ご担当の代理店様などにお尋ねください。
ソースなどの提供は行っておりません。予めご了承ください。
[kw] TEC-FPGA 2017-04-25 FT601 USB-107 EDA-302
[]




