基于FPGA的SRIO核的使用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1,SRIO概述
Rapid IO分為并行Rapid IO標(biāo)準(zhǔn)和串行Rapid IO標(biāo)準(zhǔn),串行RapidIO是指物理層采用串行差分模擬信號(hào)傳輸?shù)腞apidIO標(biāo)準(zhǔn),又稱SRIO。
Rapid IO協(xié)議由邏輯層、傳輸層、物理層構(gòu)成。
邏輯層定義了所有協(xié)議和包格式。這是對(duì)終端進(jìn)行初始化和完成傳送的很有必要的信息。對(duì)外的用戶接口;只要業(yè)務(wù)有:直接IO/DMA和消息傳遞;用戶主要通過操作邏輯層對(duì)外的用戶接口,實(shí)現(xiàn)通信。
傳輸層為數(shù)據(jù)包從一個(gè)終端到另一個(gè)終端通道的必要信息;基于包交換的互聯(lián)技術(shù),定義了包交換的路由和尋址機(jī)制;Rapid IO支持8bit/16bit器件ID。因此最多可容納256或65536個(gè)器件;與以太網(wǎng)類似,支持廣播,組播,單播;
物理層描述了設(shè)備之間接口協(xié)議,例如包傳裝置,流量控制,電特性及低級(jí)錯(cuò)誤管理等,包括 1X/4X。
2,Xilnx SRIO IP
SRIO核核帶寬支持x1, x2,x4 。速率支持1.25G 2.5G 3.125G 5G 6.25G。
2.1 SRIO系統(tǒng)架構(gòu)圖如下:
2.2 用戶接口介紹
由圖可知邏輯層對(duì)外的接口主要有:Use,Configuration Fabric
其中user端口主要包括IO port,Messaging Port,Maintenance Port,User-Defined Port。
其中Configuration端口主要為配置端口,可根據(jù)需要進(jìn)行選擇;
IO port :包括HELLO format 和SRIO stream;
Messaging Port :可選;message 可以通過IO prot傳輸;
Maintenance Port:可選;如果配置底層寄存器需要選擇,否則可以不用;
User-Defined Port :可選;采用SRIO stream format,并擁有2個(gè)AXI4-Stream channels;
2.3 hello包解析:
在利用Xilinx的IP進(jìn)行開發(fā)時(shí),為了簡(jiǎn)化報(bào)文的解析和組包,SRIO Gen2 usesAXI4-Stream,Xilinx推出了一種簡(jiǎn)化的報(bào)文格式。
幀類型說明:
hello報(bào)頭:
hello頭解析:
2.4 時(shí)鐘關(guān)系:
3 IP配置
1,LAN配置:4X,5G,參考時(shí)鐘選擇125MHZ;
2,設(shè)備ID:可選擇8BIT或16BIT;可根據(jù)互聯(lián)設(shè)備選擇;然后配置。
3,數(shù)據(jù)流控制:發(fā)送控制器可發(fā)送也可接收,接收控制器只可接收;根據(jù)項(xiàng)目需求選擇了發(fā)送;
所有事事務(wù)類型介紹見2.3所述hello幀解析;
1,源端口:模塊作為源設(shè)備,支持事務(wù)配置;根據(jù)需要選擇了Write和Doorbell兩中類型的hello。即IP模塊支持發(fā)送這兩種數(shù)據(jù)報(bào);
2,目的端口:如過IP作為目標(biāo)設(shè)備,支持事務(wù)配置;根據(jù)需要選擇了Write和Doorbell,Streaming-Writr三中類型的hello。即IP模塊支持接收這兩種數(shù)據(jù)報(bào);
3,是否選擇維護(hù)功能:配置否;
IO port選擇:IO數(shù)據(jù)端口有兩種,一種condensed IO,一種initiator/target 。
condensed I/O:接收,發(fā)送共用一個(gè)IO通道;
initiator/target :發(fā)送,接收使用獨(dú)立的IO通道;
messaging/ Maintainance 配是否使用hello包的傳輸方式;
request reordering :使用該功能,利用IP核自動(dòng)對(duì)數(shù)據(jù)報(bào)發(fā)送順序排序。
3,IP例化
srio_gen2_0 srio_gen2_0 ( .sys_clkp (REFCLK_SRIO0_P ), .sys_clkn (REFCLK_SRIO0_N ), .sys_rst (srio_reset ),//sys_reset ),//(1'b0),// .log_clk_out (SRIO_CLK ), .phy_clk_out (), .gt_clk_out (), .gt_pcs_clk_out (), .drpclk_out (), .refclk_out (), .clk_lock_out (), .cfg_rst_out (), .log_rst_out (), .buf_rst_out (), .phy_rst_out (), .gt_pcs_rst_out (), .gt0_qpll_clk_out (), .gt0_qpll_out_refclk_out (), .srio_rxn0 (SRIO_A_RX_N [0]), .srio_rxp0 (SRIO_A_RX_P [0]), .srio_rxn1 (SRIO_A_RX_N [1]), .srio_rxp1 (SRIO_A_RX_P [1]), .srio_rxn2 (SRIO_A_RX_N [2]), .srio_rxp2 (SRIO_A_RX_P [2]), .srio_rxn3 (SRIO_A_RX_N [3]), .srio_rxp3 (SRIO_A_RX_P [3]), .srio_txn0 (SRIO_A_TX_N [0]), .srio_txp0 (SRIO_A_TX_P [0]), .srio_txn1 (SRIO_A_TX_N [1]), .srio_txp1 (SRIO_A_TX_P [1]), .srio_txn2 (SRIO_A_TX_N [2]), .srio_txp2 (SRIO_A_TX_P [2]), .srio_txn3 (SRIO_A_TX_N [3]), .srio_txp3 (SRIO_A_TX_P [3]), //主要端口 .s_axis_ireq_tvalid (AXIs_Sireq_tvalid ), .s_axis_ireq_tready (AXIs_Sireq_tready ), .s_axis_ireq_tlast (AXIs_Sireq_tlast ), .s_axis_ireq_tdata (AXIs_Sireq_tdata ),//[63:0] .s_axis_ireq_tkeep (AXIs_Sireq_tkeep ),//[7:0] .s_axis_ireq_tuser (AXIs_Sireq_tuser ),//[31:0] //未使用 .m_axis_iresp_tvalid (), .m_axis_iresp_tready (1'b1), .m_axis_iresp_tlast (), .m_axis_iresp_tdata (),//[63:0] .m_axis_iresp_tkeep (),//[7:0] .m_axis_iresp_tuser (),//[31:0] //下發(fā)命令 .m_axis_treq_tvalid (AXIs_Streq_tvalid ), .m_axis_treq_tready (AXIs_Streq_tready ), .m_axis_treq_tlast (AXIs_Streq_tlast ), .m_axis_treq_tdata (AXIs_Streq_tdata ),//[63:0] .m_axis_treq_tkeep (AXIs_Streq_tkeep ),//[7:0] .m_axis_treq_tuser (AXIs_Streq_tuser ),//[31:0] //未使用 .s_axis_tresp_tvalid ('b0), .s_axis_tresp_tready (), .s_axis_tresp_tlast ('b0), .s_axis_tresp_tdata ('b0),//[63:0] .s_axis_tresp_tkeep ('b0),//[7:0] .s_axis_tresp_tuser ('b0),//[31:0] //測(cè)試信號(hào) .sim_train_en ('b0), .force_reinit ('b0), .phy_mce ('b0), .phy_link_reset ('b0), .phy_rcvd_mce (), .phy_rcvd_link_reset (), .phy_debug (),//[223:0] .gtrx_disperr_or (ot_gtrx_disperr_or), .gtrx_notintable_or (ot_gtrx_notintable_or), .port_error (ot_port_error), .port_timeout (ot_port_timeout),//[23:0] .srio_host (), .port_decode_error (), .deviceid (SRIO_dev_ID ),//[15:0] .idle2_selected (), .phy_lcl_master_enable_out (), .buf_lcl_response_only_out (), .buf_lcl_tx_flow_control_out (), .buf_lcl_phy_buf_stat_out (),//[5:0] .phy_lcl_phy_next_fm_out (),//[5:0] .phy_lcl_phy_last_ack_out (),//[5:0] .phy_lcl_phy_rewind_out (), .phy_lcl_phy_rcvd_buf_stat_out (),//[5:0] .phy_lcl_maint_only_out (), .port_initialized (SRIO_state_port_init ), .link_initialized (SRIO_state_link_init ), .idle_selected (), .mode_1x () );





