天天看點

VAVIDO中AURORA IPcore調用

AURORA

Aurora 協定是Xilinx公司針對高速傳輸開發的一種可裁剪的輕量級鍊路層協定,通過一條或多條串行鍊路實作兩裝置間的資料傳輸。Aurora協定可以支援流和幀兩種資料傳輸模式,以及全雙工、單工等資料通信方式,賽靈思提供8B/10B和64B/66B兩種編碼方式的IP CORE,其主要差別就是編碼效率。

下面主要介紹64B/66B AURORA。

VAVIDO中AURORA IPcore調用

64B/66B AURORA如圖所示,其是一種輕量級串行通信協定,用于裝置間通過GTH/GTX/GTY收發器進行通信的串行協定,收發兩端通過GTH/X/Y lane收發資料,支援雙工資料通信。

對于收發端的64B/66B core來說,其内部包含以下部分:

1️⃣lane logic:控制GT 收發器各個lane初始化,處理編解碼字元和錯誤檢測。

2️⃣global logic:全局邏輯監控各個logic lane防止錯誤。

3️⃣rx user interface:使用者接受資料接口。

4️⃣tx user interface:使用者發送資料接口。

VAVIDO中AURORA IPcore調用

端口描述

aurora提供兩種工作模式,其中FRAME模式可以傳輸任意大小的資料,允許被高優先級中斷,可選節流控制可以用來節流鍊路。

1️⃣ FRAME使用者接口定義如下:

VAVIDO中AURORA IPcore調用

FRAME模式提供的端口如下所示:

VAVIDO中AURORA IPcore調用

FRAME mode example:

發送資料:

VAVIDO中AURORA IPcore調用

接收資料:

VAVIDO中AURORA IPcore調用

2️⃣ STREAM使用者接口定義如下:

VAVIDO中AURORA IPcore調用

stream模式提供接口如下:

VAVIDO中AURORA IPcore調用

STREAM mode example:

發送資料:

VAVIDO中AURORA IPcore調用

接收資料:

VAVIDO中AURORA IPcore調用

IP CORE調用(streaming模式)

VAVIDO中AURORA IPcore調用
VAVIDO中AURORA IPcore調用

調用example design

aurora_64b66b_0_support
u_aurora_64b66b_0_support
     (
        // TX AXI4-S Interface
         .s_axi_tx_tdata(tx_tdata_i),
         .s_axi_tx_tvalid(tx_tvalid_i),
         .s_axi_tx_tready(tx_tready_i),


        // RX AXI4-S Interface
         .m_axi_rx_tdata(rx_tdata_i),
         .m_axi_rx_tvalid(rx_tvalid_i),

        // GT Serial I/O
         .rxp(RXP),
         .rxn(RXN),

         .txp(TXP),
         .txn(TXN),

        //GT Reference Clock Interface
        .gt_refclk1_p (GTHQ0_P),
        .gt_refclk1_n (GTHQ0_N),
        //inti clk
        .INIT_CLK_i            (INIT_CLK_i),
        //drp clk 
        .drp_clk_in(DRP_CLK_IN),// (drp_clk_i),
        
        // Error Detection Interface
         .hard_err              (hard_err_i),
         .soft_err              (soft_err_i),

        // Status
         .channel_up            (channel_up_i),
         .lane_up               (lane_up_i),

        // System Interface
         //.init_clk_out          (INIT_CLK_i),
         .user_clk_out          (user_clk_i),

         .sync_clk_out(sync_clk_i),
         .reset_pb(reset_i),
         .gt_rxcdrovrden_in(gt_rxcdrovrden_i),
         .power_down(power_down_i),
         .loopback(loopback_i),
         .pma_init(gt_reset_i),
         .gt_pll_lock(gt_pll_lock_i),
        // .drp_clk_in(DRP_CLK_IN),// (drp_clk_i),
     // ---------- AXI4-Lite input signals ---------------
         .s_axi_awaddr(s_axi_awaddr_i),
         .s_axi_awvalid(s_axi_awvalid_i),
         .s_axi_awready(s_axi_awready_i),
         .s_axi_awaddr_lane1(s_axi_awaddr_lane1_i),
         .s_axi_awvalid_lane1(s_axi_awvalid_lane1_i),
         .s_axi_awready_lane1(s_axi_awready_lane1_i),
         .s_axi_awaddr_lane2(s_axi_awaddr_lane2_i),
         .s_axi_awvalid_lane2(s_axi_awvalid_lane2_i),
         .s_axi_awready_lane2(s_axi_awready_lane2_i),
         .s_axi_awaddr_lane3(s_axi_awaddr_lane3_i),
         .s_axi_awvalid_lane3(s_axi_awvalid_lane3_i),
         .s_axi_awready_lane3(s_axi_awready_lane3_i),
         .s_axi_wdata(s_axi_wdata_i),
         .s_axi_wstrb(s_axi_wstrb_i),
         .s_axi_wvalid(s_axi_wvalid_i),
         .s_axi_wready(s_axi_wready_i),
         .s_axi_bvalid(s_axi_bvalid_i),
         .s_axi_bresp(s_axi_bresp_i),
         .s_axi_bready(s_axi_bready_i),
         .s_axi_wdata_lane1(s_axi_wdata_lane1_i),
         .s_axi_wstrb_lane1(s_axi_wstrb_lane1_i),
         .s_axi_wvalid_lane1(s_axi_wvalid_lane1_i),
         .s_axi_wready_lane1(s_axi_wready_lane1_i),
         .s_axi_bvalid_lane1(s_axi_bvalid_lane1_i),
         .s_axi_bresp_lane1(s_axi_bresp_lane1_i),
         .s_axi_bready_lane1(s_axi_bready_lane1_i),
         .s_axi_wdata_lane2(s_axi_wdata_lane2_i),
         .s_axi_wstrb_lane2(s_axi_wstrb_lane2_i),
         .s_axi_wvalid_lane2(s_axi_wvalid_lane2_i),
         .s_axi_wready_lane2(s_axi_wready_lane2_i),
         .s_axi_bvalid_lane2(s_axi_bvalid_lane2_i),
         .s_axi_bresp_lane2(s_axi_bresp_lane2_i),
         .s_axi_bready_lane2(s_axi_bready_lane2_i),
         .s_axi_wdata_lane3(s_axi_wdata_lane3_i),
         .s_axi_wstrb_lane3(s_axi_wstrb_lane3_i),
         .s_axi_wvalid_lane3(s_axi_wvalid_lane3_i),
         .s_axi_wready_lane3(s_axi_wready_lane3_i),
         .s_axi_bvalid_lane3(s_axi_bvalid_lane3_i),
         .s_axi_bresp_lane3(s_axi_bresp_lane3_i),
         .s_axi_bready_lane3(s_axi_bready_lane3_i),
         .s_axi_araddr(s_axi_araddr_i),
         .s_axi_arvalid(s_axi_arvalid_i),
         .s_axi_arready(s_axi_arready_i),
         .s_axi_araddr_lane1(s_axi_araddr_lane1_i),
         .s_axi_arvalid_lane1(s_axi_arvalid_lane1_i),
         .s_axi_arready_lane1(s_axi_arready_lane1_i),
         .s_axi_araddr_lane2(s_axi_araddr_lane2_i),
         .s_axi_arvalid_lane2(s_axi_arvalid_lane2_i),
         .s_axi_arready_lane2(s_axi_arready_lane2_i),
         .s_axi_araddr_lane3(s_axi_araddr_lane3_i),
         .s_axi_arvalid_lane3(s_axi_arvalid_lane3_i),
         .s_axi_arready_lane3(s_axi_arready_lane3_i),
         .s_axi_rdata(s_axi_rdata_i),
         .s_axi_rvalid(s_axi_rvalid_i),
         .s_axi_rresp(s_axi_rresp_i),
         .s_axi_rready(s_axi_rready_i),
         .s_axi_rdata_lane1(s_axi_rdata_lane1_i),
         .s_axi_rvalid_lane1(s_axi_rvalid_lane1_i),
         .s_axi_rresp_lane1(s_axi_rresp_lane1_i),
         .s_axi_rready_lane1(s_axi_rready_lane1_i),
         .s_axi_rdata_lane2(s_axi_rdata_lane2_i),
         .s_axi_rvalid_lane2(s_axi_rvalid_lane2_i),
         .s_axi_rresp_lane2(s_axi_rresp_lane2_i),
         .s_axi_rready_lane2(s_axi_rready_lane2_i),
         .s_axi_rdata_lane3(s_axi_rdata_lane3_i),
         .s_axi_rvalid_lane3(s_axi_rvalid_lane3_i),
         .s_axi_rresp_lane3(s_axi_rresp_lane3_i),
         .s_axi_rready_lane3(s_axi_rready_lane3_i),


    //---------------------- GTXE2 COMMON DRP Ports ----------------------
         .qpll_drpaddr_in(qpll_drpaddr_in_i),
         .qpll_drpdi_in(qpll_drpdi_in_i),
         .qpll_drpdo_out     (qpll_drpdo_out_i),
         .qpll_drprdy_out    (qpll_drprdy_out_i),
         .qpll_drpen_in      (qpll_drpen_in_i),
         .qpll_drpwe_in      (qpll_drpwe_in_i),
        // .INIT_CLK_i                            (INIT_CLK_i),
         //.init_clk_n                            (1'b0),
         .link_reset_out                        (link_reset_i),
         .mmcm_not_locked_out                   (pll_not_locked_i),

         .sys_reset_out                            (system_reset_i),
         .tx_out_clk                               (tx_out_clk_i)
     );

           

時鐘端口描述

VAVIDO中AURORA IPcore調用

複位端口描述

VAVIDO中AURORA IPcore調用

資料端口描述

VAVIDO中AURORA IPcore調用