当前位置:首页 > 工业控制 > 工业控制
[导读]摘要:设计和实现了U盘SoC。本系统包括USB CORE和已验证过的CPU核、Nandflash、UDC_Control等模块,模块间通过总线进行通信。其中USB CORE为本文设计的重点,用Verilog HDL语言实现,同时并为此设计搭建了功能完备的

摘要:设计和实现了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的控制信号,从而控制总线上的数据发送。
    控制传输的实现:
    SETUP阶段:从图4中可看出,当token_valid_i、Pid_setup、ep0_sel有效时,表明收到一个有效的令牌包,udc_as_o被拉高,表示开始数据传送,转入ctrl_setup_stage状态,此时cpu把device_bufok_i信号拉高,随后开始接收数据,在setup阶段8个字节的标准请求数据接收完成后,send_hdsk_pkt_o信号变高,表示数据接收正确,要求发送一个ACK的握手包。


    DATA阶段:数据阶段是可选的,并且数据阶段的传送方向可以是IN或OUT。以IN为例来介绍,当Pid_in、token_valid_i、ep0_sel有效时,udc_as_o被拉高,表示开始数据传送,转入ctrl_in_stage_empty,接着转入ctrl_in_stage状态,CPU将device_bufok_i拉高,表示开始接收数据,等待数据传完后,send_hdsk_pkt_o信号变高,表示数据接收正确,并将toggle机制翻转,要求打包模块发送一个ACK的握手包。
    STATUS阶段:STATUS阶段也分为STATUS IN和STATUS OUT两种情况。在STATUS OUT阶段,接受到HOST发送过来的空数据包后,状态机会将send_hdsk_pkt_o信号拉高,发送ACK包给HOST。其状态机同SETUP状态机类似。
    中断、批量、同步传输的IN实现:在硬件设计上,中断、批量和同步3种传输方式的处理都是一样的,只是在系统配置时,各传输方式对应的端点不同。下面以3种传输方式的IN传输来介绍。图5为3种传输方式的IN传输的状态机。


    从上图可看出,在收到IN令牌后,状态机将tide_as_o拉高,表示开始传送数据,转入In_transfer_empty状态,再转入In_transfer状态,cpu若能传送数据,则把device_buf_ok_i信号置高,开始接收数据,等待数据传送完毕时,状态机会将send_data_pkt_o拉高,将此信号送至打包模块,从而将所需要的数据发送给HOST。
2.1.5 打包模块
   
本模块接收从SIE传来的控制信号,根据USB协议,产生所需要的包传送给发送模块。
2.1.6 tx模块
    tx模块是总线发送模块。它将打包模块发送过来的包信息,进行并串转换,位填充,NRZI编码后,将数据发送给主机。此模块同rx模块类似,不再赘述。
2.2 8051CPU
   
此设计中的CPU为一个验证过的IP核。它包含:1个8位中央处理器、1个片内振荡器及时钟电路、4 KB ROM程序存储器、128B RAM数据存储器、可寻址64 KB外部数据存储器和64 KB外部程序存储器的控制电路、32条可编程的I/O线(4个8位并行I/O接口)、2个16位的定时,计数器、1个可编程全双工串行接口、5个中断源、2个优先级嵌套中断结构。将USB的通信请求接入到CPU的一个外部中断接口上,当USB的通信请求到来时,系统会产生一个中断,转入中断服务程序。
    此外,还需要设计一个CPU的固件firmware,实现USBCORE的上电初始化过程(向UDC_Control中的控制寄存器和状态寄存器写入初始数据)、USB CORE中断处理并完成USB传输事务、使设备摆脱异常状态等功能。
2.3 UDC_Control
    UDC_Control模块位于CPU和USB CORE之间,它完成CPU对USB通信的控制和数据的读写操作。UDC_CTRL模块中设有22个特殊功能寄存器,来完成USB通信。
    USB_INT1和USB_INT2为中断寄存器,其各个位分别表示USB通信的9种中断请求(剩下的位为保留位),但USBCORE一次只能向CPU提供一个中断信号,这两个USB_INT寄存器供软件在进入中断后查询是USB的何种中断。EP0_CTRL、EP0_INFIFO_DATA、EPO_INFIFO_CNT、EP0_OUTFIFO_ DATA、EP0_OUTFIFO_CNT这5个寄存器都是与Endpoint0相关的,Endpoint0是由一个输入端点和一个输出端点组成,用来实现控制传输。所有支持USB标准请求和Class定义的请求都通过这个端点来处理。其中EP0_CTRL用来对Endpoint0的传输进行控制,当CPU要向USB主机传送数据时,就会将数据写入EP0_INFIFO_DATA,EP0_INFIFO_CNT是CPU向EP0_INFIFO_DATA中写入数据的字节数。EP0_OUT,Endpoint1,Endpoint2,Endpoint3,Endpoint4的寄存器情况类似,在此不再多做介绍。UDC_STATUS和DEVICE_CTRL是接口状态和控制寄存器,对CPU和USB CORE的通信进行监控。
2.4 NandFlash
   
针对NandFlash读写的特点,特别是其可随机读,但无法随机写的问题,需要通过设置缓冲区来解决。在与USB Host进行数据交换的过程中,最小的单位是扇区:512字节。由于NandFlash在写之前必须先擦除,而一擦又必须擦一个Block,因此在擦除某Block之前必须保存同一个Block中有关扇区的数据。因此,如果每收到一个扇区的内容就进行一次擦、保存、写的操作,系统任务将十分繁重,无法及时响应USB Host端的请求。因此,在系统中设置32K的缓冲区,每完一次数据传输后,记下本次要写的开始扇区和总扇区数,将本次要写的数据涉及的扇区以外的数据从NandFlash中读出来,存放在缓冲区中对应位置,然后擦除一个Block,再将缓冲区中内容一次全部重新写入NandFlash。

3 仿真与验证
3.1 仿真环境的介绍
   
为了验证此设计,需要建立一个和实际应用情况类似的仿真验证平台,这个仿真系统平台包括USB CORE的RTL代码、CPU核、控制软件的二进制代码、UDC_Control、NandFlash、USB Host的仿真模型等。整个系统的Modelsim仿真环境如图6所示。


    USB HOST的仿真模型用来模拟PC机上的主机控制器,完成上电检测、标准设备请求、批量传输请求等功能,用来检测USB设备应答数据是否正确。负责读取主控制器的事务处理列表,并将它们安排在一系列长度的帧中,发送到USB总线上。
3.2 仿真结果
   
通过此测试平台,成功的完成了USB主机与U盘SoC之间的通信。仿真图如图7所示。


    从仿真图中可以看出,通过控制传输对设备进行了复位、获取设备描述符、配置地址等操作。接着进行了一个bulkout和bulk in传输。主机准确的将数据写入了NandFlash,并且正确的将数据读出。仿真表明,设计的结果满足了USB设备控制器的规格要求。

4 结束语
   
文中探讨了U盘SoC的设计,并结合仿真工具通过了RTL级仿真,证明了本设计的可行性。该U盘SoC设计具有便于修改、易于实现的特点。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭