发明内容
针对现有IEEE802.3av标准协议中存在的缺陷,本发明的目的在于提供一种基于10G EPON ONU中的FEC硬件编码方法及电路,解决10G EPON 0NU中上行方向送入FEC编码的数据位宽同FEC编码所要求的数据位宽不匹配的情况下实现正确FEC编码的问题。
为达到以上目的,本发明采取的技术方案是:
一种基于10G EPON ONU中的FEC硬件编码方法,其特征在于,包括以下步骤:
S10、按照10G EPON ONU上行突发模式的格式控制,将从扰码部分送来的66bit位宽的数据tx_scramed[65:0]写进fifo缓存中;
S20、每次从fifo缓存中取出66bit位宽的数据,去掉LSB位后,将其余的65bit数据依次写进9个寄存器组reg_array_1[2015:0]至reg_array_9[2015:0]中;每一个寄存器组对应有一个RS(252,220)编码器;
每个寄存器组最大能寄存2016bit的数据,每个寄存器组中的[4:0]bit固定为“0”,寄存器组中的[1759:5]bit寄存从fifo中读取的27个65bit块,寄存器组中的[2015:1760]bit寄存FEC校验字节,即RS(252,220)的校验字节;
S30、一旦某个寄存器组中写进了数据,即启动对应的RS(252,220)编码器进行编码:每次从该寄存器组中取出8bit数据送入该寄存器组对应的RS(252,220)编码器中进行编码,编码得到的校验字节再写进对应寄存器组的对应bit位中进行寄存;
S40、按照一定的格式从寄存器组中读出数据,即得到FEC编码后的数据tx_fec[65:0]:当寄存器组开始写操作了223拍时钟周期后,依次从reg_array_1[2015:0]寄存器组开始顺序每次读取65bit,读取了27拍时钟周期后,再每次读取64bit,读取的输出数据即为10G EPON ONU中编码后的数据tx_fec[65:0];
其中,fifo缓存的宽度为66bit,深度为178,读写时钟频率及系统时钟频率均为156.25MHz,
输入数据总线从扰码部分送来的66bit位宽的数据tx_scramed[65:0]和输出数据总线输出的FEC编码后的数据tx_fec[65:0]中,最低有效位LSB指bit0。
在上述技术方案的基础上,步骤S10包括以下步骤:
S101、根据扰码部分送来的66bit数据,判断是否是有效的上行突发数据;
S102、如果是有效的上行突发数据,即将扰码部分送来的66bit位宽的数据写进fifo缓存中,否则fifo缓存不进行写操作,执行步骤S103;
S103、如果是无效的上行突发数据,并且fifo缓存为空时,接连写进2个66bit块之后,再停止对fifo缓存进行写操作,如果是无效的上行突发数据,但fifo缓存不为空时,停止对fifo进行写操作。
在上述技术方案的基础上,步骤S20包括以下步骤:
S201、当扰码部分有有效的上行突发数据到达时,并且fifo缓存不为空时,开始从fifo缓存中读取数据;
S202、从fifo缓存中读取的66bit数据块,将其最低位bit丢弃,其余的65bit依次写进9个寄存器组中;
读取的fifo数据66bit块,顺次从reg_array_1[2015:0]寄存器组中开始寄存,寄存数据时,首先从寄存器组的低位开始寄存,fifo缓存的写使能信号transmitting_en从低电平跳变为高电平时,此时从fifo缓存中读出的66bit数据块为第一个66bit的数据块[65:0],将其中的[65:1]bit放进1#寄存器组reg_array_1[69:5]中,reg_array_1[4:0]中固定的填充“0”,从fifo中读取的第二个66bit数据块,将其中的[65:1]放进寄存器组reg_array_1[134:70],如此进行下去,直到从fifo中读取的第27个66bit块,将其[65:1]bit位放进寄存器组reg_array_1[1759:1695]中,由此即完成了第一组27个66bit块的寄存处理,reg_array_1[2015:1760]中的bit位预留给RS(252,220)编码后的校验字节进行寄存;
当reg_array_1[2015:0]寄存完后,如果fifo不为空,从fifo中读出的数据接着寄存进2#寄存器组reg_array_2[2015:0],寄存方法同reg_array_1[2015:0],如此进行下去,直到寄存完9#寄存器组reg_array_9[2015:0],如果fifo仍不为空,接着又进行reg_array_1[2015:0]寄存器组的数据寄存,直到fifo缓存为空时才停止对寄存器组进行数据寄存;
对于每个寄存器组来说,当寄存器组中的[69:5]bit位写进数据后,即将该寄存器组对应的寄存状态reg_array_sta置为高电平有效,对于9个寄存器组reg_array_1[2015:0]~reg_array_9[2015:0]来说对应的有reg_array_sta1~reg_array_sta9共9个寄存状态指示信号;
S203、步骤S201中,每次从fifo缓存中读出243个66bit块时,需要停读36个时钟周期。
在上述技术方案的基础上,步骤S30包括以下步骤:
S301、一旦某个寄存器组中进行了写操作,那么在下一拍,从寄存器组的低位开始,每次取8bit数据,送给RS(252,220)编码电路进行编码处理,编码采用传统的移位寄存器实现,包括32个8位宽的寄存器、32个GF(28)上的乘法器和32个GF(28)上的加法器构成,编码起始时,32个寄存器P31、P30…P1、P0中的数据为全“0”,然后在下一拍将信息元I251送入RS(252,220)编码电路进行相应的加法和乘法运算处理后,将各个运算结果存储在移位寄存器中,紧跟着下一拍将信息元I250送入RS(252,220)编码电路进行同样的编码处理,这样依次进行,每拍处理一个信息元的数据,直到处理完信息元I32后,此时32个8位宽的移位寄存器中寄存的P31、P30…P1、P0数据即为RS(252,220)编码电路编码后得到的校验字节;
S302、步骤S301中的校验字节写进对应寄存器组的[2015:1760]bit位中进行寄存:当RS(252,220)编码器处理完某个寄存器组的[1759:0]共1760个bit后,编码器下一拍送出的将是校验字节,将校验字节依次写进对应寄存器组的[2015:1760],从低位开始写起,直到所有的32个校验字节都写进了对应的寄存器组为止,然后循环往复。
在上述技术方案的基础上,步骤S40中的从寄存器组中的[1759:5]bit位中,每次读取65bit,从寄存器组中的[2015:1760]bit位中,每次读取64bit;
步骤S40包括以下步骤:
以1#寄存器组从fifo中获取了第一个66bit数据块为计时起点,经过223拍时钟周期之后,并且1#寄存器组对应的寄存器状态指示信号reg_array_sta1为高电平时,从reg_array_1[2015:0]开始从低位顺序每次读取65bit,将其中的最低位bit取反后放在66bit数据块的bit0位置,66bit块中的其他65bit即为从寄存器组中读取的65bit,这样读取寄存器组中的数据27拍时钟周期后,再读4拍时钟周期的数据,每拍读取64bit,将64bit数据放置在66bit数据块的[65:2]中,66bit数据块中的[1:0]依次补充“00”、“11”、“11”、“00”,这样即完成了reg_array_1的操作,完成之后,将该寄存器组的寄存状态reg_array_sta1置为低电平无效,接着按照同样的方法处理寄存器组reg_array_2中读出的数据,一直到处理完第9#寄存器组中数据,然后再循环到1#寄存器组reg_array_1中进行处理,又开始了新一轮的循环操作。直到某个寄存器组的寄存状态指示信号reg_array_sta为低电平无效时为止,经过这样处理后输出数据即为10G EPON ONU中FEC编码后的数据。
一种基于10G EPON ONU中的FEC硬件编码电路,其特征在于:包括1个fifo缓存、9个寄存器组和9个RS(252,220)编码器,其中:
fifo缓存宽度为66bit,深度为178;fifo写侧缓存扰码模块送出的数据块,fifo缓存读侧中读出的数据块通过数据线与9个寄存器组分别连接以依次写进9个寄存器组中进行寄存,
每个RS(252,220)编码器由32个8位宽的移位寄存器、32个GF(28)上的乘法器和32个GF(28)上的加法器组成;
寄存器组每个最大能存储2016bit数据;从寄存器组中依次读出的数据通过数据线与其对应的RS(252,220)编码器连接以进行编码,
编码时对输入的信息元经过RS(252,220)编码电路进行加法和乘法运算后,将运算结果存储在RS(252,220)编码器中的32个移位寄存器内,
当编码处理完之后,各个编码电路中的移位寄存器中存储的数据再通过数据线回写进对应的寄存器组中的对应bit位中进行寄存。
本发明所述的基于10G EPON ONU中的FEC硬件编码方法及电路,实现方法简便有效、操作性强,实现的电路规模较小并能达到较高的硬件电路时序速度,以较小的电路代价实现了10G EPON ONU中的速率要求。
具体实施方式
以下结合附图对本发明作进一步详细说明。
本发明提供了一种基于10G EPON ONU中的FEC硬件编码方法及电路,用于实现10G EPON ONU中上行方向FEC硬件编码,该发明的硬件电路实现简单,电路规模较小,能获得较高的硬件时序速度。
为了更好地理解本发明,下面首先介绍10G EPON ONU上行方向的结构。
IEEE802.3ay标准中规定的10G EPON ONU上行方向结构如图1所示,按照ONU(光网络单元)中上行数据流的传送方向,ONU中上行处理过程描述如下:RS层(协调子层)将上层的数据按照XGMII接口(10Gigabit Media Independent Interface,10Gb独立于媒体的接口)的格式进行映射处理后,在系统时钟TX_CLK(时钟频率为156.25MHz)的上升沿送出64bit位宽的数据信号TXD[63:0]和8bit位宽的控制信号TXC[7:0]给PCS层(物理编码子层)进行处理,控制信号TXC[i]=0表示数据信号TXD[8×i+7:8×i]携带的是数据码字(i=0,1,…,7),反之携带的是控制码字,对送入的数据信号TXD[63:0]和控制信号TXC[7:0],PCS层首先经过空闲字符删除操作(IDELDELETION),删除数据信号TXD[63:0]中一定量的空闲字符;再经过64B/66B编码(64B/66B ENCODE)操作,实现输入64bit位宽的数据到66bit位宽数据的转换;再经过扰码操作(SCRAMBLE)后送出66bit位宽的数据给FEC编码部分(FEC ENCODER)进行处理;FEC编码处理完之后,送出编码后的信号tx_fec[65:0],因此PCS层中FEC编码部分输入的数据位宽是66bit,编码后输出的数据位宽也是66bit,FEC编码部分送出的数据信号tx_fec[65:0]再进入变速箱(GEAR_BOX)中进行66bit位宽到64bit位宽的变换处理;至此完成了整个上行PCS层的所有处理。变速箱处理后的64bit位宽的数据信号接着进入PMA(物理媒质附加)子层进行并串转换,PMA子层处理后的串行信号最终送入PMD(物理媒质相关)子层中进行传送处理,PMD子层将最终的ONU上行处理信号送出。
本发明提供的方法是使用fifo缓存(先进先出缓存)先将扰码部分(扰码操作后)送出的66bit位宽的数据tx_scramed[65:0]进行存储,然后再从fifo缓存中读取出数据依次写进9个寄存器组中,每一个寄存器组中最大能存储2016bit数据,每一个寄存器组还对应有一个RS(252,220)编码器,因此共有9个RS(252,220)编码器,每个寄存器组中写入一个66bit块之后,立即启动该寄存器组对应的RS(252,220)编码器进行编码处理,编码处理时每次从寄存器组中取8bit数据进行编码,编码后得到的校验字节位再回写进对应寄存器组中的对应bit位中进行存储,最后再按照一定的顺序从寄存器组中读出数据即得最终的编码结果。
本发明所采用的技术方案是提供一种基于10G EPON ONU中的FEC硬件编码方法及电路,其中,如图2所示,所述基于10G EPON ONU中的FEC硬件编码方法,包括以下步骤:
S10、按照10G EPON ONU上行突发模式的格式控制,将从扰码部分送来的66bit位宽的数据tx_scramed[65:0]写进fifo缓存中;
S20、每次从fifo缓存中取出66bit位宽的数据,去掉LSB位后,将其余的65bit数据依次写进9个寄存器组reg_array_1[2015:0]至reg_array_9[2015:0]中;每一个寄存器组对应有一个RS(252,220)编码器,共有9个RS(252,220)编码器(即图2中所示的RS(252,220)encoder1~RS(252,220)encoder9);
寄存器组共有9个(即图2中所示的reg_array_1[2015:0]~reg_array_9[2015:0]),每个寄存器组最大能寄存2016bit的数据,每个寄存器组中的[4:0]bit固定为“0”,寄存器组中的[1759:5]bit寄存从fifo中读取的27个65bit块,寄存器组中的[2015:1760]bit寄存FEC校验字节;
S30、一旦某个寄存器组中写进了数据,即启动对应的RS(252,220)编码器进行编码:每次从该寄存器组中取出8bit数据送入该寄存器组对应的RS(252,220)编码器中进行编码,编码得到的校验字节再写进对应寄存器组的对应bit位中进行寄存;所述RS(252,220)是RS(255,223)的缩短码;
S40、按照一定的格式从寄存器组中读出数据,即可以得到FEC编码后的数据tx_fec[65:0]:当寄存器组开始写操作了223拍时钟周期后,依次从1#寄存器组(即reg_array_1[2015:0])开始顺序每次读取65bit,读取了27拍时钟周期后,再每次读取64bit,读取的输出数据即为10G EPON ONU中编码后的数据tx_fec[65:0];
其中,fifo缓存的宽度为66bit,深度为178,读写时钟频率均为156.25MHz,这也是本发明中的系统时钟频率。本发明输入数据总线从扰码部分送来的66bit位宽的数据tx_scramed[65:0]和输出数据总线输出的FEC编码后的数据tx_fec[65:0]中,LSB(最低有效位,本文中亦称为最低位bit)指bit0、MSB(最高有效位)指bit65。
在上述技术方案的基础上,步骤S10包括以下步骤:
S101、根据扰码部分送来的66bit数据,判断是否是有效的上行突发数据;
S102、如果是有效的上行突发数据,即将扰码部分送来的66bit位宽的数据写进fifo缓存中,否则fifo缓存不进行写操作,执行步骤S103;
S103、如果是无效的上行突发数据,并且fifo缓存为空时,接连写进2个66bit块之后,再停止对fifo缓存进行写操作,如果是无效的上行突发数据,但fifo缓存不为空时,停止对fifo进行写操作;
步骤S101的具体实施见图3所示,图3是一个状态机,其中INIT(初始状态)、WAIT_FOR_BLOCK(等待输入66bit块状态)、RECEIVE_CTRL_BLOCK(接收到控制块状态)、RECEIVE_DATA_BLOCK(接收到数据块状态)、FEC_DATA_BLOCK(FEC数据编码状态)、TRANSMITTING_END(上行突发结束状态)分别表示不同的状态,变量idleblock_count(空闲块计数器)、fecblock_count(fec编码块计数器)均为计数器,变量transmitting_en为fifo缓存的写使能信号,高电平表示写有效,变量delaybound为一个表示激光器开启时间的计数值,在硬件实现中,变量delaybound的值来自于微机口的配置值,tx_scramed[65:0]信号为扰码后送出的数据,该状态机实现过程如下:
电路起始处于INIT状态,在该状态中变量transmitting_en、idleblock_count、fecblock_count全部清零;
然后电路无条件的进入WAIT_FOR_BLOCK状态,等待有效的输入66bit块信号tx_scramed[65:0]达到,如果输入的tx_scramed[1:0]=“01”(“1”为LSB),则表示接收到的是控制块,并进入RECEIVE_CTRL_BLOCK状态,如果tx_scramed[1:0]=“10”(“0”为LSB),则表示接收到的是数据块,并进入RECEIVE_DATA_BLOCK状态。
在RECEIVE_CTRL_BLOCK状态下,变量idleblock_count会进行累加计数,以统计控制块的个数,如果变量transmitting_en为高有效的情况下,则状态会进入FEC_DATA_BLOCK状态,否则会返回到WAIT_FOR_BLOCK状态等待下一个有效数据块的输入。
在RECEIVE_DATA_BLOCK状态下,变量transmitting_en会置为高有效,同时变量idleblock_count会进行清零操作,然后状态会无条件的转入到FEC_DATA_BLOCK状态进行处理。
在FEC_DATA_BLOCK状态下,变量transmitting_en会置为高有效,同时计数器fecblock_count会进行累加计数,当fecblock_count=27并且idleblock_count>delaybound时,状态会进入TRANSMITTING_END状态,否则会返回到WAIT_FOR_BLOCK状态等待下一个有效数据块的输入,在TRANSMITTING_END状态下,会对变量transmitting_en和计数器fecblock_count进行清零操作。操作完后,状态会返回到WAIT_FOR_BLOCK状态等待下一个有效数据块的输入。
图3状态机产生的transmitting_en信号为高电平的时候,即表明扰码部分送来的66bit块,是有效的上行突发数据,否则为无效的上行突发数据。该信号作为fifo缓存的写使能信号,控制fifo缓存写侧的动作。
在上述技术方案的基础上,步骤S20包括以下步骤:
S201、当扰码部分有有效的上行突发数据到达时,并且fifo缓存不为空时,开始从fifo缓存中读取数据;
S202、从fifo缓存中读取的66bit数据块,将其最低位bit丢弃(即丢弃LSB位),其余的65bit依次写进9个寄存器组中;
读取的fifo数据66bit块,顺次从1#寄存器组reg_array_1[2015:0]中开始寄存,寄存数据时,首先从寄存器组的低位开始寄存,fifo缓存的写使能信号transmitting_en从低电平跳变为高电平时,此时从fifo缓存中读出的66bit数据块为第一个66bit的数据块[65:0],将其中的[65:1]bit放进1#寄存器组reg_array_1[69:5]中,reg_array_1[4:0]中固定的填充“0”,从fifo中读取的第二个66bit数据块,将其中的[65:1]放进寄存器组reg_array_1[134:70],如此进行下去,直到从fifo中读取的第27个66bit块,将其[65:1]bit位放进寄存器组reg_array_1[1759:1695]中,由此即完成了第一组27个66bit块的寄存处理,reg_array_1[2015:1760]中的bit位预留给RS(252,220)编码后的校验字节进行寄存;
当reg_array_1[2015:0]寄存完后,如果fifo不为空,从fifo中读出的数据接着寄存进2#寄存器组reg_array_2[2015:0],寄存方法同reg_array_1[2015:0],如此进行下去,直到寄存完9#寄存器组reg_array_9[2015:0],如果fifo仍不为空,接着又进行reg_array_1[2015:0]寄存器组的数据寄存,直到fifo缓存为空时才停止对寄存器组进行数据寄存;
对于每个寄存器组来说,当寄存器组中的[69:5]bit位写进数据后,即将该寄存器组对应的寄存状态reg_array_sta置为高电平有效,对于9个寄存器组reg_array_1[2015:0]~reg_array_9[2015:0]来说对应的有reg_array_sta1~reg_array_sta9共9个寄存状态指示信号;
S203、步骤S201中,每次从fifo缓存中读出243个66bit块时,需要停读36个时钟周期(停读36拍)。
在上述技术方案的基础上,步骤S30包括以下步骤:
S301、一旦某个寄存器组中进行了写操作,那么在下一拍(周期),从寄存器组的低位开始,每次取8bit数据,送给RS(252,220)编码电路进行编码处理,编码采用传统的移位寄存器实现,RS(252,220)编码电路见图4所示,包括32个8位宽的寄存器、32个GF(28)上的乘法器和32个GF(28)上的加法器构成,编码起始时,32个寄存器P31、P30…P1、P0中的数据为全“0”,然后在下一拍将信息元I251送入RS(252,220)编码电路进行相应的加法和乘法运算处理后,将各个运算结果存储在移位寄存器中,紧跟着下一拍将信息元I250送入RS(252,220)编码电路进行同样的编码处理,这样依次进行,每拍处理一个信息元的数据,直到处理完信息元I32后,此时32个8位宽的移位寄存器中寄存的P31、P30…P1、P0数据即为RS(252,220)编码电路编码后得到的校验字节;
图4中的g0-g32为RS(252,220)的生成多项式的系数,其十进制值如下:
g32=1;g31=116;g30=64;g29=52;g28=174;g27=54;g26=126;
g25=16;g24=194;g23=162;g22=33;g21=33;g20=157;g19=176;
g18=197;g17=225;g16=12;g15=59;g14=55;g13=253;g12=228;
g11=148;g10=47;g9=179;g8=185;g7=24;g6=138;g5=253;
g4=20;g3=142;g2=55;g1=172;g0=88;
图4中的I251,I250,…I33,I32对应为从寄存器组(reg_array_1[2015:0]~reg_array_9[2015:0])中取出的8bit位宽的数据,I251对应表示从寄存器组的[7:0]中获取的数据,I32对应表示从寄存器组的[1759:1752]中获取的数据,移位寄存器中寄存的数据P31,P30,…P1,P0即为RS(252,220)编码后得到的校验字节;
S302、步骤S301中的校验字节写进对应寄存器组的[2015:1760]bit位中进行寄存:当RS(252,220)编码器处理完某个寄存器组的[1759:0]共1760个bit后,编码器下一拍送出的将是校验字节,将校验字节依次写进对应寄存器组的[2015:1760],从低位开始写起,例如第一个校验字节P31写进对应寄存器组的[1767:1760]中,下一个校验字节P30写进对应寄存器组的[1775:1768]中,这样依次类推,直到所有的32个校验字节都写进了对应的寄存器组为止,然后循环往复;
步骤S301中的RS(252,220)编码器共有9个,每个寄存器组对应有一个RS(252,220)编码器,例如1#寄存器组reg_array_1[2015:0]对应的RS(252,220)编码器为RS(252,220)encoder1,RS(252,220)为RS(255,223)的缩短码。
在上述技术方案的基础上,步骤S40中的从寄存器组中的[1759:5]bit位中,每次读取65bit,从寄存器组中的[2015:1760]bit位中,每次读取64bit;步骤S40包括以下步骤:以1#寄存器组reg_array_1[2015:0]从fifo中获取了第一个66bit数据块为计时起点,经过223拍时钟周期之后,并且1#寄存器组reg_array_1[2015:0]对应的寄存器状态指示信号reg_array_sta1为高电平时,从1#寄存器组reg_array_1[2015:0]开始从低位顺序每次读取65bit,将其中的最低位bit取反后放在66bit数据块的bit 0位置,66bit块中的其他65bit即为从寄存器组中读取的65bit,这样读取寄存器组中的数据27拍时钟周期后,再读4拍时钟周期的数据,每拍读取64bit,将64bit数据放置在66bit数据块的[65:2]中,66bit数据块中的[1:0]依次补充“00”、“11”、“11”、“00”,这样即完成了1#寄存器组reg_array_1的读操作,完成之后,将该寄存器组的寄存状态reg_array_sta1置为低电平无效,接着按照同样的方法处理2#寄存器组reg_array_2[2015:0]中读出的数据,一直到处理完第9#寄存器组reg_array_9[2015:0]中数据,然后再循环到reg_array_1寄存器组中进行处理,又开始了新一轮的循环操作。直到某个寄存器组的寄存状态指示信号reg_array_sta为低电平无效时为止,经过这样处理后输出数据即为10G EPON ONU中FEC编码后的数据。
本发明还提供了一种基于10G EPON ONU中的FEC硬件编码电路,包括1个fifo缓存、9个寄存器组和9个RS(252,220)编码器,其中fifo缓存宽度为66bit,深度为178;寄存器组每个最大能存储2016bit数据;每个RS(252,220)编码器由32个8位宽的移位寄存器、32个GF(28)上的乘法器和32个GF(28)上的加法器组成。各部分电路的连接关系及数据流的流向如下:
fifo写侧缓存扰码模块送出的数据块,fifo缓存读侧中读出的数据块依次写进9个寄存器组中进行寄存,从寄存器组中依次读出的数据送入该寄存器组对应的RS(252,220)编码器中进行编码,编码时对输入的信息元经过RS(252,220)编码电路(见图4所示)进行加法和乘法运算后,将运算结果存储在32个移位寄存器中,当编码处理完之后,各个编码电路中的移位寄存器中存储的数据再回写进对应的寄存器组中的对应bit位中进行寄存,最后依次从寄存器组中读出数据送出即可。
例如:
fifo缓存宽度为66bit,深度为178;fifo写侧缓存扰码模块送出的数据块,fifo缓存读侧中读出的数据块通过数据线与9个寄存器组分别连接以依次写进9个寄存器组中进行寄存,
每个RS(252,220)编码器由32个8位宽的移位寄存器、32个GF(28)上的乘法器和32个GF(28)上的加法器组成;
寄存器组每个最大能存储2016bit数据;从寄存器组中依次读出的数据通过数据线与其对应的RS(252,220)编码器连接以进行编码,
编码时对输入的信息元经过RS(252,220)编码电路进行加法和乘法运算后,将运算结果存储在RS(252,220)编码器中的32个移位寄存器内,
当编码处理完之后,各个编码电路中的移位寄存器中存储的数据再通过数据线回写进对应的寄存器组中的对应bit位中进行寄存。
本发明通过对fifo缓存的读写操作的控制,完成了输入66bit位宽的数据寄存到9个寄存器组中,再从寄存器组中每次取出8bit数据送入对应的移位寄存器中进行RS(252,220)编码,编码得到的校验字节再写进对应的寄存器组中,然后依次从寄存器组中按照一定的格式取出数据,即得到最终的FEC编码数据。
为了更好的理解本发明整个处理的时序关系,图5给出了本发明的处理时序图,当信号transmitting_en从低电平跳变为高电平时,表明10G EPON 0NU要进行一次上行的突发数据操作,以此时刻作为处理时序的刻画起点,并定为第1#时钟周期点,见图5中的信号time所示,当fifo缓存不为空时,寄存器组依次从1#寄存器组reg_array_1[2015:0]开始寄存数据,直到寄存完9#寄存器组reg_array_9[2015:0],需要243个时钟周期,然后停止36个时钟周期后,在第279#时钟周期点又接着从1#寄存器组reg_array_1[2015:0]开始寄存数据,如此重复进行,直到fifo缓存为空时为止,见图5中的信号reg_array所示。
从2#时钟周期点开始可以从1#寄存器组reg_array_1[2015:0]中取数据进行RS(252,220)编码,252个时钟周期后,完成了1#寄存器组reg_array_1[2015:0]中的所有数据的编码处理,然后再停止编码27个时钟周期后,在第280#时钟周期点又开始1#寄存器组reg_array_1[2015:0]中数据的RS(252,220)编码,见图5中的rs_encoder1信号所示;
从第29#时钟周期点开始,2#寄存器组reg_array_2[2015:0]中的数据将进行RS(252,220)编码处理,27个时钟周期后,在第56#时钟周期点开始,3#寄存器组reg_array_3[2015:0]中的数据将进行RS(252,220)编码处理,每隔27个时钟周期点将启动下一个寄存器组的编码处理,在第217#时钟周期点开始,9#寄存器组reg_array_9[2015:0]中的数据将进行RS(252,220)编码处理,见图5中的rs_encoder9信号所示,此时1#寄存器组reg_array_1[2015:0]中的数据还没有编码完。
从第223#时钟周期点开始,当1#寄存器组reg_array_1[2015:0]的寄存状态reg_array_sta1信号为高电平时,从1#寄存器组中顺次取数据输出,见图5中的reg_encoder_out信号所示,取完后,当2#寄存器组reg_array_2[2015:0]的寄存状态reg_array_sta2信号为高电平时,接着取2#寄存器组中的数据输出,如此依次进行,一直到9#寄存器组reg_array_9[2015:0],取完所有的9个寄存器组中的数据需要279个时钟周期,再返回判断1#寄存器组reg_array_1[2015:0]的寄存状态reg_array_sta1信号是否为高电平,如果为高电平,从1#寄存器组中取数据输出,如此反复进行,直到某个寄存器组的寄存状态信号为低电平时为止。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。