基于FPGA的USB20控制器设计.docx
基于FPGA的USB2.0控制器设计zhaohy导语:介绍了一种用VHDL设计USB2.0功能控制器的方法,详术了其原理和设计思想,并在FPGA上予以实现摘要:介绍了一种用VHDL设计USB2.0功能控制器的方法,详术了其原理和设计思想,并在FPGA上予以实现。关键词:USB、VHDL、FPGA在视频存储和图像宽带着域中,经常碰到实时高速数据传输的要求。2000年4月,由Intel、Microsoft、NEC、Compaq、Lucent、Phillips等公司共同制订的USB2.0UniversalSerialBus传输协议,其速度远远超过了目前使用IEEE1394接口进展视频传输的400Mbps,到达了480Mbps;而且具有即插即用的PnPPlugAndPlay、可进展菊花链式的级联通过USBHUB进展外围扩展、可串连多达127个USB设备等优点。应用该协议可支持实时语音、音频和视频数据的传输。本文针对高速数据传输需求,根据USB2.0的协议标准,利用VHDL语言实现符合该协议的功能控制器,在视频压解系统中使数据在PC与外设之间高速传输。如图1所示由视频A/D收集的原始视频数据,在Philips公司消费的TM1300专用视频处理器中压缩后,通过USB控制器送至PC机。PC机的整个通过USB控制器传输到TM1300,解压后发送至视频D/A。IMG=视频压解系统/uploadpic/THESIS/2007/12/2007122113355051118L.jpg/IMG1控制器构造原理USB2.0控制器构造框图如图2所示。控制器主要由两个局部组成,其一为与外设的接口,另一个是内部协议层逻辑PLProtocolLayer。内部存储器仲裁器实现对内部DMA和外部总线对存储器访问之间的仲裁。PL那么实现USB的数据I/O和控制。IMG=控制器构造原理/uploadpic/THESIS/2007/12/2007122113355624877F.jpg/IMG接口有三种:一种是与微控制器之间的功能接口;一种是与单口同步静态存储器SSRAM之间的接口;另外一种是与物理层之间的接口。这里符合UTMIUSBTransceiverMacrocellInterface标准定义。2控制器实现控制器接口的信号框图如图3所示。存储器采用标准的单口SRAM,其信号接口由32位数据线SRAM_DATA、15位地址线SRAM_ADDR及读写信号SRAM_WE和SRAM_RD组成,系统所需SRAM的容量为215×32bit=128KB。IMG=控制器实现/uploadpic/THESIS/2007/12/2007122113360278919P.jpg/IMG而与微控制器之间的接口信号包括32位数据线DATA、18位地址线ADDR以及DMA恳求和响应信号DMA_REQ和DMA_ACK。由于要支持到128KB,需要17位地址线,另外还需要一根地址线来选通SSRAM和USB控制器内部的存放器,总共需要18根地址线addr17:0。定义如下:USB_RF_SELIMG=USB数据I/O和控制通讯图/uploadpic/THESIS/2007/12/2007122113361371349I.jpg/IMGDMA和存储器接口提供随机存储器访问和DMA操纵。该模块使PL和外部微控制器采用DMA方式访问SSRAM。当外部总线有访问SRAM的恳求时,且PL没有恳求访问存储器,控制逻辑如下:req、ack分别对应外部总线和存储器之间的恳求和响应信号,din、addr和we分别是外部总线给出的数据、地址和写信号,mreq是内部DMA向存储器发送的恳求信号,mdin、maddr和mwe分别是内部DMA给出的数据、地址和写信号。selIMG=端点操纵/uploadpic/THESIS/2007/12/20071221133619577925.jpg/IMG当控制器收到中断时,读中断源存放器Ep_INT6:0来判定中断源和产生的原因。可自定义中断源,如Ep_INT2定义为该控制器接收到不支持的PID而产生的中断:Ep_INT2IMG=SETUP和OUT分组来的数据/uploadpic/THESIS/2007/12/2007122113363062906R.jpg/IMG2.4DMA操纵DMA操纵允许控制器与功能接口之间数据的透明传输。一旦设置了DMA操纵,那么不需要微控制器的干预。每个端点有一对DMA_REQ和DMA_ACK信号。当CSR存放器中DMA使能信号位Ep_CSR15被置位时,USB控制器使用DMA_REQ和DMA_ACK这两个信号来进展DMA的流控制。当缓冲区有数据或者为空需要填充时发送DMA恳求信号DMA_REQ,每传输4字节,响应一个DMA_ACK信号。由于USB2.0协议定义的事务操纵以8bit为单位,因此完成一次32bit的DMA操纵需要进展4次写8bit。内部DMA采用高效的One-hot状态机设计方法,状态转换如图7所示。当需要将接收到的数据存储到SRAMrx_dma_en=1时进入WAIT_MRD状态,在该状态选中一个临时数据存放器,并向存储器发送恳求信号mreq,从存储器中预取4字节当接收到的数据少于4字节时,保证有4字节的数据写入存储器到该存放器中,然后进入MEM_WR状态。当PL的分组拆装器接收到1字节数据时,将该字节写入临时存储器,转入下一状态MEM_WR1;当分组拆装器没数据给DMA仲裁器时那么进入MEM_WR2状态,在此状态将临时存储器中的数据写入SRAM,然后回到IDLE状态。在操纵经过中,使用计数器adr_cb对传输字节数进展计数,通过addr_cb1:0的值标识当前传输的是32bit中的哪个字节。计数器sizu_c每接收1字节数值加1。在需要读取SRAM中的数据tx_dma_en=1时,DMA仲裁器由IDIE状态进入MEM_RD1状态,读取4字节数据到发送缓冲区中,然后进入状态MEM_RD2,再读4字节进入状态MEM_RD3,这8字节轮流使用Buffer0和Buffer1缓冲区:在需要读取SRAM中的数据tx_dma_en=1时,DMA仲裁器由IDLE状态进入MEM_RD1状态,读取4字节数据到发送缓冲区中,然后进入状态MEM_RD2,再读4字节进入状态MEM_RD3,这8字节轮流使用Buffer0和Buffer1缓冲区:ifNOTadr_cb2ANDmackthenBuffer0完毕语文中阐述了USB2.0功能控制器的一种实现方案。其VHDL语言实当代码,已在XILINX公司的FPGAVirtexXVV3006fg456中通过了XilinxISE的仿真、综合及布局布线。FPGA的规模是32万门,1536个CLB可配置逻辑单元。该控制模块占用2050个Slice66%,使用了1697个Slice触发器27%和3047个4输入LUT表49%。整个FPGA的速度可到达56.870MHz,完全知足视频数据的高速传输对32bit数据操纵,到达480Mb/s的速度时钟只需15MHz。该方案实现的控制器便于修改且易于实现,可作为一个功能模块嵌入到SOC中,可使不同情况最大限度地灵敏设计片上系统。0