Aurora 64B/66B 设计,仿真验证数据传输速率

项目需求:要求使用Aurora协议,采集光口传输四通道传输的数据。

环境:Vivado 2017.4

器件:Kintex-7      xc7k325tffg676-2

一、创建新的空工程

对应器件选型来创建Aurora_test的工程。

略。

二、添加IP core

 三、配置IP

xilinx官方文档pg074有对应每一个选项下的介绍,采用简单粗暴的stearming式传输。

四、IP核例化

`timescale 1ns / 1ps

module Aurora_test
(                    
       sys_clk_p       ,
       sys_clk_n       ,
       sys_rst_n
   
       GTH_MCLK0_P     ,
       GTH_MCLK0_N     ,

       txp            ,
       txn            ,
       rxp            ,
       rxn )
   input   wire                 sys_rst_p      ;   
   input   wire                 sys_clk_n      ;
   input   wire                 sys_clk_n      ;
   input   wire                 GTH_MCLK0_P    ;
   input   wire                 GTH_MCLK0_N    ;   
   output  wire   [3:0]         txp            ;
   output  wire   [3:0]         txn            ;
   input   wire   [3:0]         rxp            ;
   input   wire   [3:0]         rxn            ;  


reg         [31:0]          s_axi_tx_tdata      ;
reg                         s_axi_tx_tvalid     ;
wire                        s_axi_tx_tready     ;
wire        [255:0]         m_axi_rx_tdata      ;//to ddr4 to pcie
wire                        m_axi_rx_tvalid     ; 
wire                        hard_err            ;
wire                        soft_err            ;
wire                        channel_up          ;
wire                        lane_up             ;
wire                        reset               ;
wire                        gt_reset            ;//user_rst
wire        [ 3:0]          loopback            ;                      
wire                        drpclk_in           ;
wire        [ 8:0]          drpaddr_in          ;
wire                        drpen_in            ;
wire        [15:0]          drpdi_in            ;
wire                        drprdy_out          ;
wire        [15:0]          drpdo_out           ;
wire                        drpwe_in            ;
wire                        tx_lock             ;
wire                        tx_resetdone_out    ;
wire                        rx_resetdone_out    ;
wire                        link_reset_out      ;
wire                        init_clk_in         ;
wire                        user_clk_out        ;//user_clk  to wirte ddr4  
wire                        pll_not_locked_out  ;  
wire                        sys_reset_out       ;   
wire                        gt_reset_out        ;  
wire                        gt_refclk1_out      ;  
wire                        gt0_pll0refclklost_out; 
wire                        quad1_common_lock_out;  
wire                        gt0_pll0outclk_out  ;    
wire                        gt0_pll1outclk_out  ;    
wire                        gt0_pll0outrefclk_out;  
wire                        gt0_pll1outrefclk_out;  
wire                        locked              ;
reg         [10:0]          gt_reset_cnt        ;
reg                         start_flag          ;
reg         [31:0]          data_cnt            ;
reg         [11:0]          err_cnt             ; 
wire                        mmcm_not_locked_out ;      

reg                        channel_up_r         ;
reg                        lane_up_r            ;
reg         [23:0]         pma_init_cnt         ;        



assign reset = (pma_init_cnt== 24'hFFFFFF) ? 0:1;
//assign sys_rst_n = ~gt_reset;
assign gt_reset = (pma_init_cnt>= 24'h8FFFFF) ? 0:1;

always @(posedge user_clk_out) begin
    if(~sys_rst_n)begin
        pma_init_cnt <= 24'b0;
    end
    else if(pma_init_cnt< 24'hFFFFFF)
        pma_init_cnt <= pma_init_cnt + 1'b1;
    else if(pma_init_cnt>= 24'hFFFFFF)
        pma_init_cnt <= pma_init_cnt;    
     else
        pma_init_cnt <= pma_init_cnt;                    
end

/*************ip 例化****************/
aurora_64b66b_0 inst_aurora
     (
       .s_axi_tx_tdata         (s_axi_tx_tdata),
       .s_axi_tx_tvalid        (s_axi_tx_tvalid),
       .s_axi_tx_tready        (s_axi_tx_tready),
       .m_axi_rx_tdata         (m_axi_rx_tdata),
       .m_axi_rx_tvalid        (m_axi_rx_tvalid),
       .rxp                    (rxp),
       .rxn                    (rxn),
       .txp                    (txp),
       .txn                    (txn),
       .hard_err               (hard_err),
       .soft_err               (soft_err),
       .channel_up             (channel_up),
       .lane_up                (lane_up),       
       .user_clk_out           (user_clk_out),//dushuju
       .sync_clk_out           (),

       .reset_pb               (reset),
       .gt_rxcdrovrden_in      (1'b0),
       .power_down             (1'b0),
       .loopback               (loopback),
       .pma_init               (gt_reset), //gt_reset
       .gt0_drpdo              (), //output
       .gt0_drprdy             (), //output
       .gt0_drpaddr            (9'b0), //
       .gt0_drpdi              (16'b0),
       .gt0_drpen              (1'b0),
       .gt0_drpwe              (1'b0),
       .init_clk               (clk100m),   //参考时钟
       .link_reset_out         (link_reset_out),
       .gt_pll_lock            (),
       .gt_refclk1_p           (GTH_MCLK0_P),
       .gt_refclk1_n           (GTH_MCLK0_N),
       .gt_refclk1_out         (),
       .gt_powergood                      (),
       .gt_qpllclk_quad1_out	          (),
       .gt_qpllrefclk_quad1_out           (),
       .gt_qplllock_quad1_out             (),
       .gt_qpllrefclklost_quad1_out       (),
       .sys_reset_out		              (),
       .mmcm_not_locked_out          	  (),
       .gt_reset_out		              (),
       .tx_out_clk		                  ()
     );

   

五、IP core仿真

 右击添加的IP ,打开IP的Example Design。Run simulation之后,等待仿真完毕,添加这两个例化信号:

 重新仿真一次,我的仿真过程有点慢不知道是什么原因,等待一段时间之后,IP的仿真波形如下:

 找到TX_D和RX_D,这两个信号代表着在PL端传输的数据,添加两根参考线,可以得到TX_D一个数据传输所用的时间6.44ns。

六、仿真速率的计算

1s传输多少个字节:1s ÷ 6.44ns = 155,279,503.1055901 个

一个字节根据协议在数据通道传输是66位:

用上面的字节数在乘上66 bit = 10,248,447,204.96894 bps ≈ 10.25Gbps

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值