Menu Close

高速通信分层设计及PCS子层实现—发送端Verilog代码

在之前的几节内容中我们研究了通信分层的概念和分层实现的优点,其中在物理层中有一个非常重要的子层PCS(Physical Coding Sublayer)。该层主要有两个功能:

(1)通过编码实现改善信道的质量,如改善直流平衡,提供足够多的时钟信息等;

(2)提供物理层通信控制功能,实现高层协议无法完成的或不需要高层参与完成的功能。如物理层的自动协商,实现物理层差异时的自动适配,如速率适配,线序调换等功能。

本节内容以8b/10b编码编码框架实现PCS子层,工程代码也做了较大修改充分体现了高速通信中分层的概念。高速通信收发层次如图1所示。

图1

由于整个工程的代码层次比较多,本节内容着重以发送端的代码介绍为主,接收端的代码安排在下节内容实现。在本节内容除了PCS子层代码外,其它内容及实现方法已经介绍,但为了通信工程的层次更加清晰,各层代码也做了较大修改,同时应注重研究在同步时钟域下各层握手的实现方法。

tx握手信号如图2所示。

图2-1 tx握手信号

图2-2 tx握手信号

1. 应用层(tb_8b10b.v)

该层在本阶段作为通信部分研究的最高层,其它的通信协议会在后续的章节中作为扩展部分介绍。


 

图3  tb_8b10b.v 仿真波形1

图4 tb_8b10b.v 仿真波形2

2. 高速通信的顶层文件


 

3.发送端数据链路层代码

数据链路层(data-link)的上层是应用层,下层为物理层,直接对接的是物理层的PCS子层。注意上下层之间的握手。同时该层包间隔的设定,为了简化设计,Peamble+SFD部分没有插入,感兴趣的读者可以自己尝试。


 

图5  trans_data_link.v 握手信号波形

图5中,应注重观察 data-link 层与应用层及PCS的握手,同时分析包间隔(frame interval)的插入。

4.发送端PCS子层代码

本层的上层是数据链路层,下层为PMA子层,应注意上下层之间的握手。PCS子层采用8b/10b编码实现。其中采用k28.5作为帧起始,K28.1作为帧结束。8b/10b编码部分见 文章 Verilog 8b/10b encoder.

图6


 

图7 PCS层结构图

图8 tx_data_phy.v(PCS)仿真波形1

图8中应着重分析与上层 data-link以及下层PMA 层的握手,同时结合本层的程序,研究如何插入K28.5.

图9 tx_data_phy.v(PCS)仿真波形2

利用图9波形结合PCS层代码分析包结束部分的握手,以及如何插入K28.1控制字符。

5.发送端 PMA代码

本层主要实现并串转换,要注意与上层PCS子层的握手。


 

图10  tx_pma.v 波形

在图10中注意观察握手,以及上层如何调度IDLE和数据包的。

6. 发送端PMD代码

本层采用LVDS实现PMD(Physical Media Dependent),物理媒介可以是PCB板的差分线,或双绞线。


以上6个部分的设计细节,由于过于繁琐,这里没有一一介绍,感兴趣的同学可以观看对应的视频。

Posted in FPGA, FPGA 教材教案, IP开发, 教材与教案, 文章, 集成电路