新闻中心

EEPW首页>嵌入式系统>设计应用> MCU与USB设备控制器IP核的设计

MCU与USB设备控制器IP核的设计

作者: 时间:2013-12-31 来源:网络 收藏

  收发器的模型如图3所示,Dplus为正相USB差分数据线,Dminu为负相USB差分数据线,两者都是双向的。 OEn为USB发送使能,为低时作为发送功能,单相输出口被置为高阻,为高时作为接收功能,单相输入口被 置为高阻。

MCU与USB设备控制器IP核的设计

2.3.2 Dpll(数字锁相环)模块

  数字锁相环实现时钟恢复、分频及同步时钟;该模块用外部的6M时钟CLK进行分频,产生1.5M的USB系 统时钟,以及把收发器产生的差分信号和并行信号进行锁相,避免产生亚稳态。

2.3.3 SIE(串行接口引擎)模块

  SIE是USB控制器的主要模块;实现协议层的功能、信息包的解析和组合、同步信号识别、位填充和位 剥离、NRZI(非归零反转)的编码和解码、同步字段和包结束码的检测和生成、CRC5、CRC16校验等功能;图 4是设备接收主机发送数据时的状态机。

MCU与USB设备控制器IP核的设计

  从图4可以看出设备在没有数据传输时处于空闲态,低速设备空闲时D+、D-处于J态,当有K态到来时 进入状态转换;以KJKJKK为同步位,同步字段里的最后的2位是同步字段结束的记号,并且标志了包标识 符(PID,Packet Identifier)的开始。然后根据不同的PID分别进入地址态或数据态, 紧跟在地址态后面的 是端点态,因为地址和端点分别是有7位和4位构成共11位,所以只要5位CRC校验就可以了,CRC校验完后就要结束此次的包传输,USB协议中以2个 SE0态和一个J态来表示包的结束。在数据态判断是否为SE0态, SE0态表示8个字节的数据都发送完毕,因为非SE0态即J、K态都表示工作态,所以在数据态中如果总线上 没有SE0到来就一直接收数据。

  2.3.4 ENDPCTL(端点控制)模块

  设计中用到两个端点,端点0和端点1。端点0是半双工传输,主要是在设备的枚举过程中用于控制传输, 端点1是在枚举完成后的中断传输中用设备和主机之间的数据传输。由于中断传输主要是通过端点1输入, 但也有少许输出(如键盘的LED灯输出),我们为了节省资源,所以由端点0完成少许的输出。

 2.3.5 BUFCTL(缓冲器控制)模块

  缓冲器控制模块是USB和SRAM及ROM的连接桥梁,在主机要求输入数据的IN token状态时,控制器 从SRAM或ROM中取出数据送给主机或主机输出数据的OUT token状态时,控制器把接收到的数据存放在 SRAM中,它主要根据串行接口引擎SIE的接收或发送准备信号来控制读写信号,保证数据能正确传输。 USB与共享通用寄存器区,usbREQUST为来自USB的请求访问存储器信号,usbADDR为USB访问存 储器的地址信号,usbADDR[11:8]不等于零时属于USB访问程序存储器的地址空间。当USB与同时访 问数据存储器(SRAM)时,具有优先权。

  3 系统验证环境

  在完成了Verilog 代码设计后,我们进行了仿真、综合验证,前仿用Modelsim、综合用Synplify Pro、 综合后仿真用Cadence 中的NC_Verilog,主要由于NC_Verilog 在后仿中的速度要优于Modelsim,提高了效 率;图5 是用NC_Verilog 仿真设备的枚举过程;

MCU与USB设备控制器IP核的设计

  任何USB 的数据传输都是建立在成功通过枚举的基础上的,只有正确完成了枚举,USB 主机和设备之 间的通信才正在建立起来。所以枚举是USB 通信的最关键的一步。在验证过程中模拟了PC 主机向设备发送 各种命令来完成枚举。在图5 中pid[3:0]中D、3、9、2、1、B 分别表示Setup、DATA0、IN、Ack、Out、 DATA1。当设备插上PC 时主机会持续的SE0 来复位设备,这时设备的地址默认为00,然后主机第一次发送 Setup 包来获取设备的前8 个设备描述符,当设备成功返回数据后,主机第二次发送Setup 包来给设备配 置地址,从图中faddr[7:0]可以看出我们给设备配置的地址为02,在这以后主机都是通过这个地址向设备 获取全部的18 个设备描述符和全部的配置描述符集,在取完这些描述符后主机对设备进行配置,主机就识 别出设备了。

  4 结论

  本文描述了自主研发的MCU+的设计思路。用Verilog语言对其进行了RTL级描述。用 Modelsim进行前仿验证,并在Cadence公司的NC_Verilog上通过了综合后仿验证。为了进一步验证设计的正 确性,本项目选择了XILINX公司的Virtex xc2s2006pq208芯片及XC18V02的存储器,并把上述综合到此 FPGA上加以验证。综合结果表明,协议层模块占用了1672个Slice(71%),652个Slice Registers(13%),2870个4 input LUTs(61%),51个bonded IOBs(36%)。使用上华工艺,该芯片已经流片返回了,并通过demo 板连接到PC上,PC可以检测出为人体输入学设备,说明该芯片完全符合制定的设计要求。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭