龚锋, 焦继业, 闵嘉维
(西安邮电大学 计算机学院,西安 710061)
通用串行总线(Universal Serial Bus,简称USB)具有即插即用、兼容性好、高扩展性等优点,传输数据高效可靠,在嵌入式系统中得到了广泛应用。自Cypress推出全球第一颗USB控制芯片以来,各大公司纷纷抢夺市场,当前USB控制芯片市场几乎被Cypress、Philips等欧美厂商垄断[1],扬智科技是国内为数不多能够自产USB控制芯片的公司,因此研究USB控制器不仅可以掌握核心技术,还可以创造可观的经济效益。
本文的USB2.0设备控制器基于嵌入式SoC系统,Cortex-M0处理器控制USB通信,AHB Lite总线实现Cortex-M0处理器和USB控制器的互联。众多设计者选用8051作为主控芯片[2],Wishbone总线作为连接结构。Cortex-M0处理器与8051处理器相比,Cortex-M0处理器性能优越,面积与8051处理器相当。AHB Lite总线与Wishbone总线相比,AHB Lite总线支持流水线操作[3],指令执行效率更高。本文优化了USB控制器,经过FPGA验证,USB控制器能够高效进行USB数据传输,可广泛应用于嵌入式SoC系统设计中。
USB2.0设备控制器采用自上而下的模块化设计方法,使用Verilog硬件描述语言建立硬件模型,USB控制器主要用来驱动事务传输,对数据进行协议处理。USB控制器架构,如图1所示。
串行接口引擎负责底层协议处理,对USB包进行NRZI(No Return Zero-Inverse)编码/译码,位填充/去填充,CRC(Cycle Redundancy Check)校验。SRAM控制器获取端点的FIFO(First Input First Output) 指针,将FIFO指针转换成SRAM地址,此外产生访问SRAM的控制信号。端点控制单元传递事务传输的控制信号,Cortex-M0处理器依靠微处理器接口访问USB控制器的控制/状态寄存器和每个端点的FIFO。USB包交换成功后端点产生中断请求,USB控制器进入中断。……