verilog实现光纤通信

为什么要使用光纤做数据传输?

 

光纤传输需要哪些硬件支持?

光模块和光纤。

 

发送速率:写入100MHz,发送频率 = 收发器输出时钟频率。

发送数据size:32*256  (位宽*深度)

 

同步脉冲对光纤数据传输的意义是什么?

 

GTP、GTX、GTH以及GTZ四种串行高速收发器,四种收发器主要区别是支持的线速率不同。

GTX有QPLL和CPLL。

我们采用的GTH串行收发器,线速率10Gb/s

 

光纤传输的协议是什么?如何打包一个数据帧?

代码由哪几个模块组成?每个模块的作用是什么?

测试数据模块(非必须):生成测试数据

 

同步头的作用是什么?

 

数据传输主要解决的问题由哪几个?

串并转换,速率匹配,带宽匹配。

数据包包含一个帧头和两个帧头的区别是什么?

 

生产发送的数据包:

数据包包含什么?

一个帧头或者两个帧头+数据包。

FIFO里面的数据发完了,就发空闲码。

 

几大模块:

1个同步帧头和2个同步帧头的区别是什么?

init Ctrl:生成同步数、第一K码,第二K码。

Pulse_Generate:生成同步脉冲。

Gt_Mode:收发器模块,负责数据的发送接收。

Fiber_Control:生产数据(要发送的数据)。

  两路K码同时发送,一路发送数据的帧头,一路控制集合。K码可能发两次,也可能发一次,根据你的选择来订。

  发送完K码,发数据,发送完数据发空闲码。

always@(posedge Tx_Clk)begin
    if( p2_rst || ~p2_tx_ena)begin
        Tx_Ctrldet <= Idle_K;
        Tx_Dataout <= Idle_D;
        txfifo_ren <='d0;
    end else if(p1_head_flag_rise) begin
        Tx_Ctrldet <= Fr_K;
        Tx_Dataout <= Fr_D;
        txfifo_ren <= 'd0;
    end else if(p2_sync_num && p2_head_flag_rise)begin
        Tx_Ctrldet <= Fr_K1;
        Tx_Dataout <= Fr_D1;
        txfifo_ren <= 'd1;
    end else begin
        Tx_Ctrldet <= txfifo_ept ? Idle_K : 'd0;
        Tx_Dataout <= txfifo_ept ? Idle_D : txfifo_dout;
        txfifo_ren <= head_flag_rise ? 'd0 : 'd1;
    end
end

Data_Test:生产测试数据。

 

posted @ 2021-11-05 16:10  CN海盗船长  阅读(329)  评论(0编辑  收藏  举报