文章目录
- 1.回环程序实现
- 2.对端读写程序
- 3.调试结果
- 4.传送门
1.回环程序实现
这三种分别对应的部分,如下图所示的IP设置界面,其中Loopback serial data after transmit driver对应①,数据方向是用户Tx的数据在经过SERDES之后短接到Rx环回进去。与在Fiber上通过双纤短接Rx与Tx是一样的(唯一区别是外部短接经历了PCB走线,①loopback直接从),在xilinx里面称之为近端环回模式,这一步主要用于验证serdes四个部分之间的基础配置,参考时钟选择与源,各部分电压是否正常。Loopback serial data after equalizer对应图②,Loopback parallel data after de-serializer对应图③,②③的区别在于是否经过了串并转换,一般这两个的结果是一致的,这块不会出问题。其数据流向是,从外部rx接收到的环回至tx端在发送到外部。所以通常利用回环程序会做两个实验,一是近端回环实验确认基础硬件环境是否正常。二是远端环回,板子A开路发送数据,板子B设置为②或者③,就构成了远端环回,数据从A发出通过光纤接到B的rx,B从rx端内部环回至tx,B的tx端又通过光纤连接到A的rx。此实验在近端环回的基础上,进一步验证了外部设备包括光模块,光纤连接是否正确。除了在UI界面设置,此IP提供了接口信号sb_felb_ch,设置为1使能serdes桥接并行回环,即上述③。0为正常数据工作。
使用LatticeECP3内部环回时,通过寄存器接口读取内部状态,发现环回的接收端处于复位模式,研究IP内部的复位代码发现,当row_los信号为高时,复位模块将据此复位接收端,而造成row_los拉高与loopback的模式相关,可以看到近端回环没有外部光纤连接,因此row_los拉高是由于没有光信号,属于正常现象。因此在内部回环时,需要手动的将rx端复位信号row_los人为拉高,否则不能正常通信。
2.对端读写程序
除了做环回测试意外,还可以使用开路发送的程序烧写至两个板子,这样A接收B,B接收A互相验证。通常用于验证接口模块的数据正确性会设置一个自增的顺序序列。如下面的tx模块和Rx模块,以16bit位宽为例。
Tx_module
moduletx_module(tx_clk,tx_k,tx_data,rstn);input rstn;input tx_clk;output[15:0]tx_data;output[1:0]tx_k;reg[15:0]tx_data;reg[1:0]tx_k;reg[15:0]cnt;always@(posedge tx_clkornegedge rstn)beginif(~rstn)begin tx_data<=16'h0000;tx_k<=2'b00;cnt<=16'h0000;