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:生产测试数据。