--USB FIFO から読込み
case RD_STATE is
when S0 =>
--書込み中ではなく、ターゲットの準備もOK
if( RXF_REG='1' and TG_READY='1' and WR_STATE="00") then
RD_N <= '0';
RD_STATE <= S1;
else
RD_STATE <= S0;
end if;
when S1 =>
TG_DO <= USB_DATA; --データ取り込み
RD_STATE <= S2;
when S2 =>
RD_N <= '1';
TG_RD <= '1';
RD_STATE <= S3;
when S3 =>
TG_RD <= '0'; --ターゲットのモジュールに読込み信号
RD_STATE <= S0;
when others => RD_STATE <= S0;
end case;
|
--USB FIFO に書込み
case WR_STATE is
when S0 =>
--ターゲットからの書込み信号を受ける
if( TG_WR='1') then
USB_DATA_REG <= TG_DI;
WR_STATE <= S1;
else
WR_STATE <= S0;
end if;
when S1 =>
--USBへの書込みが可能かつ、読込み中ではない
if( TXE_REG='1' and RD_STATE="00") then
WR <= '1';
DIR <='1';
WR_STATE <= S2;
else
WR_STATE <= S1;
end if;
when S2 =>
WR <= '0'; --書込み
DIR <= '1'; --バスをUSB側
WR_STATE <= S3;
when S3 =>
WR <= '1'; --書込み終了
DIR <= '0'; --バスをFPGA側
WR_STATE <= S0;
when others => WR_STATE <= S0;
end case;
|