当前位置:首页 > > ZYNQ
		


1,SRIO概述


Rapid IO分为并行Rapid IO标准和串行Rapid IO标准,串行RapidIO是指物理层采用串行差分模拟信号传输的RapidIO标准,又称SRIO。


Rapid IO协议由逻辑层、传输层、物理层构成。


逻辑层定义了所有协议和包格式。这是对终端进行初始化和完成传送的很有必要的信息。对外的用户接口;只要业务有:直接IO/DMA和消息传递;用户主要通过操作逻辑层对外的用户接口,实现通信。


传输层为数据包从一个终端到另一个终端通道的必要信息;基于包交换的互联技术,定义了包交换的路由和寻址机制;Rapid IO支持8bit/16bit器件ID。因此最多可容纳256或65536个器件;与以太网类似,支持广播,组播,单播;


物理层描述了设备之间接口协议,例如包传装置,流量控制,电特性及低级错误管理等,包括 1X/4X。


2,Xilnx SRIO IP


SRIO核核带宽支持x1, x2,x4 。速率支持1.25G 2.5G  3.125G 5G 6.25G。


2.1 SRIO系统架构图如下:



2.2 用户接口介绍



由图可知逻辑层对外的接口主要有:Use,Configuration Fabric


其中user端口主要包括IO port,Messaging Port,Maintenance Port,User-Defined Port。


其中Configuration端口主要为配置端口,可根据需要进行选择;


IO port :包括HELLO format 和SRIO stream;


Messaging Port :可选;message 可以通过IO prot传输;


Maintenance Port:可选;如果配置底层寄存器需要选择,否则可以不用;


User-Defined Port :可选;采用SRIO stream format,并拥有2个AXI4-Stream channels;


2.3 hello包解析:


在利用Xilinx的IP进行开发时,为了简化报文的解析和组包,SRIO Gen2 usesAXI4-Stream,Xilinx推出了一种简化的报文格式。


帧类型说明:





hello报头:



hello头解析:




2.4 时钟关系:


3 IP配置


1,LAN配置:4X,5G,参考时钟选择125MHZ;


2,设备ID:可选择8BIT或16BIT;可根据互联设备选择;然后配置。


3,数据流控制:发送控制器可发送也可接收,接收控制器只可接收;根据项目需求选择了发送;



所有事事务类型介绍见2.3所述hello帧解析;


1,源端口:模块作为源设备,支持事务配置;根据需要选择了Write和Doorbell两中类型的hello。即IP模块支持发送这两种数据报;


2,目的端口:如过IP作为目标设备,支持事务配置;根据需要选择了Write和Doorbell,Streaming-Writr三中类型的hello。即IP模块支持接收这两种数据报;


3,是否选择维护功能:配置否;



IO port选择:IO数据端口有两种,一种condensed IO,一种initiator/target 。


condensed I/O:接收,发送共用一个IO通道;


initiator/target :发送,接收使用独立的IO通道;


messaging/ Maintainance 配是否使用hello包的传输方式;



request reordering :使用该功能,利用IP核自动对数据报发送顺序排序。



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] //下发命令 .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]  //测试信号 .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                        () );
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭