当前位置: 首页 > news >正文

EagleSDR USB HAT FT600

给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 = 1'b1;             // 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_IDLE=0,FT600_READ=1,FT600_READ_ABORT=2,FT600_WRITE=3,FT600_WRITE_ABORT=4;assign rd_data  =  ft600_data;
assign ft600_data  =  (ft600_state==FT600_WRITE || ft600_state==FT600_WRITE_ABORT) ? wr_data : 16'bz;
assign be_rd    =   ft600_be;
assign ft600_be =  (ft600_state==FT600_WRITE || ft600_state==FT600_WRITE_ABORT) ? be_wr : 2'bz;// write data dirreg [15:0] wr_cnt;
assign wr_data = 16'hffff - wr_cnt;//写计数器
always @(posedge ft600_clk)
beginif(!ft600_reset_n)beginwr_cnt <= 16'd0;endelse if(!ft600_wr_n) beginwr_cnt <= wr_cnt + 1'b1;end
end//写信号
assign ft600_wr_n=!((ft600_state==FT600_WRITE || ft600_state==FT600_WRITE_ABORT) && !ft600_txe_n);
//读信号,读状态且有数据可读
assign ft600_rd_n=!((ft600_state==FT600_READ || ft600_state==FT600_READ_ABORT) && (!ft600_rxf_n));
//在空闲态或读状态,且有数据可读时,允许FT600控制数据线
assign ft600_oe_n=!((ft600_state==FT600_IDLE || ft600_state==FT600_READ || ft600_state==FT600_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_wr<=2'b01;delay_timer <= DELAY_5MS_CNT;ft600_state<=FT600_WRITE_ABORT;endelse if (w_oob)begindelay_timer <= DELAY_5MS_CNT;ft600_state<=FT600_READ_ABORT;endelsebegincase(ft600_state)FT600_IDLE:beginbe_wr <= 2'b11;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_timer==32'b0)ft600_state <= FT600_IDLE;elsebegindelay_timer=delay_timer-1'b1;endFT600_WRITE:if(ft600_txe_n)ft600_state  <= FT600_IDLE;FT600_WRITE_ABORT:if (delay_timer==32'b0)ft600_state <= FT600_IDLE;elsebegindelay_timer=delay_timer-1'b1;endendcaseend           end
end//延时复位
localparam RST_CYCLE=100;
reg [19:0] rst_cnt;always @(posedge pl_clk)
beginif (!rst_n)beginft600_reset_n<=0;rst_cnt<=0;endelsebeginif (rst_cnt<RST_CYCLE)rst_cnt<=rst_cnt+1;elsebeginft600_reset_n<=1;endend
endendmodule
http://www.lryc.cn/news/160543.html

相关文章:

  • Java多线程(四)锁策略(CAS,死锁)和多线程对集合类的使用
  • 基于spring boot+ vue+ mysql开发的UWB室内外定位系统源码
  • 第2章_瑞萨MCU零基础入门系列教程之面向过程与面向对象
  • 数字图像处理:亮度对比度-几何变换-噪声处理
  • maven报错:[ERROR] 不再支持源选项 7。请使用 8 或更高版本。
  • MySQL基础3-约束
  • OJ练习第166题——课程表(拓扑排序问题)
  • 单臂路由实现VLAN间路由
  • 【VSCode】文件模板创建及使用.md
  • 【漏洞复现】EnjoySCM存在文件上传漏洞
  • MaPLe: Multi-modal Prompt Learning
  • 软件测试/测试开发丨Jenkins Pipeline 学习笔记
  • java多线程——线程池
  • Linux文件操作
  • Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)
  • bootstrap和application的区别
  • 【狂神】SpringMVC笔记(一)之详细版
  • vue 对axios进行封装
  • 第十二章 YOLO的部署实战篇(下篇-cuda)
  • 原生JavaScript+PHP多图上传实现
  • 企业架构LNMP学习笔记30
  • 数学建模算法汇总(全网最全,含matlab案例代码)
  • openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法
  • 怎么提高自己当众讲话的能力?
  • 孙哥Spring源码第20集
  • 【计算机网络】HTTP(上)
  • Maven学习记录
  • H5游戏开发H5休闲小游戏定制H5软件定制
  • Spring基础及IoC容器的理解
  • 护网行动为什么给的钱那么多