用CPLD设计USB1.1 UTMI
扫描二维码
随时随地手机看文章
摘 要: 在USB收发器基础上设计UTMI时应注意的细节问题,并给出了最后的仿真波形。
关键词: UTMI USB1.1 CPLD
研制和开发使USB的数据能够在普通网线上传播,以延长USB设备和主机之间距离的装置具有广泛的应用价值[1]。为此需要一个能够透明地转换USB数据的设备。该设备在功能上与集线器有些相似,但现有的集线器芯片不能满足这一要求。因此有必要自行设计一种UTMI(USB Transceiver Macrocell Interface)。利用这种UTMI还可以更方便地设计相应的串行接口引擎(SIE)及更进一步设计应用的外部设备。本文以Philip公司的ISP1105为例,详细介绍在USB transceiver的基础上设计UTMI的细节问题,并给出了最后的仿真波形。
1USB收发器
UTMI是在USB收发器的基础上工作的。ISP1105完全兼容USB1.1协议[2],支持12Mbps全速传输和1.5Mbps低速传输。既可以用作设备收发器,也可以用作主机收发器,同时支持单边和差分2种检测方式,其功能框图如图1所示。图中:为低电平时驱动器处于发送状态,高电平时为接收状态。当MODE为高电平时,ISP1105驱动器处于差分驱动模式(模式1),其对应的引脚功能(输出功能)如表1所示,接收引脚的功能(输入功能)如表2所示。详细资料请参考Philip公司网站[3]。
2UTMI设计
UTMI位于USB收发器和SIE之间,负责USB收发器的串行差模数据和SIE的并行数据之间的相互转换。图2描述了UTMI在USB应用中的位置。
2.1 UTMI结构框图
UTMI结构框图如图3所示。UTMI主要由接收部分、发送部分和时钟逻辑模块组成。时钟逻辑模块根据USB总线上的数据产生同步时钟,并利用这个基本的时钟来接收和发送数据。接收数据时,依次进行NRZI解码、剔除填充位、串并转换,然后输出到SIE;发送数据时,依次进行并串转换、位填充、NRZI编码,然后由发送模块输出到USB收发器。
2.2 DPLL
USB是一种异步传输模式,发送端和接收端的时钟来自不同的晶振,虽然额定速率都是12Mbps或1.5Mbps,但仍然可能造成0.25%的偏差。因此,为了保证时钟和数据相互锁定,需要产生一个可以调节的时钟源,该时钟源即由DPLL(Data Phase Lock Logic)来实现。以全速传输为例,USB主机或集线器以12Mbps的速率发送数据,而在接收端则采用48MHz的时钟对数据进行过抽样(over sample)。正常情况下,4个48MHz的时钟宽度正好等于1个接收位的宽度。当主机的速率大于或小于12Mbps时,DPLL就减少或者增加1个时钟的高低电平来进行调节。这一功能由图4所示的DPLL状态机来实现。
在图4中,A是在48MHz时钟的上升沿对RCV采样的数据,B是在48MHz时钟的下降沿对RCV采样的数据。由图4可以看出,DPLL状态机有0~7和B~F共13个状态。系统复位以后进入状态C,状态C和D可以锁定接收到的差模数据流,因为系统在经过D进入状态5之前数据流至少存在2个边沿的跳变(一般是在SYNC的前2个位)。对应于接收到的差模数据“1”和“0”,状态机会在5-7-6-4和1-3-2-0之间循环。DPLL处于5、4、1、0以及C、D时输出低电平,处于7、6、3、2和B、F时输出高电平。当接收到的位宽度没有变化时,系统就在5-7-6-4和1-3-2-0处循环;当位宽度变窄时,系统就绕过4和0,转而在6和2处开始循环,以减少1个48MHz的低电平;当位宽度变宽时,系统就绕过B和F再分别转到2和6,从而增加1个48MHz的高电平,这样就保证了时钟和数据的相互锁定。用Verilog语言实现的DPLL状态机的仿真波形如图5所示。
图5中:CLK为原始时钟,USB_IN为输入的差模数据,CLK_OUT为输出时钟,STATE为DPLL所处的状态,SD_OUT为USB_IN的采样输出数据。由图5可以看出,当接收位较宽时,状态机额外增加了1个状态B的高电平;当接收位较窄时则越过状态4,由状态6直接转到状态1,状态机减少了1个低电平,从而达到了数据同步的目的。
2.3 SYNC及EOP的检测
完整的SYNC是0x80,由KJKJKJKK 8个位组成。第1位由于集线器重放等原因可能产生畸变,因此检测SYNC时可以只检测最后几位。第1个SYNC时DPLL从第2个状态J开始才能有时钟输出,而以后的SYNC则从第1个状态K就有时钟输出。观察一下SYNC的组成,不难看出只要最后4个位KJKK就可以完全检测到SYNC了。由此,可得出如图6所示的SYNC检测状态机以及如图7所示的相应的仿真波形图。
EOP的检测也存在同样的问题。USB规定全速率接收器必须将后跟1个J变化的、大于等于82ns宽的SE0作为一个有效的EOP来予以接收。对于低速收发器来说,这个宽度则是330ns。EOP检测状态机以及相应的仿真波形图如图8所示。
3 综合与仿真
接收数据时,UTMI首先匹配SYNC字段。匹配完成后,系统进入接收数据状态,此时RxActive为高电平。UTMI对接收到的串行数据进行NRZI解码,去掉填充位,送入接收移位寄存器,满8位后输出到并行数据线,并置RxValid为高电平。UTMI检测到EOP以后,就拉低RxActive,表明接收1个分组的结束。接收1个SETUP分组的仿真波形如图9所示,数据为SETUP(0xB4)+Addr(0x00)+EndPoint(0x00)+CRC5(0x08)。
发送数据时,UTMI需要置OE为低电平,以使驱动器处于发送状态。此时,TxValid应为高电平,表明并行数据线上有数据等待发送。UTMI首先发送SYNC,然后读取并行数据线上的数据,完成串并转换后,依次进行位填充和NRZI编码,再根据表1的规定将数据发送到VPO和VMO上。完成1个字节的发送后,UTMI应该置TxReady为高电平,表明UTMI可以继续发送下一个字节。数据发送完成后,UTMI应该继续发送EOP信号,然后拉高OE,表明1个分组发送完毕。发送1个ACK分组(0x4B)的仿真波形如图10所示。
4 结束语
在Lattice公司的ISP expert7.0开发平台上,利用Verilog HDL语言实现了USB1.1的UTMI,并完成了最后的综合和仿真测试。
参考文献
1 张念淮,江浩.USB总线接口开发指南.北京:国防工业出版社,2001
2Universal Serial Bus Specification Revision1.1.http://www.usb.org,2003.10
3 ISP1105 datasheet.http://www.semiconductors.philips.com.2003.10