明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 119992|回复: 0

光纤项目中光纤用户层接口设计分享(个人总结)

[复制链接]

78

主题

106

帖子

5182

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5182
发表于 2019-11-9 13:53:08 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
光纤项目中光纤用户层接口设计分享(个人总结)
作者:小耀

本文为明德扬原创文章,转载请注明出处!

      光纤接口是FPGA比较常用的接口之一,它的传输方式与一些寻常接口的传输方式有些不同,为了让大家了解光纤接口,并避免配置接口时的一些常见问题,我特意写下了这个总结,希望能够对大家有所帮助。


一、光纤接口的传输特点

      大多数接口发送包文数据时会发送:数据data、有效指示信号data_vld、包文起始信号data_sop、包文结束信号data_eop以及无效字节数data_mty等。如下图1所示。

图片1.png
1

        光纤接口和上述接口发送的方式不同,光纤接口发送包文数据时只会发送数据txdata和K码tx_k,内部读取数据时也只会读取数据rxdata和k码rx_k。若数据(txdata、rxdata)为8字节,则k码为8位数据。如下图2所示。

图片2.png

2

二、k码的表示
     k码是用来表示数据是否有效的,那么我们应该如何设定k码呢?假设用下述方式表示k码:

数据无效时:8’b0 ;
数据有效+SOP时:8’mty(4位mty)+0110 ;
数据有效+EOP时:8’mty(4位mty)+0011 ;
数据有效+其它时:8’mty(4位mty)+0010 ;

我们会发现数据会出现错误!因为数据和k码在传输过程中可能会发生偏移!例如发送第一个数据时,txdata=64’h0102030405060708,
tx_k=8’b00000110。

       而内部接收时,数据可能会右移2位,造成接收到的数据与发送出的数据有所不同。如rxdata=64’h0000010203040506,rx_k=8’b000000001。即如下图所示3。

图片3.png
3


因此,我们仅将k码用做有效无效的指示信号以及同步信号,并用下述方式进行表示:

数据无效时,发送固定k码:0x01,接收根据这个1的位置,判断开始位;

数据有效时,发送固定k码:0x00,接收根据k码的值,识别数据是否有效。

在这种情况下,即使发生了偏移,我们也能知道k码中1后面的8个0所对应的rxdata为有效数据。例如,第n个周期接收到

rxdata=64’h00bc010203040506,接收到rx_k=8’b01000000,第n+1个周期接收到rxdata=64’h0708020304050607,接收到rx_k=8’b00000000。通过第n个周期rx_k中的1能够判断出后面8位0所对应的rxdata=64’h0102030405060708为有效数据。


三、比特位顺序调换

      我们先介绍一下小头模式和大头模式。小头模式指的是低位在前高位在后,大头模式指的是高位在前低位在后。例如同样的数据012345678,在小头模式中,0是最低位,8是最高位,在大头模式中则0是最高位,8是最低位。由于光纤接口是小头模式,而我们熟悉的是大头模式。因此我们需要将光纤接口数据的比特位顺序进行调换。


四、数据对齐

     由于我们接收到的数据是偏移了的,因此我们需要利用一个模块将光纤接口偏移的数据进行还原。例如,第n个周期接收到

      rxdata=64’h00bc010203040506,接收到rx_k=8’b01000000,第n+1个周期接收到rxdata=64’h0708020304050607,接收到rx_k=8’b00000000,我们通过对其模块将其还原成第n个周期为rxdata=64’0102030405060708,rx_k=8’00000000即将下图4变换成下图5。


图片4.png
4
图片5.png
5


五、数据解包与打包

      我们定义发送包文的方式是发送:55D5+16b长度+长度字节个DATA+校验和。为了判断是否接收有效包文,我们设定当接收到55D5时,表示后面的数据信号有效,接着接收数据的长度,表示该包文的有效长度,然后接收数据,最后再接收一个校验位,检验包文是否有错误。

     例如接收到8’h55+8’hd5 + 8’h00+8’h03 + 8’h12+8’hbc +8’h63 + 8’h00+ 8’h03 , 表示55d5后面的数据是包文,包文内数据一共有3个,数据分别是 8’h12、8’hbc、8’h63,最后检验位显示一共有3个数据,包文正确。这样我们就将一个有效包文解包成有效数据 8’h12、8’hbc、8’h63。

     数据打包的过程与打包的过程正好相反,假如我们接收到5字节有效数据8’h12、8’hbc、8’h63、8’hbc、8’h63,我们需要将其打包成8’h55+8’hd5 + 8’h00+8’h05 + 8’h12+8’hbc +8’h63 + 8’hbc +8’h63 + 8’h00 +8’h05。


六、光纤串口的模块

      在接收端中,我们利用Rx_data_reverse模块和Rx_ctrl_reverse模块将输入的rxdata和rx_k执行要点三的比特位顺序调换操作,利用Rx_align模块执行要点四的数据对齐操作,利用Decoder模块执行有效数据的判断,利用Unpackcomm模块执行数据的解包操作。

在发送端中,我们利用packcommpack模块将数据进行打包,再利用Tx_data_reverse模块和Tx_ctrl_reverse模块将数据从大头模式还原成小头模式,即再进行一次比特位顺序的调换,然后再发送。

明德扬已经针对本项目录制了视频课程,感兴趣的同学可以加兰老师微信了解 66.jpg




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-23 01:45 , Processed in 0.069319 second(s), 22 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表