张琴1,杨莹1,杨灿美2,林福江1
(1.中国科学技术大学 信息科学技术学院,安徽 合肥 230027;2.中国科学技术大学 先进技术研究院,安徽 合肥 230027)
摘要:10GBASE-KR变速箱的功能是实现156.25 MHz下66 bit数据与644.53 MHz下16 bit数据之间的通信。该文在深入研究万兆以太网物理编码子层(Physical Coding Sublayer ,PCS)的功能以及变速箱原理的基础上,提出一种新的变速箱实现方法,将其分成读写数据转换和异步FIFO(First In First out)两个模块,完成发送通道和接收通道的设计。该方法有效减少了存储器的数目,使存储器数目由原来的528个减少到82个。本设计使用Verilog硬件描述语言,采用ModelSim进行功能仿真,并利用EDA(Electronic Design Automation)工具完成逻辑综合。仿真结果表明,该方法实现了变速箱的功能要求,并具有面积小、速度快的特点。
关键词:变速箱;万兆以太网;PCS;逻辑综合
0引言
图1PCS层功能结构图变速箱的功能是在保证数据率不变的前提下,完成高速信号与低速信号之间的通信,广泛应用于高速通信系统中。万兆以太网作为以太网领域的先进技术,具有工作速率快、可靠性高、应用范围广的特点,有着广泛的发展前景。本文根据10GBASEKR协议标准,设计了一种新的物理编码子层(PCS)变速箱实现方法,有效地简化了电路的复杂度。
1PCS层的功能与结构
PCS层位于媒体访问控制子层(MAC)与物理介质连接子层(PMA)之间,通过XGMII接口和PMA服务接口与上下层实现通信[1]。PCS层的结构图如图1所示。由图可知,PCS层由发送通道和接收通道构成,发送通道将XGMII传输的72 bit(两路32 bit的TXD和4 bit的TXC)数据转换成16 bit的数据发送到PMA层,包括CRC8插入模块、64 B/66 B编码器、扰码器和变速箱;接收通道接收PMA传输的16 bit的数据并转换为72 bit(两路32 bit的RXD和4 bit的RXC)数据,包括CRC8移除模块、64 B/66 B解码器、解扰码器和变速箱。整个PCS层以及XGMII接口的时钟频率为156.25 MHz,PMA层的时钟频率为644.53 MHz[2]。
2变速箱原理及传统设计方法
由PCS层结构图可知,变速箱位于扰码器/解扰码器和PMA层之间,完成156.25 MHz的低速信号与644.53 MHz的高速信号间的通信。
发送通道中,变速箱的输入为由扰码器输出的64 bit数据和64 B/66 B编码器输出的2 bit同步头构成的66 bit数据,输出是16 bit数据,并发送到PMA层;接收通道中,变速箱输入为PMA传输的16 bit数据,输出66 bit数据,并将同步后的64 bit数据传送到解扰码器以及将2 bit同步头传送到64 B/66 B解码器。
变速箱完成数据率为10.312 5 Gb/s信号间的传输,实现156.25 MHz下66 bit数据与644.53 MHz下16 bit数据的转换。
传统的变速箱结构图如图2和图3所示[3]。图2为发送通道变速箱结构图,其中,1 T~8 T是8个存储单元,深度为66 bit,总共528 bit的存储单元,每个存储单元对应每个时钟周期的输入数据,然后通过数据选择器在输出时钟有效沿到来时选择一路数据输出。该结构实现的是8个66 bit数据转换为33个16 bit数据。
图4发送通道变速箱电路结构图图3为接收通道变速箱结构,其中,1 T~33 T是33个存储单元,深度为16 bit,同样耗费528 bit的存储单元,每个存储单元对应每个时钟周期的输入数据,然后通过数据选择器在输出时钟有效沿到来时选择一路数据输出。从而实现16 bit数据到66 bit数据的转换。
这种电路结构耗费的存储器太多,导致整个电路的面积很大,并且造成很大的延迟。为了保证数据输出时输入数据已经稳定建立,数据选择器的第一次输出选择的是第12个16 bit,还需人为加入17.05 ns的延迟[3]。另外,这种结构的控制信号不易产生,电路的稳定性大大降低。本文提出一种新的设计方法能够有效地解决上述问题。
3新的变速箱设计
变速箱的设计难点是输入数据宽度与输出数据宽度不成整数倍,所以每次发送或者接收到的数据不能正好全部发完,剩下的数据必须等下一时刻数据到来时再发送。而且每次剩余的数据位置是不固定的。
本文将变速箱分为两个部分:读写数据转换模块和异步FIFO模块。读写数据转换模块完成数据转换和处理剩余比特数据问题,异步FIFO模块完成跨时钟域的数据传输。
发送通道中,本文选用16位的寄存器缓存每次读取数据所余下的2 bit数据。每次写操作对应4次读操作,在第8次写操作时,16位的寄存器中缓存了16 bit的数据,所以,对应5次读操作,以实现8个66 bit的写数据转换为33个16 bit的读数据。
本设计难点在于如何设计控制信号。因为每次读写操作结束后,余下的2 bit数据在16位寄存器中的位置是不固定的。本文设置了一个与读时钟同步的7位计数器,在每次读操作结束,计数器累加16,同时,设置了一个与读时钟同步的模33计数器,控制每33个读时钟周期只读8次。电路结构图如图4所示。在PCS时钟有效沿将输入的66 bit数据通过异步FIFO与PMA时钟域同步,并通过模33计数器控制PMA的读操作,输出寄存在66位的寄存器中,将其高16 bit寄存到16位的缓存器中。
该方法有效减少了存储器的数量,由传统方法的528个存储器减少到了82个存储器(66+16=82),降低了异步FIFO的复杂度,并且减少了整个电路的面积。使用Verilog HDL[4]语言描述,部分关键代码如下:
always @ (*)
case(counter)
7′d0:tx _group= shift_reg2[15: 0];
7′d2:tx _group={shift_reg1[1:0],shift_reg2[15:2]};
7′d4:tx _group={shift_reg1[3:0],shift_reg2[15: 4]};
7′d6:tx _group={shift_reg1[5:0],shift_reg2[15: 6]};
7′d8:tx _group={shift_reg1[7: 0],shift_reg2[15: 8]};
接收通道中,设置4个16位寄存器级联,将每个寄存器的输出与输入拼接构成66 bit数据。设计难点同样在于如何设计控制信号。4个16 bit数据只能组成64 bit数据,需要拼接2 bit数据,而这2 bit数据的位置是不确定的,另外写时钟频率比读时钟频率快很多,直接利用异步FIFO将导致FIFO总是写满状态。
本文设置了一个与写时钟同步的模33计数器,控制选择正确的66 bit的拼接数据,同时控制每33个写时钟周期只写8次数据,输入到异步FIFO中,避免了由于写时钟频率比读时钟频率快很多而导致FIFO总是写满的情况。电路结构如图5所示。在PMA时钟有效沿,计数器开始计数,生成的控制信号作为8选1 MUX的选择信号,选择正确的信号作为异步FIFO的写信号。同时,模33计数器开始计数,控制写使能信号的产生,控制异步FIFO的写操作,输出正确的66 bit信号。本文中的异步FIFO均采用传统的异步FIFO设计结构[5],利用2级D触发器级联,并采用格雷码完成写地址与读时钟以及读地址与写时钟的同步,避免电路出现亚稳态。与传统设计方法相比,本设计有效地降低了电路的复杂度和整个电路的面积。部分关键代码为:
图5接收通道变速箱电路结构图always @ (*)
case(rx_fetch_cnt[4:2])
3'd0: rx_pcs_66b={rx_pma_group[1:0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4};
3'd1: rx_pcs_66b={rx_pma_group[3 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 2]};
3'd2: rx_pcs_66b={rx_pma_group[5 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 4]};
3'd3: rx_pcs_66b={rx_pma_group[7 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 6]};
3'd4: rx_pcs_66b={rx_pma_group[9 :0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15: 8]};
3'd5: rx_pcs_66b={rx_pma_group[11:0],rx_pma_group1,
rx_pma_group2,rx_pma_group3,rx_pma_group4[15:10]};
4功能仿真与逻辑综合
本设计通过编写测试向量采用ModelSim工具完成各个模块的功能仿真,仿真结果如图6和图7所示。图6中,当输入信号为A_in时,对应的输出为A_out;当输入信号为B_in时,对应的输出为B_out。图7中,当输入信号为A_in时,对应的输出为A_out;当输入信号为B_in时,对应的输出为B_out;当输入信号为C_in时,对应的输出为C_out。为了保证信号的稳定性,人为地加入了一定的延迟。从仿真结果可以看出,输入所对应的输出都是正确的,表明本设计实现了PCS层发送通道和接收通道的变速箱功能仿真。
另外,本设计采用Synopsys公司的Design Compiler[6]工具完成了逻辑综合。综合结果表明设计完全符合PCS变速箱的时序要求。发送和接收电路分别留有4.56 ns、3.92 ns的时钟裕量,且面积小,分别使用了近1 000个逻辑门;在工作频率方面,发送电路使用了286个D触发器,最高写时钟频率分别为232.56 MHz、927.35 MHz,最高读时钟频率分别为961.54 MHz、211.42 MHz,使用了近1 300个逻辑门。与传统的设计方法[3]相比,面积缩小了近30%,工作速度提高了近50%。
5结论
本文在研究变速箱原理的基础上,根据其内在的逻辑关系,将电路分成写数据转换模块和异步FIFO两部分,设计了PCS层发送通道和接收通道的变速箱。完成了功能仿真和逻辑综合。综合结果表明,该方法有效地解决了控制信号不易设计和亚稳态的问题,缩小了面积,提高了工作速率。
参考文献
[1] Vivado design suite user guide: 10 GB Ethernet PCS/PMA v4.0[Z]. PG068 October 2, 2013.
[2] IEEE Std 802.3ap[S]. 2012 Edition.
[3] 敖志刚.万兆位以太网及其实用技术[M].北京:电子工业出版社,2007.
[4] 夏宇闻.Verilog数字系统设计(第二版)[M].北京:北京航空航天大学出版社,2008.
[5] VERILOG E, CUMMINGS C E. Simulation and synthesis techniques for asynchronous FIFO design[M]. Snug, 2002.