在以太网链路上搭载时钟信号的方法

文档序号:7647868阅读:355来源:国知局
专利名称:在以太网链路上搭载时钟信号的方法
技术领域
本发明涉及数字通信领域,主要是一种在以太网链路上搭载时钟信号的方法。 背景介绍时钟频率的同步对于TDMoverIP业务的开展是至关重要的。如果链路两端的设备都采用自由振荡方 式,则尽管现代高精度晶振的精度可以控制在lOppni以内(l卯m就是百万分之一),两端速度的细微差别 经过长时间的积累还是会引起"滑码",从而导致误码率上升。而以太网接口本身的时钟则是独立的,与 系统应用层的时钟无关,频率上也不成简单的倍数关系,因而不能用作时钟同步的依据。所以,现有的以 太网技术是不能传输应用层时钟信息的,时钟同步对于TDMoverIP是个难题。本发明提供一种在以太网链 路上搭载时钟信号的方法,使以太网链路两端的设备可以达到良好的同步。为此,先要介绍一下以太网技术中有关的一些特点。按IEEE 802. 3标准的规定,百兆以太网每秒100兆位的流量在物理上其实是以125兆位的频率传输 的。在发送时,物理层PHY要将来自链路层低层、即MAC子层的4位逻辑"位组(Nible)"先转换成一个 5位的物理"码组(CodeGro卯)",再在物理介质上发送。而接收方,则要先把接收到的5位码组转换成4 位位组,再把它递交给以太网的MAC层。有关文献中将这种来回转换称为4B5B,即4位位组和5位码组 之间的转换。在本说明书中,从4B到5B的转换写成4B/5B或4Bto5B,反之则写成5B/4B或5Bto4B。 5B 码组也称为"符号(Symbol)",并可以用一个英文字母来表示。MAC层与PHY层之间的界面称为MII,意为"与具体介质无关"。在MII界面上,上、下层之间交换的 是4B位组。而在PHY层内部,则有一个电路模块称为PCS,所处理的主要就是4B5B,以及在采用5类双 绞线的情况下还要进行物理信号波形的"搅拌(Scrambling)"和还原,以减小电磁辐射。在发送方,经过PCS的处理以后就是在具体介质上的发送了,这部分电路当然因具体介质而不同。在 接收方,则只是顺序反过来而已。从4B到5B的转换意味着,在所有可能的5B码组中,有许多5B码组(值)并没有用上。因为4位的位 组只有16种可能的组合,而5位的码组却有32种可能的组合,二者之差高达16。 802. 3标准首先从中选 出16种5B码组,与16种4B位组相对应,再对剩下的16种5B码组作出了如下规定 * 用其中的一种(5位全l)作为"空转(Idle)"码,并以字母I表示之。当没有数据要发送时,就 在链路上不断地重复发送空转码;* 用其中的两个连在一起作为物理帧的起始符,称为SSD(Start of Stream Delimiter),这两个 5B码组一个表示为J,另一个表示为K;或者表示为SSD1和SSD2,两个5B码组必须接连发送才 有意义,中间不能插入别的码组。
再用其中的两个连在一起作为物理帧的结束符,称为ESD(End of Stream Delimiter),这两个 5B码组一个表示为R,另一个表示为T;或者表示为ESDI和ESD2,这两个5B码组也是必须接连 发送才有意义,中间不能插入别的码组。* 还有一个5B码组H,其编码为00100,用来通知对方发生了某种错误。* 除这些以外,其余的10个5B码组均为"非法(Irwalid)"码组,发送方是不会发送这些5B码组 的,如果接收方接收到了这些码组就说明链路上有了误码。剩下来的这些"非法"5B码组有00000、 00001、 00010、 00011、 00101、 00110、 01000、 01100、 10000、和11001。本发明所述方法的基本思路就是当要发送一个应用层时钟信号、例如时钟脉冲的上升沿时,发送方 就在链路上发送一个预定的、在802.3标准中定义为"非法"的5B码组。这个特定的5B码组当然是上述 10种"非法"5B码组之一;至于究竟选择哪一种则属于实现细节,而并不影响本发明的实质;不过00000 显然是不合适的,因为在光纤介质上0表示无光。而在接收方,则将此特定的"非法"5B码组从常规的 码组流中抽出,并在本地输出一个时钟脉冲上升沿,然后才对常规的5B码组流进行4B/5B转换。至于时钟脉冲的下降沿则无关紧要,因为对于时钟同步而言重要的是脉冲的位置,而不是其宽度。所以,时钟信号是以"非法"5B码组的形式搭载在以太网流量上的,由于接收方在把接收到的流量 上交到MAC之前就已将此"非法"5B码组抽出,MAC在MII界面上看到的仍是常规的合法5B码组流,因 而时钟信号的搭载是透明的。另一方面,即便接收方是不具有时钟信号抽取功能的普通以太网芯片,也只 是因为检测到"非法"5B码组而认为链路上有误码,充其量只是认为链路质量有所下降,而仍认为对方(发 送方)是符合802.3标准的以太网节点。当然,在不需要搭载时钟信号的应用中,发送方应关闭此项插入 时钟信号、即特定"非法"5B码组的功能。实际使用中的以太网接口芯片有两类。 一类是把MAC层和PHY层的功能集成在同一块芯片中,称为以 太网"控制器"(Controler)。在这一类芯片中,PCS包括4B5B只是芯片内部的电路,所以是无法从外部 加以改变的。另一类把鹏C和raY分别做成两个芯片,从而成为一个芯片组,其中的PHY芯片常称为以太 网"收发器"。而MAC芯片与raY芯片之间的接口界面则称为MII,意思是"与介质无关的界面"。在MII 界面上传递的都是4B位组,802.3文本中对此界面有详细的规定和说明。在这一类的产品中,多数P附
芯片都支持一种"PCSBP模式"、即"绕过PCS"的模式,也称为"5B符号模式",可以在PHY芯片外部另 行实现4B5B转换,这就为本发明的实施提供了方便。但是,即使在一体的以太网控制器的电路中,也仍 可以在芯片的电路设计中采用本发明所述的方法。发明内容本发明的目的就是要克服现有以太网技术不能传输应用层时钟信息的缺点,提供一种在以太网链路上搭载时钟信号的方法,主要是一种将代表着时钟信号的特定码组在发送方插入普通以太网流量和空转码流、而在接收方加以抽取,以实现相邻以太网节点之间时钟频率同步的方法,目的是在TDMovrIP流量的上下游之间维持良好的时钟频率同步。本发明解决其技术问题采用的技术方案基于MII界面的以太网芯片组包含MAC和PHY两种芯片,多数PHY芯片都支持PCSBP模式,就是允许 绕过芯片中的4B5B转换(以及物理信号流的"搅拌(Scrambling)"和还原),而直接输入/输出5B码组, 让MAC层可以实现自己特殊的4B5B转换。本发明所述的方法采用支持PCSBP模式的PHY芯片,在MAC芯片与此种PHY芯片之间插入用于时钟信 号搭载/抽取的电路或功能。搭载时钟信号的基本方法为* 在被802. 3标准定义为非法的5B码组中选择并预定其中之一作为时钟信号码组CLK;* 发送方在所发送的5B码组流中插入预定的时钟信号码组CLK,插入5B码组流的预定时钟信号可 以是单个的5B码组,也可以是几个预定5B码组的特定组合;* 接收方则从接收到的5B码组流中检测并抽去CLK码组(或几个预定5B码组的特定组合)、并输出 时钟脉冲。下面的叙述以单个5B码组的CLK为例,分发送和接收两方进一步加以说明。在下面的叙述中,除所 搭载的应用层时钟信号CLK外,还涉及MII界面上的两个时钟信号TX—CLK和R)LCLK。这是以太网接口本 身的时钟信号,MAC芯片受TX一CLK的驱动向PHY发送4B位组、将4B位组交付给PHY层;并受RX_CLK的 驱动从PHY层接收、即读入4B位组。TX_CLK和RX—CLK与所搭载、需要传输到远端的应用层时钟信号CLK 完全是两码事,千万不可混淆。先看发送方的时钟信号搭载电路。在原有MAC和PHY芯片或电路的基础上,发送方增加两个部件,一 个是时钟信号插入电路,另一个是4B/5B转换器。其中的时钟信号插入电路是一个有限状态机,其状态变
化实现了发送方的主要操作流程。而4B/5B转换器则只是一个对照表,实际上只是把原来已经在MY芯片 中实现、但是已被绕过的4B/5B转换器在芯片外面再实现一遍。所以,关键在于吋钟信号插入电路。时钟 信号插入电路是PHY层的一部分,可以看作是对原有PHY层的扩充。一、 发送方的主要操作流程1、 对于穿越Mil界面、由肌C交付PHY层发送的4B位组,先由本方法所需的4B/5B转换电路按802. 3 标准的规定转换成5B码组。2、 如果没有插入时钟信号的请求,就把这5B码组转交给处于PCSBP模式的PHY芯片供发送;并回到 上一步;3、 如果有插入时钟信号的请求,但是当前5B码组是必须连发的两个5B码组中的后面一个,就暂不 理睬这插入时钟信号的请求;4、 否则,就4.1)先切断MII接口上的发送时钟脉冲TX一CLK,使MAC暂停向PHY层交付4B位组。 4. 2)将代表着时钟信号的5B码组CLK交付给处于PCSBP模式的PHY芯片供发送,并清除插入时 钟信号的请求。4.3)恢复MII接口上的发送时钟脉冲TX—CLK,使MAC继续向PHY层交付4B位组。5、 回到第一步。这样,在插入一个5B码组CLK的同时MAC暂缓了一个犯位组(向本地PHY)的交付,然后加以恢复, 这就实现了时钟信号的插入。如果用来代表时钟信号的不是单个的5B码组、而是一个特殊码组的序列, 就按相应的数量切断若干相继的TX—CLK脉冲,使MAC暂缓相应数量的4B位组的交付。切断MII界面上的TX一CLK脉冲是个简便易行的方法,但不是唯一的方法。例如,也可以在插入时钟 信号的同时在PHY层缓存儿个4B位组或5B码组,然后再顺序予以发送。但这只是具体实现的细节,并不 影响本发明的实质。再看接收方。在原有MAC和PHY芯片或电路的基础上,接收方所增加的主要部件为一个时钟信号抽取 电路和一个5B/4B转换器。同样,时钟信号抽取电路也是一个有限状态机,实现着接收方的主要操作流程。 而5B/4B转换器则只是一个对照表,实际上只是把原来已经在PHY芯片中实现、但是已被绕过的5B/4B 转换器在芯片外面再实现一遍。所以,关键在于时钟信号抽取电路。同样,时钟信号抽取电路也是PHY 层的一部分,可以看作是对原有PHY层的扩充。二、 接收方的主要操作流程 1、 由于发送方的电路安排,时钟信号码组CLK的到来只可能在空转期中或者物理帧的发送期间,而 不会发生在SSD1和SSD2之间、以及ESDI和ESD2之间。2、 通过比对,如果发现新到来的5B码组是预定的时钟信号码组,就暂时切断Mil界面上的接收时 钟脉冲tOLCLK,使MAC暂缓从PHY读入4B位组,并输出相应的时钟脉冲;否则就一切如常。上述的流程有个潜在的问题,就是时钟信号在空转期中的搭载。在空转期中,发送方在链路上发送的 是全1信号。全l信号可以使双方的以太网接口时钟尽量同步,但却不能区分码组边界,如果空转期比较 长的话,还是有可能使双方失去5B码组的边界对齐。而SSD1+SSD2的特殊性则使得双方可以重新对齐5B 码组的边界。所以,如果在空转期也用单个5B码组代表时钟信号,则存在因边界失去对齐而不能正确辨 认的危险。为此可以对上述的实现细节再作改进,使得在空转期中用一个"SSD1 SSD2 CLK ESDI ESD2" 的序列代表所搭载的时钟信号。这样,发送方可以暂时切断MII界面上的TX—CLK时钟脉冲,以防MAC层 突然启动发送汲有TX一CLK脉冲,MAC就不能启动发送),等发送完这个5B码组序列以后再予恢复。这样, 发送方的流程比原来并没有复杂很多。但是接收方的流程和状态机就要更复杂一些了1、 从空转期开始,接收方可以接受的下一个5B码组是IDLE或SSD1。2、 如果是IDLE,就继续留在空转期,回到上一步。3、 如果是SSD1,就开始了一个时钟信号序列或一个物理帧的接收。此时接收方唯一可以接受的 5B码组是SSD2。4、 接收到SSD2之后,如果下一个5B码组不是CLK,但又是一个802. 3标准中定义为合法的5B 码组(有4B位组与之相应),就开始了一个帧的接收。5、 在帧的接收过程中间,时钟信号是以单个CLK码组为代表的,所以仍跟前述流程相同。6、 帧的接收过程因ESDI的到来而结束,此时唯一可以接受的5B码组是ESD2。7、 在上面的第4步中,接收到SSD2之后,如果下一个5B码组是CLK,就相应输出时钟脉冲, 然后看下一个5B码组。8、 如果下一个5B码组是ESDI,就说明这是时钟信号序列,此时唯一可以接受的5B码组是ESD2。9、 接收到ESD2以后就回到空转状态,回到上面的第一步。10、 在上面的第8步中,如果下一个5B码组不是ESD1,却是一个802. 3标准中定义为合法 的5B码组(有4B位组与之相应),就开始了一个帧的接收。回到上面的第5步。同样,具体的实现细节还可能有变化,但是细节的不同并不影响本发明利用特殊码组在以太网链路上 搭载时钟信号的实质。
在上述改进了的流程中,如果应用层时钟脉冲的到来是在发送一个帧的中途,即处于一对SSD和ESD 之间,那么需要等待的时间(延迟)最多就是40nS、即一个5B码组的发送时间,就能把时钟信号CLK码组 插入进去。但是,如果是在空转期,则在CLK前面还得有SSD1和SSD2两个码组,就额外增加了两个码组 即80nS的延迟, 一共可以达到120nS。而最坏的情况则发生在ESDI与ESD2之间,此时CLK之前至少有 三个码组,因而就有了 160nS的延迟。这样,有的CLK没有延迟,有的CLK可能有160nS的延迟,就有了 时钟信号的小幅抖动。 一般而言,160nS的抖动问题不大,因为2細z信号的周期为500nS。但是,对于要 求较高的应用这毕竟也是一个问题,所以抽取时钟信号的一方仍应使用锁相环加以稳频。与此同时,也可 以在单个的CLK码组之前也加上另一个5B码组,使得抖动的相对范围可以縮小一些。但是所有这些都属 于实现细节。如果以太网链路的一端是个中间节点,则还可以转发来自上游方向的时钟信号。当然,在需要加以转 发的以太网链路上都要采用本发明所述的方法。需要转发时,搭载在下游方向发送端的时钟信号可以来自 拳上游方向接收端的时钟信号抽取电路;* 以上游方向接收端所抽取时钟信号为参照的锁相环;* 本地的某个时钟源。如上所述,相对于实际的时钟脉冲上升沿,时钟信号CLK码组的发送是有所延迟的,具体的延迟则取 决于时序。在多个节点级连的情况下,这样的抖动有可能会逐站积累,所以转发时一般不宜直接使用所搭 载的时钟信号,而应经过锁相环的稳频。这样,上下游之间就可以达到比较精确的频率同步。这里所涉及的锁相环技术是公知技术,所以此处不加赘述,如有需要可以参考R.Best的"Phase-Locked Loops"等有关专著。在上述方法的基础上,还可以用两个支持PCSBP模式的以太网物理层(raY)芯片背靠背连接,中间加 上本发明所述的时钟信号插入/抽取电路作为辅助,以构成支持时钟信号搭载的以太网转发器(R印eater)。 这样,在两个常规以太网节点的接口上各串入一个转发器,就可以在两个转发器之间、从而在两个节点之 间搭载时钟信号了。这样做的好处是原有的设备基本上无需变动。另一方面,由于转发器的两边都是以太 网链路、而无需Mil界面的存在,所以4B/5B和5B/4B的转换就可以省去了。具体的方法是将一个PHY 芯片的接收端输出连接到时钟信号抽取电路,再将时钟信号抽取电路的5B码组输出连接到另一个PHY芯 片发送端的5B码组输入,就可以构成一个方向的通道。反向的通道则使用时钟信号插入电路。这样,两 个通道叠合,就可以构成一个双向(全双工)的以太网转发器。
与普通的转发器相比,这种转发器转发常规的以太网流量,而又可以在两个转发器之间的以太网链路 上搭载和抽取时钟信号,但是对于位于转发器"背后"的常规以太网节点,则起了时钟信号过滤的作用。千兆以太网的物理层原理上与百兆相似,只是千兆以太网采用的是8B/10B码组,而百兆以太网采用 的是4B/5B码组,所以本发明所述方法同样可以用在千兆以太网链路上搭载时钟信号,区别只是在于码组 的定义、电路中寄存器的宽度、码组发送/接收周期的长短等等细节。换言之,本方法所针对的是"以太 网"、而不仅仅是"百兆以太网"。本发明有益的效果是能在符合802.3标准规定的前提下在以太网链路上搭载时钟信号,使链路两端 设备上应用层的时钟达到良好的同步,从而可以防止两端因"滑码"而引起的误码。这对于TDMoverIP、 即利用IP技术开展包括电话、传真、高质量音频/视频等等在内的TDM业务,对T提高传输质量,有着重 要的意义和效用。


图1是发送方的时钟信号搭载,即将时钟信号CLK插入以太网5B码组流中的流程示意图; 图2是接收方的时钟信号抽取,即把上游节点插入到以太网5B码组流中的时钟信号CLK剥离出来的 流程示意图;图3和图4是接收端的状态变迁图;图5是对于以太网转发器的结构示意图;图6是用转发器连接既有以太网设备的示意图。
具体实施方式
下面结合附图及实施例对本发明作进一步详细的说明。附图是用来说明如何在以太网链路上搭载时钟信号的示意图其中图1中发送端的4Bto5B和时钟信 号码组插入电路都可以在一个开关量的控制下被跳过。如果跳过的话,整个电路就只剩下以太网物理层芯 片P附还在起作用,所以此时就等同于正常的以太网物理层PHY的发送端。同样,图2中下游接收端的 5Bto4B和时钟信号码组抽取电路也都可以在一个开关量的控制下被跳过,如果跳过的话,整个电路就只
剩下以太网物理层芯片PHY还在起作用,所以此时就等同于正常的以太网物理层PHY的接收端。图3是在 空转期中使用单个CLK码组的时的流程。这个流程比较简单,但是如上所述空转期长了就有失去5B码组 边界对齐的危险,所以可能不太稳定。图4则是在空转期采用"SSD1 SSD2 CLK ESDI ESD2"序列时的流 程。图5是以太网转发器的结构示意图,注意这里不再需要使用5B/4B转换和4B/5B转换电路,因为PHY 从链路上发送和接收的都是5位码组,到了 PHY与MAC之间的Mil界面才使用4位码组,而这里并不存在 MAC层的器件或电路。在接收的方向上,5B码组来自一头的PHY芯片,经过时钟信号抽取电路抽出所搭载 的时钟信号,就将5B码组流转送给另一头的PHY芯片。而在发送的方向上则只是把时钟信号抽取电路换 成时钟信号插入电路。这样,对于既有的不支持时钟信号搭载的设备,只要在其以太网接口上串接一个这 样的转发器就可以了。图6中的设备A实现了本发明所述的方法,是支持时钟信号搭载的;伹是B是既有 的设备,并不支持时钟信号搭载;为此在B的以太网接口上串接了一台这样的转发器,使设备B既可以通 过转发器获取所搭载的时钟信号,而又不必更换原有的以太网接口。对于B而言,这台转发器就好像是时 钟信号的过滤器。反过来,设各B也可以借助转发器搭载时钟信号。如果设备A也是不支持时钟信号搭载 的既有设备,那么在A的以太网接口上也应串接一台这样的转发器。由于以太网的速度很高,本发明所述方法宜以硬件方式用电路加以实现。具体可以采用支持PCSBP 模式的现成PHY芯片加上"可编程逻辑阵列"即FPGA芯片实现,时钟信号插入电路、时钟信号抽取电路、 犯to5B转换电路、5Bto4B转换电路都由FPGA芯片实现。美国AMD公司的Am79c874就是支持PCSBP模式 的以太网PHY芯片,下面就以此为例说明本发明的实施。在实际使用中,发送端和接收端的物理层功能总是由同一块PHY芯片提供,例如Ara79c874芯片中就 包括了一个接收端PHY和一个发送端PHY。与此相应,发送端和接收端的时钟信号插入/抽取、 犯to5B/5Bto4B电路也都应该集成在一起,具体可以实现在一块FPGA芯片中。如上所述,发送端的4Bto5B和时钟信号插入电路都可以在一个开关量的控制下被跳过。如果跳过的 话,整个电路就只剩下以太网物理层芯片PHY还在起作用,所以此时就等同于正常的以太网物理层PHY 的发送端。同样,下游接收端的5Bto4B和时钟信号抽取电路也都可以在一个开关量的控制下被跳过,如 果跳过的话,整个电路就只剩下以太网物理层芯片PHY还在起作用,所以此时就等同于正常的以太网物理 层PHY的接收端。这样,如果需要传输时钟信号,就启用上游的4Bto5B和时钟信号插入电路,以及下游的时钟信号抽 取和5Bto4B电路。如果不需要传输时钟信号,则可以不启用这些附加电路,那样就完全是常规的以太网 通信。不过,即便发送端不跳过4Bto5B和时钟码组插入电路,只要实际上没有时钟脉冲输入,其发送出
去的信号就等同于常规的、未搭载时钟信号的以太网信号;而接收端,只要所接收到的信号中没有搭载时 钟信号,自然也就没有时钟脉冲输出。不管是否搭载时钟信号,MAC所看到的总是标准的MII界面,而时钟信号的传输则是完全透明的。另 一方面,如果把支持本方明方法的上游节点与一个不支持本方明方法的常规下游节点对接,并且上游节点 在发送的信号中搭载时钟信号,那么下游节点当然不能抽取时钟脉冲,然而此时下游节点只是认为链路的 质量有所下降、因发生误码而见到了一些本不应当见到的码组,但是就总体而言这以太网链路还是符合 802.3标准的。当然,这有可能引起丢包率的上升。如果觉得因此而来的丢包率上升不能容忍的话,可以 通知上游节点,让其关闭时钟信号搭载即可。上面所述的方法假定所用的以太网介质为光纤,因此没有涉及物理信号的"搅拌(Scrambling)"。如 果是在5类双绞线上,则需要在时钟码组插入和抽取电路中增加搅拌和还原电路,这种电路与CRC校验电 路相似,并且在802.3标准中已经给出其多项式和电路示意图,这里就无需多说了。实际上,需要搭载时 钟信号的一般都是采用光纤的以太网,因为采用5类双绞线时传输距离不远,专门外加一根时钟线也并不 困难。下面以Am79c874芯片为例说明本发明的实施,并给出主要电路的VHDL语言伪代码描述。 一、 4Bto5B转换电路<formula>formula see original document page 12</formula>—TX_EN的上升沿与TX一CLK的下降沿重合。 一等待半个TX一CLK周期。 一再等待半个1《_0>!(周期。
5B_EN = ' 1'; —整个4Bf o5B龟路延想一个rx_CLK周期。end if;if Mil—TX_EN, event and MII_TX_EN = '0' then--下降沿也是一样。wait on TX—CLK until T既CLK = ' 1' : ■wait on TX一CLK until TX—CLK = ' 0';5B—EN = ' 0'; end if; end process;process (MII_TX—CLK) ——个TX—CLK周期(40nS)的开始beginif Mil—TX—CLK' event and MII_TX_CLK=' 1' and Mil—TX—EN=1 then beginif MII一TX一ER = ' 1' then 5B—out <= 〃00100"; —发送ERR码组Sls6case 5B_input iswhen'0000〃=〉5B——out<="imo"when'0001〃=>5B——out<=when〃0010〃=〉5B——out<=〃10100〃when〃0011〃=〉5B一—out<=〃10101〃when〃0100〃=〉5B—一out<="01010〃wheno=〉5B——out<=〃01011〃when〃0110"=〉5B—匿out<='0111(Twhen〃0111"=〉5B——out<="OlllTwhen=>5B—_out<=〃10010〃when〃1001〃=>5B——out<="画rwhsn"1010"=〉5B—匿out〈="10110"when〃1011"=>5B——out<="10111〃whsn〃1100〃=>5B——out<=、whsn"1101〃=>5B——out<="1011"whsn〃1110〃=>5B——out<=〃11100〃"1111〃=>5B——out<="11101〃end case: end if: end process; end Body;
二、 时钟搭载电路(发送端) entity CLK—insert is genericconstant constant constant constant constant constant constant);portIDLE—CODE std_logic—vector(4 downto 0) SSDl—CODE std—logic_vector(4 downto 0) SSD2—C0DE std—logic_vector(4 downto 0) ESD1_C0DE std—logic—vector(4 downto 0) ESD2—C0DE std—logic_vector(4 downto 0) EK—CODE stdjogic—vector(4 downto 0) CLK_C0DE std—logic—vector(4 downto 0)='11111' ='11000'='iooor ='oiior='00111' ='00100'='ooior5B—in 5B一EN CLK_sig TX CLKin std—logic—vector(4 downto 0) in std_logic;-来自4Bto5B。-来自幼to5B,表示启动发送。in stdjogic; in std—logic;Mil—TX—CLK : out std—logic; TX一ER : out std—logic; TXD: out std—logic—vector (3 downto 0) TX_EN : out std_logic; );end CLK insert;一需要搭载的时钟信号。 来自Ara79874, 25MHz,周期为40nS。'Am79874在TX一CLK的上升沿对TXD、 TX一ER、和TX一EN取样。 --去向5Bto4B和Mil界面,MAC受Mil—TX一CLK驱动。 --去向Am79874,相当于TXD(4),见Am79874说明书-去向Am79874,与TX—ER—起形成5位向量。 -去向細79874,表示开始PHY层的发送。Architecture TX of CLK insert issignal ClK一req signal Blocking signal TX_statestd—logic;integer range 0 to 5; integer range O' to 5;beginProcess(CLK—sig) beginif CLK一sig' event and CUC—sig=,1' then CLK—req <= ' 1': If TX—state = 0 then TX—state <= 1;0 =空转。1 =准备发送SSDl。2 =已发出SSD1,准备发送SSD2。3 =正常发送期间4 = 5B—EN的下降沿以后,准备发送ESD1。5 =已发出ESD1,准备发送ESD2。一需要搭载的时钟信号。 --上升沿代表搭载请求。一准备发送SSD1。end if; end if; end process;process (5B—EN)if 5B—EN' event and 5B_EN=' 1' then TX_state <= 1;wait on TX—CLK until TX_CLK = '1' wait on TX—CLK until TX—CLK = ' 0' TX—EN = , 1'; end if:-TX—EN的上升沿与TX_CLK的下降沿重合。 一启动发送,所以准备发送SSDl。 一等待半个TX—CLK周期。 —再等待半个TX—CLK周期。-_TX_EN的上升沿比5B—EN延迟了一个TX—CLK周期。 -这样TX—EN比MI I_TX—EN —共延迟了两个TX_CLK周期。if 5B—EN'event and 5B_EN='0' then TX—state <= 4;wait on TX_CLK until TX—CLK = ' 1' wait on TX—CLK until TX_CLK = ' 0' TX一EN = ' 0'; end if; end process;--结束发送,所以准备发送ESDl。一等待半个1《_<:0(周期。一再等待半个TX—CLK周期。—TX_EN的下降沿也比5B一EN延迟了一个TX—CLK周期。process(TX—CLK) beginif TXJXK' event and TX CLK = 1 then--来自PHY的TX一CLK不会被阻塞。MII_TX_CLK <= ' 1'; end if;-上升沿不需要阻塞。if TX—CLK' event and TX—CLK = 0 and Blocking = 0 thenthenMII—TX—CLK <= '0'; —要阻塞一个TX—CLK,只需阻塞其下降沿就可以了 <end if; end process;process(TX_CLK) ——个40nS周期的开始。variable 5B_out : std_logic—vector(4 downto 0) = IDLE—CODE;beginif TX—CLK' evern and TX—CLK = 1 then case TX_state is when 0 =〉5B—out <= IDLE—CODE; when 1 =〉 beginif CLK_req=l then—正在空转期间。 一准备发送SSDl,CLK—req <= '0': Blocking <= 1; endif5B—out <= SSD1_C0DE; TX_state <= 2; end; when 2 =〉 begin5B—out <= SSD2—C0DE; if Blocking = 1 thenBlocking = Blocking+1; end if;TX—state <= 3; end; when 3 => beginif Blocking 〉 1 then 5B_out <= CLK一CODE; TX_state <= 4;6lS6beginif Blocking = 1 thenBlocking <= 0: end if;if (XK一req = 1 then 5B—out <= CLK—CODE Blocking 〈= 1; CLK_req <= s 0';else5B—out <= 5B—in; end if;if 5B—EN = "0' thenTX_state <= 4; end if end; end if; end j when 4 =〉 begin5B_out <= ESDI—CODE;—本次镛求己经受到响皮。 —阻塞Mil—TX_CLK一准备发送SSD2。一以便区分状态变迁的历史。—正常发送期。—对MII一TX—CLK的阻塞是在空转期启动的。 一SSD1 SSD2 CLK --准备发送ESDl。一对MIIJTX_CLK的阻塞是在发送期启动的。 —所以只要阻塞一个Mil—TX—CLK就够了 。一将时钟信号插入码组流。—暂时阻塞MII界面上的时钟,使MAC暂缓发送数据。 --本次请求已经受到响应。一正常数据的发送。一结束发送,准备发送ESDl。—准备发送ESDl。200710071264.6说明书第14/19页TX—state <= 5: end; when 5 =〉 begin5B一out <= ESD2一C0DE TX一state <= 0; Blocking <= 0; end; end case;TXD <= 5B_out(3 downto 0); TX_ER <= 5B—out (4); end if; end process; end TX;三、 时钟抽取电路(接收端) entity CLK—extract isgenericconstantIDLE—CODEstd一logic—vector(4 downto0)='imi'constantSSDl—CODEstd—1ogic一vector(4 downto0)='11000'const肌tSSD2—CODEstd一logic一vector(4 downto0)='10001'constantESD1一C0DEstd—logic—vector(4 downto0)='01101'constantESD2—CODEstd—1ogic一vector(4 downto0)='00111'constantER一CODEstd—1ogic—vector(4 downto0)='00100'constantCLK—CODE std_logic—vector(4 downto 0)='00101'port (RX_ER : in stdjogic; --来自Am79874,相当于RXD(4),见Am79874说明书。RXD : in std_logic_vector(3 downto 0) —来自Am79874,与RX—ER—起形成5位向量。RX_DV : in std—logic; —来自Am79874,表示接收到码组流。RX_CLK: in std_logic; --来自Am79874, 25MHz,周期为40nS。Mil—RX_CLK: out std_logic;--去向5Bto4B和Mil界面。MII_RX_ER: out std—logic;—去向MII界面,使MAC看不到PHY因接收到用作时钟信号的一非法码组而报告的错误。 5B—out : out std—logic—vector(4 downto 0)—去向5Bto4B 5B—DV : out std—logic; —去向5Bto4B,表示5B—out有效。CLK_out : out std—logic; --抽取的时钟信号);-准备发送ESD2。-回到空转状态-结束阻塞MII一TX一CLK (如果处于阻塞状态的话),end CU(—extract;Architecture RX of CLK extract issignal 5B_in signal blocking signal KX_statestd_logic—vector(4 downto 0); std_logic;integer r抑ge 0 to 5;begin process(RX—DV)if RX—DV' event and RX_DV=' 1' thenwait on RX—CLK until RX一CLK = '1'rait on RX_CLK until RX一CLK = ' 0' 5B_DV = ' 1'; end if;-- 0 =空转 -- 1 =收到了 SSD1以后。 -- 2 =收到了 SSD2以后。一 3 =在SSD2或CLK以后收到了正常的的码组。 一 4 =在SSD2以后收到了 CLK。 —5 =已收到ESDl。—RX_DV的上升沿与RX—CLK的下降沿重合。一等待半个RX一CLK周期。一再等待半个RX一CLK周期。--在5Bto4B中还要再延迟一个RX—CLK周期,--这样一共延迟两个RX一CLK周期。if RX_DV' event and RX_DV=' 0' then wait on RX一CLK until RX—CLK = '1'; wait on RX—CLK until RX_CLK = ' 0'; 5B_DV = ' 0';end if,' end process;一下降沿也是一样。process (RX—CLK) ---个40nS周期的开始。variable 5B—in : std一logic一vector(4 downto 0) := IDLE—CODE:beginif RX_CLK, event and RX一CLK-' 1' and RX_DV = 1 then begin5B_in(3 downto 0) <= RXD; 5B一in(4) <= RX—ER;CLK_out <= '0';if 5B—in /= CLK—CODE then5B一out <= 5B—in; end if;—拦截CLKj:0DE,不让进入5Bto4B电路ccase RX_state is when 0 =〉—正在空转期间(
为保证搭载在空转期的时钟信号位组的边界对齐, 特地在CLK_C0DE前后加上SSD和ESD,所以在 空转期不会直接出现CLK一C0DE。但是这并非必须。一接收到了SSD1。一接收到了 SSD2。beginblocking <= ' 1': if 5B_in = SSDl一CODE thenRX一state <= 1; end if; end; when 1 => beginif 5B_in = SSD2—CODE thenRX—state <= 2; 6lss—ERROR Condition end if; end; when 2 => beginif 5B一in = CLK一CODE then CLK—out <= ' 1' ; — CLK_out的脉冲宽度大约为一个RX—CLK的周期,即40nS左右。 RX—state <= 4;else —此时接收到的正常码组应为PREAMBLE (1010)或SFD (1011)。blocking <= 0; RX—state <= 3; 5B—DV <= 1; end if; end; when 3 => beginif 5B—in = CLK—CODE; blocking <= 1; CLK—out <= '1'; elseblocking <= <0'; end if;if 5B—in = ESDI then 5B_DV <= '0'; RX_state <= 5; end if; end;when 4 =〉 一在SSD2或CLK以后收到了 CLK,有可能是SSD CLK ESD序列。beginif 5B—in = ESDI then —果然是SSD CLK ESD序列。 RX state <= 5;-SSD后面的码组并非CLK_C0DE,这可能是一个帧的开始, -实际上应该是前导码组或SFD,见802. 3第22节和24节。-在SSD2或CLK以后收到了正常的的码组,处于正常接收期。-抽出CLKj:0DE,所以阻塞RX—CLK,使MAC层暂停接收。-关闭58—DV。elseRX_state <= 3; 5B—DV <= 1: blocking <= '0一SSD和CLK—CODE之后并非ESD,这是一个正常的帧, 一只是CLK正好插在了 SSD后面。开启5B—DV。end if;end;when 5 =〉一收到了 ESDl。beginif 5B—in = ESD2 thenRX_state <= 0; 6lse—ERROR Conditionend; end if; end process; end RX;在上面的伪代码中, 一个帧或"SSD CLK ESD"序列的开始和结束是以SSD1和ESDI的到来为判断依 据的,但有些PHY芯片因为具体实现的原因也许不向上层递交SSD和ESD码组,此时可以改用RX—DV的电 平作为判断依据,就是把上面的"if 5B_in = ESDI then"改成"if RX—DV = 0 then",余类推。显然, 这也属于具体的实现细节。四、5Bto4B entity 5Bto4B isgeneric(constant PREA舰E std一logic一vector (3 downto 0) := '1010'; constant SFD—CODE std—logic—vector(3 downto 0) := ' 1011';);port5B—inin std—logic—vector(4 downto 0)—来自CLK—extract-5B—DVin std—logic;一来自CLK—extract,表示输入5B—in有效。RX一CLKin std—logic;—来自Am79874, 25MHz,周期为40nS。Mil—RX—CLKout std—logic;—去向MII, 25MHz,周期为40nS。MII_RX_ERout std一logic;一去向MII,见Am79874说明书。Mil—RXDout std—logic—vector(3 downto 0)--去向MII,见Am79874说明书。Mil—RX—DVout std—logic;一去向MII,表示RXD(3:0)的数据有效。end 5Bto4B;Architecture Body of 5Bto4B is begin process(5B一DV)if 5B_DV' event and 5B—DV=' 1' then wait on RX—CLK until RX_CLK = ' l'; wait on RX—CLK until RX—CLK = ' 0'; MII_RX—DV = ' 1'; end if;—5B_DV的上升沿与RX—CLK的下降沿一致。 一等待半个RX—CLK周期。 一再等待半个RX—CLK周期。—MII_RX_DV的上升沿仍与RX_CLK的下降沿一致。 —连同extract电路, 一共延迟了两个RX_CLK周期'if 5B一DV' event and 5B_DV=' 0' then wait on RX—CLK until RX一CLK = ' 1';wait on RX—CLK until RX—CLK = ' 0'; —下降沿也是一样 MII_RX_DV = ' 0'; end if; end process;process(RX—CLK) beginif RX_CLK, event beginif 5B—input = MII_TX—ER 6ls6MII_TX—ER <= end if;and RX—CLK=' 1'〃00100" then :'1';"0,;一一个40nS周期的开始 and 5B DV = 1 thencase 5B—i叩ut iswhen〃11110〃=>MII_—RXD<="0000〃when"01001〃=>MII_—RXD<=〃0001"when〃10100"=>MII-一RXD<="0010〃when〃10101〃=>MII-_RXD<=〃0011"when "01010〃 =〉 when 〃01011"=> when "01110〃 => when "01111〃 =>MII扁画RXD<=〃0100〃MII_—RXD<=〃0101〃MII_—RXD<="0110"MII一—RXD<=〃0111〃〃10010〃=〉Mil—一RXD<="1000〃when〃10011〃=〉Mil——RXD<="ioorwhsn〃10110〃=>Mil——RXD<=〃1010〃when〃10111"=>MII__RXD<=〃1011〃
when 〃11010〃 => Mil—RXD <= "1100"when 〃11011〃 =〉 MII—RXD <= 〃1101〃when "11100〃 => MII_RXD <= "1110〃when 〃11101〃 =〉 MII—RXD <= 〃1111〃 end case; end if; end process; end Body;至于转发器的实现,则只要把时钟抽取电路或时钟插入电路连接到另一边PHY芯片的发送端或接收端, 就构成了一个方向的通道。而整个转发器则由两个这样的通道叠合而成,整个转发器由两个PHY芯片、一 个时钟信号抽取电路、和一个时钟信号插入电路构成。更具体地说,就是* 将PHY芯片A的接收端输出连接到时钟信号抽取电路的输入端;* 将时钟信号抽取电路的输出连接到PHY芯片B的发送端输入,就构成了一个方向的通道。* 将PHY芯片B的接收端输出连接到时钟信号插入电路的输入端;* 将时钟信号插入电路的输出连接到PHY芯片B的发送端输入,就构成了反向的通道。作为一种具体的实施,上述各个电路的一些细节并不是唯一的,而可以有所变化或优化,但是细节的 不同并不影响本发明的实质。
权利要求
1、一种在以太网链路上搭载时钟信号的方法,其特征是(1.1)在被802.3标准定义为非法的5B码组中选择并预定其中之一作为时钟信号码组CLK;(1.2)需要搭载时钟信号时,发送方在所发送的5B码组流中插入预定的时钟信号码组CLK;(1.3)接收方则检查所接收5B码组流中的每一个5B码组,当检测到预定的时钟信号码组CLK时就从码组流中抽去该时钟信号码组CLK、并输出时钟脉冲。
2、根据权利要求1所述在以太网链路上搭载时钟同步信号的方法,其特征是(2.1)、发送方的时钟信号搭载电路,在原有MAC和PHY芯片或电路的基础上,增加时钟信号插入 电路和4B/5B转换器两个部件,用于实现发送方的主要操作流程-(2.1.1) 、对于穿越MII界面、由MAC交付PHY层发送的4B位组,先由4B/5B转换器转换成5B码组;(2.1.2) 、如果没有插入时钟信号的请求,就把这5B码组转交给处于PCSBP模式的PHY芯片供发送;并回到上一步; (2. 1.3)、如果有插入时钟信号的请求,但是当前5B码组是必须连发的两个5B码组中的后面 一个,就暂不理睬这插入时钟信号的请求;(2.1.4) 、否则,就A) 先切断Mil接口上的发送时钟脉冲TX—CLK,使MAC暂停向PHY层交付4B位组B) 将代表着时钟信号的5B码组CLK交付给处于PCSBP模式的raY芯片供发送,并清除插入时钟信号的请求;C) 恢复Mil接口上的发送时钟脉冲TX—CLK,使MAC继续向PHY层交付4B位组;(2.1.5) 、回到第一步;(2. 2)、接收方在原有MAC和PHY芯片或电路的基础上,增加的时钟信号抽取电路和5B/4B转换器 两个部件,用于实现接收方的主要操作流程 (2.2.1)、监视接收到的每一个码组,与预定的时钟信号码组加以比对; (2. 2. 2)、如果发现新到来的5B码组是预定的时钟信号码组,就暂时切断Mil界面上的接收 时钟脉冲RX—CLK,使MAC暂缓从PHY读入4B位组,并输出相应的时钟脉冲;(2.2.3) 、否则就一切如常。
3、 根据权利要求1所述在以太网链路上搭载时钟同步信号的方法,其特征是在空转期中以"SSD1、 SSD2、 CLK、 ESD1、 ESD2" 5B码组序列作为预定的时钟信号,需要插入时钟信号时发送方暂时切断MII界 面上的TX—CLK时钟脉冲,等发送完这个5B码组序列以后再予恢复。
4、 根据权利要求1或2或3所述在以太网链路上搭载时钟同步信号的方法,其特征是插入5B码组 流的预定时钟信号可以是单个的5B码组码组CLK,也可以是CLK与几个预定5B码组的组合。
5、 根据权利要求1所述的在以太网链路上搭载时钟信号的方法构建以太网转发器的方法,其特征是: 5. 1)使用两个支持PCSBP模式的以太网物理层raY芯片A和B;5. 2) A的接收端输出连接到所述时钟信号抽取电路的输入端;5.3)将所述时钟信号抽取电路的5B码组输出连接到B的发送端输入,就构成了一个单向的通道; 5. 4) B的接收端输出连接到所述时钟信号搭载方法的电路;5。 5)将所述时钟信号搭载电路的5B码组输出连接到A的发送端输入,就构成了一个反向的通道; 5.6)由所述的正、反两个通道合在一起构成一个可以搭载、抽取、过滤时钟信号的以太网转发器。
6、 根据权利要求5所述构建以太网转发器的方法,其特征是对抽取的时钟信号用锁相环加以稳频, 搭载在发送方的时钟信号来自该锁相环。
全文摘要
本发明涉及一种在以太网链路上搭载时钟信号的方法,在被802.3标准定义为非法的5B码组中选择并预定其中之一作为时钟信号码组CLK;需要搭载时钟信号时,发送方在所发送的5B码组流中插入预定的时钟信号码组CLK;接收方则检查所接收5B码组流中的每一个5B码组,当检测到预定的时钟信号码组CLK时就从码组流中抽去该时钟信号码组CLK、并输出时钟脉冲。本发明有益的效果是能在符合802.3标准规定的前提下在以太网链路上搭载时钟信号,使链路两端设备上应用层的时钟达到良好的同步,从而可以防止两端因“滑码”而引起的误码。这对于TDMoverIP、即利用IP技术开展包括电话、传真、高质量音频/视频等等在内的TDM业务,对于提高传输质量,有着重要的意义和效用。
文档编号H04L29/06GK101119190SQ20071007126
公开日2008年2月6日 申请日期2007年9月10日 优先权日2007年9月10日
发明者毛德操 申请人:浙大网新科技股份有限公司;毛德操
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1