第一范文网 - 专业文章范例文档资料分享平台

FPGA aurora_8b10b光通信

来源:用户分享 时间:2025/6/26 5:09:04 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

常州 / Kintex-7修炼秘籍2018版GTX通信

Step7:本步骤会提示选择路径,读者可以自己定义自己的路径

Step8:一切生成完成后的文件

1.5 代码分析

1.5.1 代码功能概述

1)Aurora_8b10b_exdes.v 此代码是顶层文件调用了各个子模块。 2)Aurora_8b10b.xci此代码就是我们刚才创建的IPCORE.

第 49 页 共 75 页

常州 / Kintex-7修炼秘籍2018版GTX通信篇

3)Aurora_8b10b_ll_to_axi_exdes.v实现了旧代码(虽然现在AXI总线大行其道,但是我们会发现很多DEMO中是旧代码转AXI协议,估计XILINX公司为了省事,毕竟写好的模块没必要重新写一次)到AXI4总线接口的转换。 4)Aurora_8b10b_frame_gen.v产生测试数据并且通过TX接口发送出去 5)Aurora_8b10b_axi_to_ll_exdes.v把AXI接口转换成旧接口

6)Aurora_8b10b_frame_check.v是接收端口,接收到数据并且进行检测 7) vio_7seriers.xci 是虚拟IO 一种调试用的IP可以实时修改一些变量的参数 8) Ila_7series.xci 是debug IP 功能就是内嵌的逻辑分析仪

9) aurora_8b10b_cdc_sync_exdes.v 文件是VIO 虚拟IO和via debug 内嵌逻辑分析仪的同步程序 下面仅就关键的代码做分析

1.5.2 Aurora_8b10b_frame_gen.v

FRAME_GEN模块为遵循AXI4-Stream协议的PDU,UFC和NFC接口中的每一个生成用户流量。 该

模块包含使用具有特定初始值的线性反馈移位寄存器(LFSR)的伪随机数生成器来生成可预测的数据序列。 FRAME_CHECK模块使用此数据序列来验证Aurora数据通道的完整性。 模块输入为user_clk,reset和channel_up。

这里的设计从IPCORE设置向导可以看到我们没有配置UFC或者NFC流控制接口。

第 50 页 共 75 页

常州 / Kintex-7修炼秘籍2018版GTX通信篇

module aurora_8b10b_FRAME_GEN (

// User Interface TX_D,

TX_REM, TX_SOF_N, TX_EOF_N, TX_SRC_RDY_N, TX_DST_RDY_N,

// System Interface USER_CLK, RESET, CHANNEL_UP );

//*****************************Parameter Declarations****************************

//***********************************Port Declarations*******************************

// User Interface output [0:15] TX_D; output TX_REM; output TX_SOF_N; output TX_EOF_N; output TX_SRC_RDY_N; input TX_DST_RDY_N;

// System Interface input USER_CLK; input RESET; input CHANNEL_UP;

//***************************External Register Declarations***************************

reg TX_SRC_RDY_N; reg TX_SOF_N; reg TX_EOF_N;

//***************************Internal Register Declarations***************************

reg [0:15] data_lfsr_r; reg [0:7] frame_size_r; reg [0:7] bytes_sent_r; reg [0:3] ifg_size_r;

//State registers for one-hot state machine reg idle_r;

reg single_cycle_frame_r;

第 51 页 共 75 页

常州 / Kintex-7修炼秘籍2018版GTX通信篇

reg sof_r;

reg data_cycle_r; reg eof_r;

wire reset_c;

//*********************************Wire Declarations**********************************

wire ifg_done_c;

//Next state signals for one-hot state machine wire next_idle_c;

wire next_single_cycle_frame_c; wire next_sof_c;

wire next_data_cycle_c; wire next_eof_c;

wire dly_data_xfer; reg [4:0] channel_up_cnt;

//*********************************Main Body of Code**********************************

always @ (posedge USER_CLK) begin

if(RESET)

channel_up_cnt <= `DLY 5'd0; else if(CHANNEL_UP) if(&channel_up_cnt)

channel_up_cnt <= `DLY channel_up_cnt; else

channel_up_cnt <= `DLY channel_up_cnt + 1'b1; else

channel_up_cnt <= `DLY 5'd0; end

assign dly_data_xfer = (&channel_up_cnt);

//Generate RESET signal when Aurora channel is not ready assign reset_c = RESET || !dly_data_xfer;

//______________________________ Transmit Data __________________________________ //Generate random data using XNOR feedback LFSR //随机数发生器

always @(posedge USER_CLK) if(reset_c) begin

data_lfsr_r <= `DLY 16'hABCD; //random seed value

第 52 页 共 75 页

常州 / Kintex-7修炼秘籍2018版GTX通信篇

end

else if(!TX_DST_RDY_N && !idle_r) begin

data_lfsr_r <= {!{data_lfsr_r[3]^data_lfsr_r[12]^data_lfsr_r[14]^data_lfsr_r[15]}, data_lfsr_r[0:14]}; end

//Connect TX_D to the DATA LFSR

assign TX_D = {1{data_lfsr_r}};

//Tie DATA LFSR to REM to generate random words assign TX_REM = data_lfsr_r[0:0];

//Use a counter to determine the size of the next frame to send //frame_size_r 帧计数同时也是每一次帧发送的最大数据个数 always @(posedge USER_CLK) if(reset_c)

frame_size_r <= `DLY 8'h00;

else if(single_cycle_frame_r || eof_r)// 一个循环的开始或者一帧结束计数 frame_size_r <= `DLY frame_size_r + 1;

//Use a second counter to determine how many bytes of the frame have already been sent //bytes_sent_r计数器计数一次帧传输发送的最大数据个数 always @(posedge USER_CLK) if(reset_c)

bytes_sent_r <= `DLY 8'h00; else if(sof_r)

bytes_sent_r <= `DLY 8'h01; else if(!TX_DST_RDY_N && !idle_r)

bytes_sent_r <= `DLY bytes_sent_r + 1;

//Use a freerunning counter to determine the IFG //这个就是一个计数器用来控制ifg_done_c这个变量 always @(posedge USER_CLK) if(reset_c)

ifg_size_r <= `DLY 4'h0; else

ifg_size_r <= `DLY ifg_size_r + 1;

//IFG is done when ifg_size register is 0

assign ifg_done_c = (ifg_size_r == 4'h0);

//_____________________________ Framing State machine______________________________ //Use a state machine to determine whether to start a frame, end a frame, send //data or send nothing

`DLY 第 53 页 共 75 页

搜索更多关于: FPGA aurora_8b10b光通信 的文档
FPGA aurora_8b10b光通信.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1lzf89yucy1wxgu8k8be9y6ym8c7hv00mvl_10.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top