原创 基于FPGA的图像采集之一 USB2.0

2015-9-29 15:59 1387 27 27 分类: FPGA/CPLD

一 .USB2.0简介

USB2.0协议时一种高速串行的通信协议,它是半双工的,最高传输速率可达480MHZ/s,并且支持热插拔等特点,目前被广泛使用。
二.项目描述
既然是图像采集,就要有采集图像的设备,它将采集到的数据发送给FPGA,通过LVDS_BUFF模块将串行数据转换成并行数据,并完成时钟域的转换;然后通过SDRAM_CTRL控制模块将数据缓存到SDRAM中;再通过GEN_F(成帧模块)为数据加上帧结构,以及时钟域的切换;最后通过USB_CTRL模块将数据传送给USB芯片,等待上位机来将数据读走。
该项目一共有四个字模块,各个模块之间的关系可见下图,今天首先介绍USB2.0模块,我们使用的USB芯片型号为CY7C68013A。
项目整体架构图
1.gif

 三.USB子模块介绍

如下图,FPGA与PC之间通过USB芯片完成数据的传输,USB芯片为两FIFO机制,分别为读、写FIFO。写数据时,FPGA将数据写入到W_FIFO中,FPGA发送一个PKG_END(结束信号),通知PC来取数据。读数据时,PC机先将数据写入R_FIFO,在一定条件下,FPGA通过USB控制模块将数据取出。
 
2.gif
 
  从开发板手册上可以看到这样几个管脚(管脚名字已改为笔者自己定义的名字)usb_clk,addr,w_en,usb_data,oe,r_en,flag_b,flag_c。我们来分别看看这些管脚的含义。
usb_clk:usb时钟
addr:选择哪一个FIFO。这个很好理解,既然有两块FIFO,那么我当前使用的是哪一块,就要通过这么一个地址来说明。
w_en:写使能,低有效。w_en有效数据才可写入W_FIFO。
oe:读数据时使用,数据导通到管脚。
r_en:读使能,低有效。在oe有效的前提下,r_en有效,才可从R_FIFO中读出数据。
flag_c:空标志。
flag_b:满标志。
usb_data:数据线,FPGA与USB的数据线只有这么一条,它要完成读写操作,因此它的接口类型为IO(输入输出),是一个三态结构。
  1.三态门结构图解说明
3.gif
注:斜线代表该信号位宽大于1。
  三态门结构在IOB中,IOB通过连接PAD(芯片上的IOB与pin连接的接口)与pin连接,将数据输入输出。当en使能时,W_data通过usb_data输出到USB W_FIFO中;当en无效时,R_data通过usb_data将数据读入到R_data中。

 

 

2.接口说明
1)写接口
 
4.gif
 
  2)读接口
 
5.gif
3.关键信号时序
1)写时序
6.gif

FPGA写数据时:

1.首先addr选中W_FIFO,延时一个时钟(等待读写FIFO的切换)。

2.检测FIFO为空(flag_C)将W_en有效,同时开始向FIFO中写入数据W_data,记过两个时钟,flag_C拉高。

3.写满FIFO后,W_en无效,通知PC来读数据。

4.Pkg_end为结束标志,随时可以拉底信号,结束写操作,通知PC机来读,这里没有使用该信号。只有写满FIFO,上位机才来取数据。

2)读时序

7.gif
 

FPGA读数据时:

1.首先addr选中R_FIFO,延时一个时钟(等待读写FIFO的切换)。

2.检测FIFO为满(flag_b)同时将O_en、R_en有效(或者O_en先有效、R_en再有效),开始从FIFO中读出数据R_data,记过两个时钟,flag_b拉高。

3.读空FIFO后,O_en、R_en无效。

 

注:该项目中只使用了写操作,读操作没有使用,但还是把读时序给出,便于大家理解。USB控制模块是这四个模块中最简单的一个模块,后续还会把其它模块按照笔者自己的理解给出,希望对大家有益。 

 

文章评论0条评论)

登录后参与讨论
我要评论
0
27
关闭 站长推荐上一条 /2 下一条