做网站如何找客户,在线 wordpress,做网站需多少钱,废料回收网站建设给EagleSDR做了个USB 3.0的子卡#xff0c;采用FT600方案#xff0c;实物如下#xff1a; 用FT600DataStreamerDemoApp测试#xff0c;速度如下#xff1a; 由于FT600是16bit的接口#xff0c;如果用FT601的32bit接口#xff0c;性能应该还会有大幅提升。 测试代码很简…给EagleSDR做了个USB 3.0的子卡采用FT600方案实物如下 用FT600DataStreamerDemoApp测试速度如下 由于FT600是16bit的接口如果用FT601的32bit接口性能应该还会有大幅提升。 测试代码很简单参考了网上大佬的例程
timescale 1ns / 1nsmodule FT600_stream
(//PL时钟input pl_clk, //PL端时钟// 复位input rst_n, //外部复位output reg ft600_reset_n, //ft600复位// FIFO interface input ft600_clk,inout [15:0] ft600_data,inout [1:0] ft600_be,input ft600_rxf_n,input ft600_txe_n,output ft600_oe_n,output ft600_wr_n,output ft600_rd_n
);reg ft600_wakeup_reg;//从host来退出读操作
wire r_oob;
//从host来退出写操作
wire w_oob;// assign ft600_siwu_n 1b1; // pull-upwire [15:0] rd_data;
wire [15:0] wr_data;
wire [1:0] be_rd;
reg [1:0] be_wr;
reg [2:0] ft600_state; //状态localparam FT600_IDLE0,FT600_READ1,FT600_READ_ABORT2,FT600_WRITE3,FT600_WRITE_ABORT4;assign rd_data ft600_data;
assign ft600_data (ft600_stateFT600_WRITE || ft600_stateFT600_WRITE_ABORT) ? wr_data : 16bz;
assign be_rd ft600_be;
assign ft600_be (ft600_stateFT600_WRITE || ft600_stateFT600_WRITE_ABORT) ? be_wr : 2bz;// write data dirreg [15:0] wr_cnt;
assign wr_data 16hffff - wr_cnt;//写计数器
always (posedge ft600_clk)
beginif(!ft600_reset_n)beginwr_cnt 16d0;endelse if(!ft600_wr_n) beginwr_cnt wr_cnt 1b1;end
end//写信号
assign ft600_wr_n!((ft600_stateFT600_WRITE || ft600_stateFT600_WRITE_ABORT) !ft600_txe_n);
//读信号读状态且有数据可读
assign ft600_rd_n!((ft600_stateFT600_READ || ft600_stateFT600_READ_ABORT) (!ft600_rxf_n));
//在空闲态或读状态且有数据可读时允许FT600控制数据线
assign ft600_oe_n!((ft600_stateFT600_IDLE || ft600_stateFT600_READ || ft600_stateFT600_READ_ABORT) !ft600_rxf_n);//定时器
localparam DELAY_5MS_CNT(5*100000-1);
reg[31:0] delay_timer;//状态机
always (posedge ft600_clk)beginif(!ft600_reset_n)beginft600_state FT600_IDLE;endelse beginif (r_oob)beginbe_wr2b01;delay_timer DELAY_5MS_CNT;ft600_stateFT600_WRITE_ABORT;endelse if (w_oob)begindelay_timer DELAY_5MS_CNT;ft600_stateFT600_READ_ABORT;endelsebegincase(ft600_state)FT600_IDLE:beginbe_wr 2b11;if((!ft600_rxf_n))ft600_state FT600_READ; //有数据可读else if(!ft600_txe_n)ft600_state FT600_WRITE; //可写入数据elseft600_state FT600_IDLE;endFT600_READ:if (ft600_rxf_n)ft600_state FT600_IDLE;FT600_READ_ABORT:if (delay_timer32b0)ft600_state FT600_IDLE;elsebegindelay_timerdelay_timer-1b1;endFT600_WRITE:if(ft600_txe_n)ft600_state FT600_IDLE;FT600_WRITE_ABORT:if (delay_timer32b0)ft600_state FT600_IDLE;elsebegindelay_timerdelay_timer-1b1;endendcaseend end
end//延时复位
localparam RST_CYCLE100;
reg [19:0] rst_cnt;always (posedge pl_clk)
beginif (!rst_n)beginft600_reset_n0;rst_cnt0;endelsebeginif (rst_cntRST_CYCLE)rst_cntrst_cnt1;elsebeginft600_reset_n1;endend
endendmodule