1000base

您所在的位置:网站首页 100base-t最大传输速率 1000base

1000base

2023-04-09 14:08| 来源: 网络整理| 查看: 265

本文使用 Zhihu On VSCode 创作并发布

1000base-T 学习(1)1000base-T

千兆以太网(1000base-T)又称吉比特以太网(Giabit Ethernet),其传输速率高达1G bits / s,最新协议为IEEE802.3-2015,早一些的版本可以看IEEE802.3ab。我们知道100base-TX是以125M的时钟速率,在4对双绞线上的两对单独进行收发,因此速率为125M*(4/5)为100M(采用4B/5B编码)。 1000base-T类似于100base-TX,采用的时钟速率依旧是125M,但是其采用了4对双绞线进行数据传输,同时每对双绞线同时收发,达到125M * 2 * 4 = 1000M的速率,如下图所示。

Image

上图中的HYBRID表示扣除器,可以在混合了发送信号和接收信号的线对上扣除本身的发送信号来获得接收信号。区别于100base-TX,协议只将1000base-T分为了PCS和PMA两层,取消了100base-TX中的PMD层,个人感觉是1000base-T各个环节的参与关联性很大,不太好独立出去一个单独的PMD层用于编解码,像是解扰器/扰码器,编码器/解码器都和PCS层各个配置参与,不像之前100base-TX仅通过PMD层就可以解码出bit流。下面我们就对1000base-T的PCS和PMA层进行一些详细的说明。

PCS层

PCS层主要完成对GMII的数据到4D-PAM5符号的编码以及逆向的解码过程。

PCS-tx 需要将GMII接口送过来得8bit信号转换为4D-PAM5得码元组(An,Bn,Cn,Dn)也就是实际在线对BI_DA,BI_DB,BI_DC和BI_DB上传输得4维符号。PMA会指示进行传输得码元类型:SEND_Z表示传输0信号,SEND_I表示传输IDLE信号,SEND_N表示传输有效数据。编码之前先要对数据进行扰码处理,1000base-T采用得Side-stream scrambler,其master和slaver对应得生成多项式如下:

g_{master}(x)=1+x^{13}+x^{33} \\ g_{slaver}(x) = 1+x^{20}+x^{33}

根据Side-stream生成三组变量值:Sxn[3:0],Syn[3:0]和Sgn[3:0],其中的Sxn[3:0],Syn[3:0]用于生成后续的扰码序列Scn[7:0]和生成IDLE信号和traning信号,其计算公式如下:

Sy_n[0] = Scr_n[0], \\ Sy_n[1] = Scr_n[3]\wedge Scr_n[8],\\ Sy_n[2] = Scr_n[6]\wedge Scr_n[16],\\ Sy_n[3] = Scr_n[9]\wedge Scr_n[14]\wedge Scr_n[19] \wedge Scr_n[24],\\

Sx_n[0] =Scr_n[4]\wedge Scr_n[6],\\ Sx_n[1] =Scr_n[7]\wedge Scr_n[9]\wedge Scr_n[12] \wedge Scr_n[14],\\ Sx_n[2] =Scr_n[10]\wedge Scr_n[12]\wedge Scr_n[20]\wedge Scr_n[22],\\ Sx_n[3] =Scr_n[13]\wedge Scr_n[15]\wedge Scr_n[18]\wedge Scr_n[20]\wedge Scr_n[23]\wedge Scr_n[25]\wedge Scr_n[28]\wedge Scr_n[30],\\

Sgn[3:0]用于对PAM5符号随机化(An,Bn,Cn,Dn)以减少直流偏置:

Sg_n[0] =Scr_n[1]\wedge Scr_n[5],\\ Sg_n[2] =Scr_n[4]\wedge Scr_n[8]\wedge Scr_n[9] \wedge Scr_n[13],\\ Sg_n[3] =Scr_n[7]\wedge Scr_n[11]\wedge Scr_n[17] \wedge Scr_n[21],\\ Sg_n[3] =Scr_n[10]\wedge Scr_n[14]\wedge Scr_n[15]\wedge Scr_n[19]\wedge Scr_n[20]\wedge Scr_n[24]\wedge Scr_n[25]\wedge Scr_n[29],\\

扰码序列Scn[7:0]的生成规则如下:

Sc_n[7:4] = (tx\_enable_n) ? Sx_n[3:0] : 4'b0000; \\ Sc_n[3:1] = (tx\_mode == SEND\_Z) ? 3'b000 : \\ (!mod(n,2)) ? Sy_n[3:1] : Sy_{n-1}[3:1] \wedge 3'b111;\\ Sc_n[0] = (tx\_mode == SEND\_Z) ? 1'b0 : Sy_n[0]

完成了扰码器的设计后就需要进行编码器的设计了,1000base-T编码采用的是TCM编码,即网格编码。TCM对星座符号进行分组,再使用卷积编码增加冗余,来提高解码增益。这里卷积码的设计采用增加1位数的冗余来实现,记忆深度为3,扩展得到8+1位的数据序列Sdn[8:0],其编码框图如图所示:Image

Sdn[8]的计算公式如下:

cs_n[1] = (tx\_enable_{n-2}) ? Sd_n[6] \wedge cs_{n-1}[0] : 0; \\ cs_n[2] = (tx\_enable_{n-2}) ? Sd_n[7] \wedge cs_{n-1}[1] : 0; \\ cs_n[0] = cs_{n-1}[2]; \\ Sd_n[8] = cs_n[0]

卷积编码器只有数据有效时进行编码,且仅对Sdn[6]和Sdn[7]进行编码运算,得到冗余位Sdn[8],其余时刻均为0,并且在数据包结束的时候复位编码器(csrsetn)

csrsetn = tx\_enable_{n-2} \& ~tx\_enable_{n}

Sdn[7:0]的运算取决于之前的扰码器Scn[7:0]^TXDn[7:0],其中Sdn[7:6]涉及编码器的复位操作,复位期间Sdn[7:6]数值为cs_n-1[1:0]:

Sd_n[7] = ( !csrset_n \& tx\_enable_{n-2}) ? Sc_n[7] \wedge TXD_n[7] : \\ (csrset_n )? cs_{n-1}[1] : Sc_n[7];\\ Sd_n[6] = ( !csrset_n \& tx\_enable_{n-2}) ? Sc_n[6] \wedge TXD_n[6] : \\ (csrset_n )? cs_{n-1}[0] : Sc_n[6];\\

Sdn[5:3]:

Sd_n[5:3] = (tx\_enable_{n-2}) ? Sc_n[5:3] \wedge TXD_n[5:3] : 2'b00;

Sdn[2]:在数据使能期间对数据加扰,其余期间对接收状态加扰:

Sd_n[2] = (tx\_enable_{n-2}) ? Sc_n[2] \wedge TXD_n[2] : Sc_n[2] \wedge (loc_rcvr_status == OK);

Sdn[1:0]出了加扰数据,还需要加扰载波扩展信息:

cext_n = (tx\_enable_n == 0 \& TXD_n[7:0] == 0x0F) ? tx\_error_n : 1'b0;\\ cext\_err_n = (tx\_enable_n == 0 \& TXD_n[7:0] != 0x0F) ? tx\_error_n : 1'b0;\\ Sd_n[1] = (tx\_enable_{n-2}) ? Sc_n[1] \wedge TXD_n[1] : Sc_n[1] \wedge cext\_err_n;\\ Sd_n[0] = (tx\_enable_{n-2}) ? Sc_n[0] \wedge TXD_n[0] : Sc_n[0] \wedge cext_n;\\

简单总结下以上加扰和卷积编码的步骤:

生成sides-stream-scramble序列:scrn[32:0];利用scrn[32:0]生成三组序列sxn[3:0],syn[3:0],sgn[3:0];利用sxn[3:0],syn[3:0]和生成最终的扰码器序列scn[7:0]利用卷积编码器对scn[7:6]编码生成sdn[8];正常发送数据情况下扰码器的scn[7:0] ^ TXD[7:0] 得到sdn[7:0],结合4最终得到sdn[8:0],即bit编码器的最终输出。

下节会继续解释TCM编码的流程和原理。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3