U盘SoC的设计与实现
摘要:设计和实现了U盘SoC。本系统包括USB CORE和已验证过的CPU核、Nandflash、UDC_Control等模块,模块间通过总线进行通信。其中USB CORE为本文设计的重点,用Verilog HDL语言实现,同时并为此设计搭建了功能完备的Modelsim仿真环境,进行了仿真验证。
关键词:U盘;片上系统;USB;Verilog HDL
随着便携式设备的广泛使用,移动存储设备被广泛用于信息存储和传输。在目前诸多存储设备中,U盘凭借其体积小、容量大、携带方便、支持热插拔等诸多优点,得到了迅速的普及。而且随着USB技术的广泛应用,在各种SoC系统中集成USB功能也成为一种必然趋势。所以对SoC芯片中集成USB接口的研究开发,具有较高的实用价值。
文中通过分析USB协议,设计出了一种符合该协议的低速和全速的USB设备控制器,并将该控制器与8051CPU核,NandFlash,UDC_Control通过总线连接起来,组成了一个U盘SoC系统,并对此U盘SoC系统加以仿真验证。
1 系统的整体设计
现在的USB控制器主要有两种:带USB接口的单片机(MCU)和纯粹的USB接口芯片。纯粹的USB接口芯片仅处理USB通信,必须有一个外部微处理器来进行协议处理和数据交换。带USB接口的单片机从应用上又可以分成两类,一类是从底层设计专用于USB控制的单片机;另一类是增加了USB接口的普通单片机,这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开发工具简单,但价格比较高,不利于产品升级和改型。
根据上述情况,文中介绍了一种U盘SoC设计:将CPU和USB CORE通过UDC_Control模块连接起来,再加上NandFlash模块,通过总线连接组成一个SoC系统。其整体框图如下图1所示。
2 模块的详细设计
2.1 USB CORE
此模块为该设计的核心模块,实现USB1.1总线接口层设备控制器的功能,是本文设计的重点。USB设备控制器的架构框图如图2所示,rxdp、rxdm为从主机发送过来的信号,txdp、txdm为USB模块发送给主机的信号。其中MCU通过控制SIE来对USB设备进行控制。如图2所示,本设计分为6个模块。下面分别介绍各个模块。
2.1.1 rx模块
rx模块是总线接收模块,实现USB数据传输接收物理层的功能,把串行的USB数据去掉数据包头,进行NRZI解码,去掉填充位,并将串行的数据转换成并行的8位数据。然后将数据送往下一模块处理。本模块又分为dpll、解码和总线状态监测模块。如图3所示。
dpll模块用48 MHz的时钟把总线上传输的时钟和数据信号恢复出来。用48 MHz的时钟对总线上的数据信号进行采样,以去掉抖动,然后产生总线信号电平变化的指示信号change信号,change信号的改变可控制采样点,从而保证数据信号的采样点固定在每位数据信号的中央。
NRZI解码模块检测到同步头后,根据NRZI的原理,将rxdp和rxdp延后一拍的数据进行同或操作,得到的数据经过去填充位,串并转换后,送入解包模块。
总线状态监测模块监测总线的状态,置位suspend,resume,reset等状态指示信号。若Idle时间超过3ms时,就将suspend信号置高,在suspend状态时检测到总线信号变化时,将resume信号置高,若se0时间超过2.5μs时,就将reset信号置高。
2.1.2 解包模块
本模块接收从rx模块送过来的并行数据,按照USB数据包协议规范对接收的数据进行解释,并对数据做CRC校验,给出当前接收包的类型,根据不同类型的包的结构,从包中解出相应的信息送给下一模块。
2.1.3 req_dec模块
本模块对setup阶段USB的标准请求进行解释,提供和USB请求相关的信号给SIE模块,判断funetion和endpoint的地址是否合法。若标准请求中对某个端点所请求的操作和预定的不符,则会产生错误信号。
2.1.4 SIE模块
SIE(Serial Interface Engine)模块是USB CORE的核心模块,根据从解包模块传送过来的信号与从MCU传送过来的接口握手信号,按照USB的相关协议,产生打包模块的控制信号和MCU的控制信号,从而控制总线上的数据发送。
评论