精华内容
下载资源
问答
  • 高速接口----JESD 204B(1)

    千次阅读 2021-10-11 14:05:22
    最近两周在做一些关于高速ADC的东西,也算是接触到了一些新的东西,做技术的,就是要不断地学习新的东西才可以啊。调试的平台是zcu102+daq3。daq3是ADI推出的一个高速AD和DA的评估板。上面主要的芯片是ADC芯片AD9680...

    前言

    最近两周在做一些关于高速ADC的东西,也算是接触到了一些新的东西,做技术的,就是要不断地学习新的东西才可以啊。调试的平台是zcu102+daq3。daq3是ADI推出的一个高速AD和DA的评估板。上面主要的芯片是ADC芯片AD9680,DAC芯片AD9152,时钟芯片AD9528。ADI的产品有一个好处就是开源的东西多,能够大大地减少手册阅读的时间。

    1. JESD204B 基本协议

    其实使用到ADI的东西,基本也就没有太去关注协议这些东西,只是简简单单的有个了解就行,在实际调试的时候,用的也是Xilinx的评估版的JESD的IP,基本不需要自己做什么工作就能够把整个系统运行起来了。
    下面这个图是AD9680的一个基本的结构框图,可以看到这个ADC的作用就对输入的信号进行采集量化,在JESD204B链路建立之后,按照特定的格式组成数据帧,然后将数据帧通过JESD的接口将数据发送到FPGA上。其实基于JESD 204B的ADC和DAC在使用的时候,只需要去弄清楚链路是如何建立的就基本宣告JESD的驱动成功了。
    在这里插入图片描述

    1.1 JESD204B链路参数

    在JESD 204B的链路建立的过程中,最重要就是需要去关注链路所需要的参数,这些参数是后面对FPGA当中JESD IP的配置和对AD9680配置十分重要的,JESD IP的手册可以参考PG066和PG198这两个手册。
    无论是JESD的发送还是接收,关于链路建立的关键参数都是一致的,如下面从AD9680的手册当中截取出来的一些参数。
    在这里插入图片描述
    在这里插入图片描述

    通过这些参数能够确定JESD链路当中所需要使用到的LANE的数量,JESD该如何来进行组帧,组成的数据帧当中哪些位是数据位哪些位是控制位,组成的数据帧是对应哪一个ADC当中的哪一个转换器的。举个基于AD9680和FPGA进行全带宽传输的简单的例子,
    L=4,M=2,F=2, N’=16, N=14, CS=2, K=32对应到JESD的链路当中就是
    L=4需要4个lane来建立JESD 204链路,从FPGA角度来看就是需要使用到4个高速收发器接口。
    M=2产生ADC数据的数据来源有两个,如下面的图中所示
    N’=16表示一个采样点中包含16bit数据,N=14表示ADC的采样精度为14bit,CS=2表示在传输JESD的数据的时候有两位的控制位,这样就能够很好地理解N’,N和CS的关系了。一般情况下一个采样点包含了具体的数据和控制位。
    F=2表示一个数据帧当中有两个字节的数据,这两个字节刚好能够表示一个采样点。
    K=32表示一个多帧当中有32个数据帧,通过前面的F参数,不难计算出一个多帧包含有64个字节的数据。
    上面只是一个对JESD链路当中参数的一个简单的介绍,在实际的使用的时候,就是多看手册,弄清楚每个参数在具体的应用当中的作用就OK了。
    在这里插入图片描述下图是一个ADC采样点经采样后从传输层经过数据链路层,最终经过物理层进行传输的过程,在这个过程中,可以看到在具体的数据帧党总,上面介绍的一些关键的参数的具体的表现形式。
    在这里插入图片描述

    1.2 JESD 204B的分层

    就像学习以太网的时候,要先了解一下OSI的涉及参考模型一样,在JESD当中,也有一个参考的数据分层的物理模型,下图所示的就是一个简单的JESD 204B的分层。主要有三个层级,分别是传输层,数据链路层和物理层。
    在这里插入图片描述

    • 传输层: 传输层负责将庶几乎打包映射到有字节组成的JESD204B数据帧当中。传输层的映射关系是由链路层的设置的参数来决定的。
    • 数据链路层:数据链路层负责数据传输的底层的功能,这些功能包括对数据进行加扰,插入用于多芯片同步,通道对齐等控制字符,完成8B10B转换,发送初始通道对齐序列(ILAS)等。ILAS是一个比较重要的序列,这个序列当中包含了链路的一些信息,在接收方当中,可以通过这个序列来知道当前链路的一个配置的状态。
    • 物理层:物理层就是负责将数据进行传输的层,在我这里也就是指的FPGA和AD9680之间具体的高速接口了。

    1.3 链路建立的过程

    在我进行JESD204B的调试过程中,我认为最重要的一步就是链路建立的过程,只要能够正确地建立起JESD204B链路的link,那么后续的工作就比较简单了。因此首先需要弄清楚链路建立的一个过程。
    在JESD204B subclass1中链路的建立主要包含一下几个步骤:

    1. Code Group Synchronization (CGS) and SYNCINB±
    2. Initial Lane Alignment Sequence (ILAS)
    3. User Data and Error Detection

    1.3.1 CGS & SYNC

    在CSG阶段,简而言之就是一个同步的阶段,如果对Xilinx的高速接口有一定的了解的话,就知道高速接口当中是如何实现数据和时钟的恢复和数据的对齐的,在CSG阶段,JESD的发送器会不停的发送/K28.5/字符。在JESD的接收器当中,就会根据所接收到的数据来检测是否接收到了/K28.5/字符,如果检测到了,就会使SYNC信号拉高,从而提示JESD发送器,当前已经检测到了/K28.5/也即已经同步上了。
    这里需要提一下SYNC信号,在前面数据链路层当中,我们可以在数据链路层当中,有两个用于控制数据链路层的信号,分别是sysref和sync。JESD204B子类1是否同步上,跟这两个信号有着很紧密的关系。
    举个简单的例子,ADC 转换器AD9680作为JESD的发送方,FPGA作为JESD的接收方,两者一个共同的参考信号sysref,链路是否建立是根据LMFC与sysref共同来决定的,作为数据的接收方,FPGA若成功检测到当前已经同步上,需要拉高sync,告诉AD9680当前FPGA已经能够同步了,数据的发送方才会进行下一步的操作。若sync一直不拉高,那么链路的建立将会一直处于CGS阶段,在JESD当中也就只能接收到/K28.5/(0xBC).
    在这里插入图片描述
    JESD常用的字符如下:
    在这里插入图片描述

    1.3.2 ILAS 阶段

    在这个阶段当中,JESD的发送方,会发送JESD链路的配置信息。ILAS阶段一般包含4个多帧。每个多帧以/R/字符表示开始,以/A/字符表示多帧结束。
    在第一个多帧当中,填充的主要是0~255的递增数。
    在第二个多帧当中,以/R/字符表示开始,然后发送一个Q字符,用于表示开始发送链路配置数据,从第三个字符开始发送链路配置数据,链路配置数据一共14个字符,其余地方用递增数进行填充。
    第三个和第四个多帧,结构和第一个多帧一致。
    在这里插入图片描述

    1.3.3 用户数据

    在ILAS阶段完成之后,就可以进行用户数据传输了。这些东西在JESD的IP里面都已经集成地很好了,在使用IP地时候,能够大大地减轻设计的难度。

    展开全文
  • FPGA高速接口PCIe详解

    2020-12-19 11:49:21
    高速互连领域中,使用高速差分总线替代并行总线是大势所趋。与单端并行信号(PCI总线)相比,高速差分信号(PCIe总线)可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的...

    在高速互连领域中,使用高速差分总线替代并行总线是大势所趋。与单端并行信号(PCI总线)相比,高速差分信号(PCIe总线)可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的总线带宽。

    PCIe协议基础知识

    PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe总线使用了高速差分总线,并采用端到端的连接方式,因此在每一条PCIe链路中只能连接两个设备。这使得PCIe与PCI总线采用的拓扑结构有所不同。PCIe总线除了在连接方式上与PCI总线不同之外,还使用了一些在网络通信中使用的技术,如支持多种数据路由方式,基于多通路的数据传递方式,和基于报文的数据传送方式,并充分考虑了在数据传送中出现服务质量QoS (Quality of Service)问题。

    与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端。PCIe链路可以由多条Lane组成,目前PCIe链路×1、×2、×4、×8、×16和×32宽度的PCIe链路,还有几乎不使用的×12链路。

    在PCIe总线中,使用GT(Gigatransfer)计算PCIe链路的峰值带宽。GT是在PCIe链路上传递的峰值带宽,其计算公式为 总线频率×数据位宽×2。

    按照常理新一代的带宽要比上一代翻倍,PCIe3.0的原始数据传输带宽应该是10GT/s才对而实际却只有8.0GT/s。我们知道,在1.0,2.0标准中,采用的是8b/10b的编码方式,也就是说,每传输8比特有效数据,要附带两比特的校验位,实际要传输10比特数据。因此,有效带宽=原始数据传输带宽*80%。而3.0标准中,使用了更为有效的128b/130b编码方案从而避免20%带宽损失,3.0的浪费带宽仅为1.538%,基本可以忽略不计,因此8GT/s的信号不再仅仅是一个理论数值,它将是一个实在的传输值。

    PCIe总线采用了串行连接方式,并使用数据包(Packet)进行数据传输,采用这种结构有效去除了在PCI总线中存在的一些边带信号,如INTx和PME#等信号。在PCIe总线中,数据报文在接收和发送过程中,需要通过多个层次,包括事务层、数据链路层和物理层。PCIe总线的层次结构如下。

    PCIe总线的层次组成结构与网络中的层次结构有类似之处,但是PCIe总线的各个层次都是使用硬件逻辑实现的。在PCIe体系结构中,数据报文首先在设备的核心层(Device Core)中产生,然后再经过该设备的事务层(TransactionLayer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达Device Core。

    事务层(Transaction Layer)

    在PCIe总线层次结构中,事务层最易理解,同时也与系统软件直接相关。

    TLP由帧头、数据、摘要组成,7系列FPGA 开始,使用标准的 AXI4 总线协议进行通信,因此 PCIe的TLP采用AXI4-S接口协议进行传输,数据的传输以大端方式对齐(高位放在低地址)。

    头标: 长度为3或4个DW(double word),格               式和内容随事务类型变化 数据: 若该 TLP 不携带数据,那该段为空摘要: 是基于头标、数据而计算出来的CRC,               称为 ECRC,一般该段由 IP核填充,所               以用户只需处理TLP中头标和数据段

    Fmt[1:0]段 是关于头标长度和该 TLP 是否有数据在的信息:

    Type与 Fmt字段:一起用于规定事务类型、头标长度和是否有数据载荷

    Non-Posted命令:若设备发出一个Non-Posted请求,一段时间后,接收端需回复一个完成包,若不回复则可能遇到异常

    Posted命令:不需要回复完成包给发送端

    例如:发送的数据为0x4a00_0001_01a0_0004,0x01a0_0a10_0403_0201 则:Fmt是2’b10,Type 是5’b01010,判断为 3DW 带数据的完成包,0x4a00_0001_01a0_0004_01a0_0a10是头标,0x0403_0201是所带的数据。

    Length字段: 在读存储器请求报文中,表示需要从目标设备数据区域读取的数据长度;在写存储器请求报文中,表示当前报文的DataPayload长度,长度单位为DW。

    last/1st DW BE字段: PCIe总线以字节为基本单位进行数据传递,但是Length字段以DW为最小单位,该字段用于规定第一个和最后一个的有效字节的位置。

    Requester ID: 该TLP包的产生设备,的总线号(Bus Number)、设备号(Device Number)、功能号(Function Number)等

    Tag: Requester ID、Tag合起来组成Transaction ID,在同一时间段内,PCIe设备发出的每一个Non-Posted数据请求TLP,其Transaction ID必须唯一,即Tag必须唯一

    读写TLP包的格式:

    上图中的两个格式,前者是针对64位地址的读写包,后者则是针对32位地址的读写包

    完成包的格式:

    Completer ID: 该完成包的产生设备的ID号 Byte Count: 记录源设备还需要从目标设备中获得多少字节的数据才能完成全部数据传递 Lower Address: 接收端必须使用存储器读写完成TLP的Low Address 字段,识别该TLP中包含有效数据的起始地址

    事务层空间

    PCI配置空间:主要用于向系统提供设备自身的基本信息,并接受系统对设备全局状态的控制和查询(设备只有在系统软件初始化配置空间之后,才能够被其他主设备访问,当配置空间被初值化后,该设备在当前的PCI总线树上将拥有一个独立的BAR空间)

    消息空间 : 传递消息的空间

    PCIe通讯是靠发送TLP包,读写包里都会有地址信息,若FPGA向PC发送TLP 包,例如 MWr 包,那么地址信息就是PC的物理地址;若发送的是 MRd 包,那PC收到后会回复一个完成包,FPGA从完成包提取出数据即可

    PC 如何读写板卡的数据:

    PC启动时,BIOS探测PCIe设备有多少个BAR空间,每个空间有多大,然后对应为这些空间分配地址

    以上图为例,BAR2的空间大小为0x1000,PC上的起始地址为0xFDEFF000,若想通过PC访问BAR2的0x40地址,则在PC上直接访问0xFDEFF040即可,起始地址在不同的PC上是不一样的(但是偏移地址是相同的),在 FPGA 中,BAR 空间的设置,是根据用户需求在IP核里定义大小的

    发送中断

    PCIe可以发出两种中断:虚拟INTx信号线(PCI的信号)和MSI(消息)

    虚拟INTx信号线:

    发送的数据为:0x3400_0000_0100_0020, 0x0000_0000_0000_0000 则:Fmt为 2’b01,Type 为5’b10100,判断为消息请求包,Message Code 为0x20(8’b0010_0000),判断为中断(INTx)消息

    发送的数据为:0x3400_0000_0100_0024, 0x0000_0000_0000_0000时, 则:Fmt 为2’b01,Type 为 5’b10100,判断为消息请求包,Message Code 为0x24 (8’b0010_0100),判断为中断(INTx)撤销消息

    这个之后有需要的话,可以做实验测试,现阶段就先只找到这两个信号线(如图直接搜索int_(x))

    MSI中断:

    是基于消息机制的,PC启动后会为 PCIe 板卡分配消息地址,板卡发送中断的话,只需向对应的地址发送消息即可(消息内容中包含消息号,每个消息号对应在PC 端的某一地址) 注:在Xilinx平台上,中断和其他包是分开的,中断发送是非常简单的,只需要简单操作几条信号线,PCIe 核就可以自己组织需要的中断包向外发送

    PCIe的IP核

    使用环境:VIVADO 2017.4 IP核版本:7 Series FPGAs Integrated Block for PCI Express v3.3 官方文档:pg054

    IP核概览图:

    IP核接口定义: System Interface:

    PCI Express Interface:

    上图为4X模式下的,外部引脚的接口,共4组,每组都有收发信号,且收发信号线均为差分线

    Configuration Interface:

    这类信号名称一般以cfg_开头,主要用于检测PCIE终端的configuration space状态,详情见手册,此类信号在IP核上有很多很多,比如:

    其中的中断接口信号一般以cfg_interrupt开头 其中的异常报告信号一般以cfg_err_开头

    Physical Layer Interface: 此类信号一般以pl_开头,详情见手册,用于控制和检测PCIE物理层,可以改变速度、位宽等,一般不使用

    Dynamic Reconfiguration Port Interface: DRP接口,此类信号一般以pcie_drp_开头,详情见手册,用于动态配置PCIE核的寄存器,用于调试

    Debug Interface: user_和fc_开头的信号,输出系统工作状态,用于调试

    AXI4-S Interface: 以m_axis_rx_、s_axis_tx_、tx_、rx_开头,用于传输数据,详情见手册

    DMA传输模式XAPP1052官方例程解析

    xapp1052是xilinx官方给出的一个有关DMA数据传输的样例,用于PC端和FPGA端之间的DMA数据传输,虽然xapp1052并不是一个完整的DMA数据传输的终端硬件设计,但是还是有很大参考价值的 文件层次:

    主要包括PCIe硬核和应用逻辑,硬核由软件生成,应用逻辑主要包括发送引擎、接收引擎和存储器访问模块 RX_ENGINE: 用于解析IP核的数据包,负责DMA读接收数据包 TX_ENGINE: 负责DMA写发送数据包和中断控制 BMD_EP_MEM_ACCESS: 存储访问模块,包含DMA状态及控制寄存器用以控制DMA读写,这里的寄存器是以PIO的方式写入配置,在RC中设置的TLP长度、TLP数量信息等会写入到这些寄存器中 BMD_GEN2、BMD_RD_THROTTLE、BMD_TO_CTRL、BMD_CFG_CTRL:BMD的一些相关的配置和控制信号的处理模块 axi_trn_top:负责axi协议和trn协议的相互转换

    DMA写流程: 一次DMA写的过程是由FPGA的数据写入RC端的存储器中的过程,具体步骤为: 0>在RC端申请一块物理地址连续的内存,EP端准备好写数据后向RC端发送中断 1>在RC端分析中断,并向BAR0空间设置本次DMA写的TLP大小、TLP数量、写地址等,(通过PIO的方式,将带有上述信息的TLP包发送给EP端,写入FPGA的DMA控制状态寄存器中),并且启动DMA 2>根据DMA状态控制寄存器的内容,在收到DMA写启动命令后,TX引擎开始从FPGA中读取数据并按第一步设置的DMA大小数量来组装TLP包然后发送到PCIe核 3>FPGA发送完数据后通过中断等形式通知主机DMA完成,主机读取 BAR0 空间状态寄存器判断中断类型做出相应判断,同时主机从内存读出数据

    状态机: BMD_64_TX_RST_STATE:初始的复位状态,在该状态判断该进入发送完成包、存储器写和存储器读 的其中一个状态

    发送完成包: BMD_64_TX_CPLD_QW1:发送完成包 — 返回存储器地址和指定数据 BMD_64_TX_CPLD_WIT:发送完成包 — 等待完成 存储器写: BMD_64_TX_MWR_QW1:DMA存储器写请求(32bit地址),发送3DW长度的头+1DW数据 BMD_64_TX_MWR64_QW1:DMA存储器写请求(64bit地址),发送4DW长度的头 BMD_64_TX_MWR_QWN:发送剩余的数据到RC端 存储器读: BMD_64_TX_MRD_QW1:DMA存储器读请求(然后在RX引擎接收相应数据)

    DMA读流程: 一次DMA读的过程是将RC端存储空间的数据读入到FPGA中的过程,具体步骤为: 0>在RC端申请一块物理地址连续的内存,并向该内存写入数据,EP端准备好读数据后向RC端发送中断 1>在RC端分析中断,并向BAR0空间设置本次DMA读的TLP大小、TLP数量、读地址等,(通过PIO的方式,将带有上述信息的TLP包发送给EP端,并写入DMA控制状态寄存器中),并启动DMA 2>根据DMA状态与控制寄存器的内容,在收到DMA读启动命令后,在TX引擎中组装存储器读TLP包后,发送给PCIe核,RC端根据收到的存储器读包,在指定的地址读取数据后形成带数据的完成包(CPLD)返回给FPGA,FPGA在RX引擎中接收数据 3>FPGA接收完数据后通过中断形式通知主机DMA读完成,主机读取 BAR0 空间状态寄存器判断中断类型做出相应判断

    状态机: BMD_64_RX_RST:根据trn_rd[62:56]来判断包的类型: 32位地址读请求

    (BMD_MEM_RD32_FMT_TYPE) 32位地址写请求

    (BMD_MEM_WR32_FMT_TYPE) 不带数据的完成包 (BMD_CPL_FMT_TYPE) 带数据的完成包 (BMD_CPLD_FMT_TYPE)

    32位地址读请求: BMD_64_RX_MEM_RD32_QW1:解析RC端的读TLP包 — 通知TX引擎发送完成包 BMD_64_RX_MEM_RD32_WT:解析RC端的读TLP包 — 等待完成包发送完毕

    32位地址写请求 BMD_64_RX_MEM_WR32_QW1:解析RC端的写TLP包 — 写入寄存器 BMD_64_RX_MEM_WR32_WT:解析RC端的写TLP包 — 等待写寄存器完毕

    不带数据的完成包 BMD_64_RX_CPL_QW1:解析出完成包的tag,送至MEM模块

    带数据的完成包 BMD_64_RX_CPLD_QW1:解析RC端的完成包 — 获得数据 BMD_64_RX_CPLD_QWN:解析RC端的完成包 — 直至完成

    axi-trn互转: 由于7系列的PCIe核的数据是通过AXI-S协议传输的,但是XAPP1052中的信号的相关处理是对trn_信号进行处理,所以会有一个协议转换的模块

    以接收类信号为例,发送类信号类比: trn_rsrc_rdy: 表示RC端(接收的源)准备就绪 trn_rdst_rdy: 表示EP端(接收的目的)准备就绪 trn_rsrc_dsc: 表示RC端(接收的源)将当前包丢掉 trn_rsof: 接收帧开始标志,(仅在trn_rsrc_rdy低时有效) trn_reof: 接收帧结束标志,(仅在trn_rsrc_rdy低时有效) trn_rd: 接收到的数据,(仅在trn_rsrc_rdy低时有效) trn_rrem: 接收数据余数,为0表示数据在trn_rd[63:0],为1表示数据在trn_rd[63:32](仅在trn_reof 、trn_rsrc_rdy、trn_rdst_rdy同时低时有效) trn_rbar_hit[6:0]: 表示当前包在哪个BAR空间,低有效(仅在trn_rsof、trn_reof低时有效) trn_rbar_hit[0]——>BAR0 trn_rbar_hit[1]——>BAR1 trn_rbar_hit[2]——>BAR2 trn_rbar_hit[3]——>BAR3 trn_rbar_hit[4]——>BAR4 trn_rbar_hit[5]——>BAR5 trn_rbar_hit[6]——>Expansion ROM Addres

    展开全文
  • 物理层接口高速串行收发器相连。串行收发器在IP核中被设计为一个外部的例化模块以降低用户使用模型的难度。物理层接口的示意图如下图所示 物理层与Buffer层通过两个AXI4-Stream通道相连,同时物理层有一个通道的...

    目录

    原文链接:https://www.cnblogs.com/liujinggang/p/10072115.html

    一、RapidIO核概述

    二、RapidIO核接口说明

    2.1 逻辑层接口

    2.2 Buffer接口

    2.3 物理层接口

    2.4 寄存器空间

    三、使用RapidIO核

    3.1 设计指南

    3.2 时钟

    3.3 复位

    3.4 RapidIO协议简介

    四、RapidIO核配置

    五、总结

    六、参考资料


    一、RapidIO核概述

      RapidIO核的设计标准来源于RapidIO Interconnect Specification rev2.2,它支持1x,2x和4x三种模式,每通道的速度支持1.25Gbaud,2.5Gbaud,3.125Gbaud,5.0Gbaud和6.25Gbaud五种。

      RapidIO核分为逻辑层(Logical Layer),缓冲(Buffer)和物理层(Physical Layer)三个部分。其中逻辑层(Logical Layer)支持发起方(Initiator)和目标方(Target)同时操作;支持门铃事务(DOORBELL)和消息事务(MESSAGE),为维护事务(MAINTENANCE)设计了专用的端口;采用AXI4-Lite接口和AXI4-Stream接口,支持简单的握手机制去控制数据流;支持可编程的Source ID,支持16-bit的device IDs(可选)。缓冲层(Buffer)支持8,16和32包的独立可配置的TX和RX Buffer深度;支持独立的时钟,支持可选的发送数据流控制。物理层(Physical Layer)支持可配置的空闲序列1和空闲序列2;支持关键请求流(Critical Request Flow);支持多播事件。

      注意:上面的几个专业术语的解释都能在前几篇博客中找到解释,不明白的可以回过头去看看。

      RapidIO互连架构,与目前大多数流行的集成通信处理器、主机处理器和网络数字信号处理器兼容,是一种高性能、包交换的互连技术。它能够满足高性能嵌入式工业在系统内部互连中对可靠性、增加带宽,和更快的总线速度的需求。

      RapidIO标准定义为三层:逻辑层、传输层和物理层。逻辑层定义了总体协议和包格式。它包括了RapidIO设备发起和完成事务的必要信息。传输层提供了RapidIO包传输过程中的路由信息。物理层描述设备级接口细节,例如包传输机制、流控、电气特性和低级错误管理。这种划分不需要对传输层或物理层规范进行修改,就可以灵活的给逻辑层规范添加新的事务类型。

      整个RapidIO核的架构如下图所示:

     

    二、RapidIO核接口说明

      RapidIO核把三个子核封装在一起,它提供了一个高层次,低维护的接口。本节介绍了RapidIO各个子核和接口的基本功能视图。RapidIO核的顶层框图如下图所示

     

    2.1 逻辑层接口

      逻辑层(LOG)被划分成几个模块来控制并解析发送和接收数据包。逻辑层(LOG)有三个接口:用户接口(User Interface),传输接口(Transport Interface)和配置接口(Configuration Fabric Interface)。

      下图是逻辑接口的示意图

     

      用户接口包括能发起和接收包的端口。当生成IP核的时候可以配置端口的数目和事务类型,同时也能通过AXI4-Lite接口发起维护事务对本地或者远程的寄存器进行访问与配置。

      传输接口包含发送和接收两个端口,它是用来连接中间的Buffer,对于RapidIO的顶层模块来说,这两个接口不可见。

      配置接口也包含两个端口。其中配置主机端口(Configuration Master Port)用来读写本地配置空间。逻辑配置寄存器端口(LOG Configuration Register Port),它可以用来读写一部分逻辑层或传输层配置寄存器。

      对于RapidIO IP核来说,用户最需要关注的就是用户接口,下面着重介绍用户接口的相关内容。

           用户接口包含I/O端口集和三个可选的端口,三个可选的端口分别为消息端口(Messaging Port),维护端口(Maintenance Port)和用户自定义端口(User-Defined Port)。这些接口都在模块的顶层,每种事务类型都在指定的端口上传输。其中,任何支持的I/O事务例如NWRITEs,NWRITE_Rs,SWRITEs,NREADs和RESPONSEs(不包括维护事务的responses)全部都在I/O端口上发送或者接收。消息(Message)事务能在I/O端口传输或者在消息端口传输,这取决于是否在IP核的配置选择分离I/O端口与Message端口。门铃(Doorbell)事务只能在I/O端口传输,而不能在Message端口上传输。维护事务包只能在维护端口上传输。如果事务是由用户自定义的一种不支持的类型,那么这类事务就可以在用户自定义端口上传输,如果用户自定义的端口在IP核的配置中未使能,那么用户自定义的包会被丢弃。

      I/O端口(I/O Port)

      I/O端口能被配置为两种类型:Condensed I/O或Initiator/Target。这两种类型可以在IP核的配置中进行选择。I/O端口的数据流协议是AXI4-Stream协议,它支持两种类型的包格式,分别是HELLO格式与SRIO Stream格式。

      Condensed I/O端口类型减少了用于发送和接收I/O包的端口数目。它只用一个AXI4-Stream通道来发送所有类型的包,同样,也只用一个AXI4-Stream通道去接收所有类型的包。Condensed I/O端口示意图如下

     

           Initiator/Target端口类型把请求事务与响应事务分别处理,所以一共有4个AXI4-Stream通道用于I/O事务的传输。Initiator/Target端口的示意图如下图所示,其中灰色的箭头表示请求事务,黑色的箭头表示响应事务。

     

           本地设备(Local Device)生成的请求(Requests)通过ireq通道发送,远程设备(Remote Device)产生的响应包通过iresp通道接收来完成整个事务的交互过程。

           远程设备(Remote Device)生成的请求(Requests)通过treq通道接收,本地设备(Local Device)产生的响应包通过tresp通道发送来完成整个事务的交互过程。

      在顶层模块中,变量名与通道的对应关系如下:

      s_axis_ireq* 对应于ireq通道

      m_axis_iresp* 对应于iresp通道

      m_axis_treq* 对应于treq通道

      s_axis_tresp* 对应于tresp通道

    消息端口(Messaging Port)

      消息端口是一个可选的接口,消息事务既能在I/O端口上发送,也能在独立的消息端口上发送。独立的消息端口类型为Initiator/Target类型。下图是消息端口的示意图

     

      本地设备(Local Device)生成的请求(Requests)通过msgireq通道发送,远程设备(Remote Device)产生的响应包通过msgiresp通道接收来完成整个事务的交互过程。

           远程设备(Remote Device)生成的请求(Requests)通过msgtreq通道接收,本地设备(Local Device)产生的响应包通过msgtresp通道发送来完成整个事务的交互过程。

           在顶层模块中,变量名与通道的对应关系如下:

      s_axis_msgireq* 对应于msgireq通道

      m_axis_msgiresp* 对应于msgiresp通道

      m_axis_msgtreq* 对应于msgtreq通道

      s_axis_msgtresp* 对应于msgtresp通道

     

      用户自定义端口(User-Defined Port)

      用户自定义端口是一个可选的端口,它包括两个AXI4-Stream通道,一个用于发送另一个用来接收。用户自定义端口仅仅支持SRIO Stream格式的事务。下图是用户自定义端口的示意图

     

      在顶层模块中,变量名与接口的对应关系如下:

      s_axis_usrtx* 对应于user_io_tx接口

      m_axis_usrrx* 对应于user_io_rx接口

     

      维护端口(Maintenance Port)

      维护端口使用的是AXI4-Lite接口协议,AXI4-Lite接口允许用户访问本地或远程配置空间。下图是AXI4-Lite维护端口示意图

     

           上图中从右到左的黑色箭头表示请求(Requests)通道,从左到右的灰色箭头表示响应(Responses)通道。每个通道有独立的ready/valid握手信号。

     

      状态(Status)

      维用户接口的状态信号包括deviceid和port_decode_error,定义如下表所示

    信号

    方向

    描述

    deviceid[15:0]

    输出

    Base DeviceID CSR(偏移地址为0x60)寄存器的值

    port_decode_error

    输出

    此信号为高说明用户自定义端口未使能,一个不支持的事务被接收并立即丢弃。当下一个支持的事务包在任意用户接口被接收以后此信号被拉低。这个信号同步于log_clk信号

     

    2.2 Buffer接口

      Buffer的目的是对发送和接收的包进行缓冲。Buffer对于保证包发送和流控操作是非常有必要的,Xilinx提供了一个可配置的Buffer解决方案,可以在系统性能和资源利用率之间权衡选择。

      发送Buffer负责把将要发出去的事务放到队列中,并对发往物理层(PHY)的包流进行管理。接收Buffer和发送Buffer的大小可以在IP核中配置为8、16或32个包的深度。发送Buffer是一个存储和转发缓冲区,它是用来降低包到包的延迟以最大化流吞吐量。发送Buffer必须保存每个包直到包被接收方成功接收,当接收方成功接收包以后,发送Buffer才会释放包来给其他包腾出空间。当流控(Flow Control)发生时,通常会有多个未发送的包滞留在发送Buffer中,发送Buffer会根据包的类型与优先级进行重新排序,然后按照响应包先发送,请求包后发送的顺序把发送Buffer中的包依次发出去。Buffer的另一个作用是处理跨时钟域的问题,当生成IP核的时候可以根据需求添加或者移除跨时钟域逻辑。对于多通道的RapidIO来说,由于物理层的时钟在start-up场景和traindown场景是动态的,所以推荐把跨时钟域逻辑加上,这样可以保证用户逻辑工作在已知的速率上。

      接收Buffer类似于一个FIFO,它用来存储和转发接收通路上发送给逻辑层的数据。接收Buffer也包含跨时钟域逻辑,这可以保证逻辑层和物理层工作在不同的速率上,和发送Buffer一样,对于多通道RapidIO,推荐加上跨时钟域逻辑。

      所有Buffer层的接口对于RapidIO顶层都是不可见的。Buffer层示意图如下

     

    由上图可知,在Buffer层的逻辑层与物理层两侧均有两个AXI4-Stream通道,一个为发送通道,另外一个为接收通道。还有一个AXI4-Lite通道用于去配置Buffer层的配置空间。

    2.3 物理层接口

           物理层(PHY)用来处理链路训练(Link Training),初始化(Initialization)和协议(Protocol),同时还包括包循环冗余校验码(CRC)与应答标识符的插入。物理层接口与高速串行收发器相连。串行收发器在IP核中被设计为一个外部的例化模块以降低用户使用模型的难度。物理层接口的示意图如下图所示

     

           物理层与Buffer层通过两个AXI4-Stream通道相连,同时物理层有一个通道的AXI4-Lite接口与配置结构相连,可以通过这个通道访问物理层的配置空间。物理层还通过一个串行接口(Serial Interface)与串行收发器(Serial Transceivers)相连。

    2.4 寄存器空间

           RapidIO的寄存器空间如下表所示

     

     

      能力寄存器空间(Capability Register Space)

      能力寄存器空间的寄存器是只读寄存器,它们在逻辑层中实现。能力寄存器映射表如下表所示

     

      命令和状态寄存器空间(Command and Status Register Space)

      命令和状态寄存器空间的寄存器和能力寄存器一样都在逻辑层实现,命令和状态寄存器空间的映射表如下表所示

     

           寄存器空间还包括Extended Feature Space与Implementation-defined Space两种,关于这两种寄存器空间的说明请查看pg007_srio_gen2.pdf。

    三、使用RapidIO核

    3.1 设计指南

           RapidIO协议定义了七种事务类型,每种事务类型执行不同的功能。RapidIO包格式中的FTYPE字段与TTYPE字段共同确定了事务的类型,与标准RapidIO协议不同的是,RapidIO核中定义了第9类事务(FTYPE=9)——DATA STREAMING事务,它是一类带有数据负载的写事务,而标准RapidIO协议中第9类事务是保留事务。详细的对应关系如下表所示

    Ftype

    (Format Type)

    Ttype

    (Transaction Type)

    包类型

     

    功能

    0~1

    ——

    Reserve

    2

    4’b0100

    NREAD

    读指定的地址

    4’b1100

    ATOMIC increment

    先往指定的地址中传递数据,在把传递的数据加1,此操作为原子操作,不可打断

    4’b1101

    ATOMIC decrement

    先往指定的地址中传递数据,在把传递的数据减1,此操作为原子操作,不可打断

    4’b1110

    ATOMIC set

    把指定地址中的数据每个bit全部写1

    4’b1111

    ATOMIC clear

    把指定地址中的数据清0(每个bit全部清零)

    3~4

    ——

    Reserve

    5

    4’b0100

    NWRITE

    往指定的地址写数据

    4’b0101

    NWRITE_R

    往指定的地址写数据,写完成以后接收目标器件(Target)的响应

    4’b1101

    ATOMIC test/swap

    对指定地址中的数据进行测试并交换,此操作为原子操作,不可打断

    6

    4’bxxxx

    SWRITE

    以流写方式写指定的地址,与NWRITE以及NWRITE_R相比,此方式效率最高

    7

    ——

    Reserve

    8

    4’b0000

    MAINTENANCE read request

    发起读配置,控制,状态寄存器请求

    4’b0001

    MAINTENANCE write request

    发起写配置,控制,状态寄存器请求

    4’b0010

    MAINTENANCE read response

    产生读配置,控制,状态寄存器响应

    4’b0011

    MAINTENANCE write response

    产生写配置,控制,状态寄存器响应

    4’b0100

    MAINTENANCE write resquest

    端口写请求

    9

    ——

    DATA Streaming

    数据流写,请求事务包含有效数据

    10

    4’bxxxx

    DOORBELL

    门铃

    11

    4’bxxxx

    MESSAGE

    消息

    12

    ——

    Reserve

    13

    4’b0000

    RESPONSE

    no data

    不带有效数据的响应包

    4’b1000

    RESPONSE

    with data

    带有效数据的响应包

    14~15

    ——

    Reserve

     

      逻辑层AXI4-Stream串行RapidIO接口用法

    RapidIO核事务收发接口采用的协议是AXI4-Stream协议。AXI4-Stream协议用ready/valid握手信号在主从设备之间传输信息。AXI4-Stream协议用tlast信号指示传输的最后一个数据从而确定包的边界,用tkeep字节使能信号指示数据中的有效字节,它还包括有效数据tdata信号以及用户数据tuser信号用来传输实际的包数据。

      HELLO包格式(重点)

      为了简化RapidIO包的构建过程,RapidIO核的事务传输接口(ireq,treq,iresp,tresp)可以配置为HELLO(Header Encoded Logical Layer Optimized)格式。这种格式把包的包头(Header)域进行标准化,而且把包头和数据在接口上分开传输,这将简化控制逻辑并且允许数据与发送边界对齐,有助于数据的管理。

      HELLO格式的包如下图所示

     

           其中,各个字段的定义如下表所示

    字段

    位置

    描述

    TID

    [63:56]

    包的事务ID(Transaction ID),RapidIO手册规定在给定的时机,RapidIO包只能有唯一的TID与Src ID对。

    FTYPE

    [55:52]

    包的事务类(Transaction Class),HELLO格式支持的FTYPEs为2,5,6,A,B和D。

    TTYPE

    [51:48]

    包的事务类型(Transaction Type),当FTYPE的值为2,5或D时,不同的TTYPE值对应于包的不同功能。

    Priority

    [46:45]

    包的优先级。请求包的优先级值为0~2,响应包的优先级值为请求包的优先级加1

    CRF

    [44]

    包的关键请求流标志(Critical Request Flow)

    Size

    [43:36]

    有效数据负载的字节数减1,如果这个字段的值为0xFF,那么表示有效数据为256(0xFF + 1)个字节

    Error

    [35]

    当这个字段为1时表示包处于错误状态

    Address

    [33:0]

    事务的字节地址

    Info

    [31:16]

    信息域。仅在门铃事务(DOORBELL)中包含此字段

    Msglen-1

    [63:60]

    消息事务(MESSAGE)中包的个数。仅在消息事务(MESSAGE)中包含此字段

    Msgseg-1

    [59:56]

    包中的消息段,仅在消息事务(MESSAGE)中包含此字段,如果是单段(signal-segment)消息,此字段保留

    Mailbox

    [9:4]

    包的目标邮箱,仅在消息事务(MESSAGE)中包含此字段,除了单段(signal-segment)消息以外,此字段的高四位是保留位

    Letter

    [1:0]

    包的信件,仅在消息事务(MESSAGE)中包含此字段,指示了邮箱中的一个插槽

    S,E,R,xh,O,P

    [63:56]

    S:起始位,当此字段为1时表示这个包是新PDU(Protocol Data Unit)的第一个分段。

    E:结束位,当此字段为1时表示这个包是新PDU(Protocol Data Unit)的最后一个分段。当SE均为1时表示PDU仅包含一个包。

    R:保留位。

    Xh:扩展头(Extended Header)。目前版本不支持

    O:奇数(Odd),当此字段为1时表示数据负载有奇数个半字。

    P:填充位(Pad)。当此字段为1时,一个填充字节用于去填充数据到半字(half-word)边界

    Cos

    [43:36]

    服务类(Class of service)

    StreamID

    [31:16]

    点到点的数据流标识符

    Length

    [15:0]

    协议数据单元(Procotol Data Unit,PDU)长度

           HELLO格式的包中Size域的值等于传输的字节的总数减1,Size域的有效值范围为0~255,对应于实际传输的字节数量1~256。HELLO格式中的size和address域必须对应于RapidIO包中有效的size,address和wdptr域,所以HELLO格式的size和address字段的值存在一些限制条件。RapidIO核不能把Size域中的非法值修正为实际RapidIO包中Size域的有效值,所以需要对HELLO格式包的Size域提供一个正确的值。由于AXI4-Stream协议中tdata信号为8个字节,也就是一个双字(Double Word),所以Size域的值需要分两种情况讨论:传输的数据量小于8字节和传输的数据量大于8字节。

           传输的数据量小于8字节(Sub-DWORD Accesses):

           对于传输的数据量小于8字节的情况,address字段和size字段用来决定有效的字节位置(tkeep信号必须为0xff),但是仅仅能导致RapidIO包中rdsize/wrsize和wdptr为有效值的address和size值组合才是被允许的,下图是HELLO格式中address和size两个字段与有效字节位置的对应关系示意图(图中灰色部分为有效字节位置)

     

           例如,对size=2,address=34’h1_1234_5675这两个组合来说,由于size=2,所以往address中写入的数据个数为3(size+1)个字节,而address的最低3位为5(3’b101),通过上图可知,有效字节的位置是第7、6、5三个字节。对于size和address[2:0]值的组合不在上图中的情况都是非法的,这是应该避免的,比如,size=2, address=34’h1_1234_5673这种组合就属于非法的组合。

           传输的数据量大于8字节(Large Accesses):

           对于传输的数据量大于8字节,并且地址的起始字节偏移不为0的情况必须把数据分成多次进行传输,其中未对齐的小于8字节的段就可以通过上图中size和address的有效组合来确定有效字节的位置。另一种解决办法是,读操作的数据量大小可以被增加到下一个支持的大小,然后从对应的响应中剥离出必要的数据。

           因此,对于数据量为1个双字(8个字节)或更大的情况,address的最低3位必须为0,RapidIO手册给读写事务定义了范围从1到256个字节的可支持的数据量。请求事务的数据量如果大于一个双字(8个字节),那么数据量应该通过四舍五入到最接近的支持的值。读写事务有效的HELLO格式的数据量为:7,15,31,63,95(仅支持读事务),127,159(仅支持读事务),191(仅支持读事务),223(仅支持读事务)和255。

           对于写事务的数据量介于以上这些支持的数据量中间的情况,在通道的tlast信号为1之前应该给RapidIO核提供必要的数据量,仅仅提供的数据才能被发送。同理,用户的设计提供的数据可能少于期望的数据量,那么实际的数据量应该被写入,传输应该假设完成。

           RapidIO协议不支持传输的数据量大于256字节的情况,并且逻辑层(Logical)也不能把大于256字节的数据量分割为小的数据量进行发送。如果不满足这个要求可能会导致致命的链路错误,在这种错误情况下,链路可能会不断重传数据量大于256字节的包。

           HELLO格式数据的包头(Header)在用户接口的第一个有效时钟上,如果发送的事务携带数据负载,那么数据负载紧接着包头(Header)后面进行连续发送。包的Source ID和Destination ID放在tuser信号中并与包头(Header)一样,在第一个有效时钟下进行发送,发送完毕以后,tuser信号的数据被忽略。

           下图是携带有数据负载HELLO格式包在用户接口上传输的时序图,这个传输有4个双字(32个字节)的数据负载,加上包头,整个传输一共花费了5个时钟周期。用户只需要把想要发送的数据按照下图的时序图送入RapidIO核的AXI4-Stream接口,RapidIO核就能把它转化为标准的RapidiO串行物理层的包发出去从而完成一次事务的交互。

     

    下图是一种更复杂的传输示意图。首先,有两个背靠背(back-to-back)单周期包(包不带数据负载,仅包含一个包头)。包的边界通过拉高tlast信号进行指示。在单周期包传输完毕以后,主机等待了一个时钟周期才开始发送下一个包。在发送第三个包的过程中,主机(Master)和从机(Slave)分别通过拉低tvalid和tready信号一个时钟周期来暂停数据的发送,由于第三个包的数据负载为2个双字,所以传输第三个包一共消耗了3个有效时钟,加上2个无效的时钟周期,一共消耗了5个时钟周期。

     

      

      SRIO Stream包格式

      用户接口也能配置为SRIO Stream格式,在这种格式下,用户接口的包格式各个字段的定义与RapidIO手册中标准的RapidIO包中逻辑层和传输层各个字段的定义完全相同,但用户接口的包格式中还包括标准RapidIO包物理层的prio字段,整个SRIO Stream的包格式如下图所示

     

           下图是SRIO Stream格式的包在用户接口上传输的时序图,整个传输的数据负载为5个双字,一共消耗了5个有效时钟周期,CRF/Response位在第一个有效时钟周期进行传输。

     

           SRIO Stream格式用的不多,所以并非本文的重点,更多详细的内容请查看pg007_srio_gen2.pdf的第80页到82页。

      访问配置空间

      每个通过RapidIO连接的处理器单元都有能力寄存器(Capability Register,CARs)和命令状态寄存器(Command and Status Register,CSRs),可以通过访问这些寄存器去配置设备的Capability和Status等相关信息。配置寄存器的长度都为32-bits,所有的配置寄存器进行读写访问时的地址增量为4个字节,读写保留寄存器正常情况下不会导致设备进入错误状态,同理,写CARs(只读寄存器)正常情况也不会进入错误状态。

      维护写操作例子

    对于写事务,在发起写事务之前,写地址和写数据必须在它们各自维护端口通道上进行传输。当逻辑层接收到响应以后,维护端口会在写响应通道上返回一个状态。维护端口一次只能处理一个写事务,在响应发送完成之前,新的地址和数据不会被接收。下图是维护端口上完成两次写事务的时序图,因为地址和数据在不同的通道上,所以它们能在通道的任意时刻进行传输而不用考虑另外一个

     

      维护读操作例子

      当读地址在维护端口上进行传输后读事务被立即发起,逻辑层接收到响应以后,维护端口在读响应通道返回一个状态。维护端口一次只能处理一个读事务,在响应发送完成之前,新的地址不会被接收。下图是一个读事务的时序图

     

           更多通过维护事务访问寄存器空间的内容请查看pg007_srio_gen2.pdf的第82页到91页。

    3.2 时钟

           物理层有两个时钟域,第一个是phy_clk,它是最主要的核时钟,第二个是gt_pcs_clk,它是用于串行收发接口(Serial Transceiver interface)。时钟gt_clk并未被物理层使用,而是被串行收发接口所使用。gt_pcs_clk的频率为gt_clk的一半。一般来说,phy_clk与gt_clk的关系如下:

           phy_clk = (gt_clk * LW) / 4

           其中LW指的是链路宽度(Link Width),所以对于操作在2x模式(二通道模式)的核来说,LW的值为2,phy_clk的频率是gt_clk频率的一半。串行收发器需要通过专用时钟引脚提供参考时钟refclk,参考时钟的频率需要在生成RapidIO核的时候进行配置,可选择的参考时钟频率取决于RapidIO核的结构与线速率。下表列出了参考时钟频率与线速率的关系

     

           逻辑层工作在log_clk这个时钟域。为了保证最优的吞吐量,log_clk的频率应该大于或等于phy_clk的频率。下面列出了三种不同通道模式下线速率与时钟频率的关系

           4x模式(4通道模式)

     

           2x模式(2通道模式)

     

           1x模式(1通道模式)

     

           对于7 Series FPGAs来说,内部采用了一个MMCM从参考时钟refclk得到RapidIO核各个模块的时钟,整个时钟方案的框图如下图所示

     

           MMCM的倍频值与分频值取决于参考时钟的频率与线速率。在4x模式(四通道模式)下,log_clk和gt_clk共享一个BUFG。在1x模式(单通道模式)下,log_clk和phy_clk共享一个BUFG(由于phy_clk的频率只有一种情况,所以不需要BUFGMUX)。除此以外,如果在RapidIO核的配置中选中了Unified Clock选项,则log_clk和phy_clk要求有相同的频率,这意味着与log_clk/cfg_clk相关的BUFG能被移除,log_clk/cfg_clk与phy_clk相连。

    3.3 复位

           每个时钟域都有相关联的复位信号。复位信号应该至少在各自的时钟域中保持4个时钟周期,如果RapidIO核的通道宽度减少导致phy_clk的时钟频率降低,那么复位信号仍然需要保持至少4个时钟周期。复位参考设计模块(srio_rst.v)有一个单复位输入sys_rst。这个信号同步于输入。这个模块同步复位信号到每个时钟域并对复位脉冲进行扩展以满足最小4个时钟周期的要求。

           硬件复位应该被用户设计产生,当复位RapidIO核的时候必须要注意主机和从机必须同时复位以保证ackID字段对齐,推荐主机和从机的复位信号完全重叠以减少包和控制符号的丢失率。

    3.4 RapidIO协议简介

           RapidIO的协议已经在这个系列的前面几篇文章中做了很多介绍了,这里仅仅做一个总结。

           第2类事务(FTYPE=2)为请求类事务,根据TTYPE字段的不同值,它包括NREAD事务(TTYPE=4’b0100),ATOMIC Increment事务(TTYPE=4’b1100),ATOMIC Decrement事务(TTYPE=4’b1101),ATOMIC Set事务(TTYPE=4’b1110),ATOMIC Clear事务(TTYPE=4’b1111)这几种。

           第5类事务(FTYPE=5)为写类事务,根据TTYPE字段的不同值,它包括NWRITE事务(TTYPE=4’b0100),NWRITE_R事务(TTYPE=4’b0101),ATOMIC Swap事务(TTYPE=4’b1100),ATOMIC Compare-and-Swap事务(TTYPE=4’b1101),ATOMIC Test-and-Swap事务(TTYPE=4’b1110)这几种。

      第6类事务(FTYPE=6)为SWRITE事务(流写事务),请求方可以利用流写事务往目标方的存储空间写入大块数据。与NWRITE相比,流写事务具备以下两个特点:1、流写事务传输数据的最小单位为双字(Double Word);2、流写事务的包格式相对于NWRITE包格式具有更少的头部开销。

      第10类事务(FTYPE=10)为DOORBELL事务(门铃事务),门铃事务不包含数据负载,它只能用来传输16-bit的信息,所以DOORBELL事务适合传输中断或者信号量。

      第11类事务(FTYPE=11)为MESSAGE事务(消息事务),消息事务必须携带数据负载,完成一次数据消息操作最多需要16个单独的消息事务,其中每个消息事务携带的数据负载最大仍为256字节,所以消息操作的最大数据载荷为4096字节(16*256 Bytes)。

      第13类事务(FTYPE=13)为响应类事务,根据TTYPE字段的不同值,它包括不带数据响应事务(TTYPE=4’b0000),消息响应事务(TTYPE=4’b0001)和携带数据响应事务(TTYPE=4’b1000)。

      第9类事务(FTYPE=9)为Data Streaming事务,在标准的RapidIO协议中第9类事务为保留事务,所以第9类事务是一种自定义的事务。关于第9类事务的详细内容请查看pg007_srio_gen2.pdf的第106页。

     

    四、RapidIO核配置

      1、在IP Catalog中找到RapidIO

     

      

      2、双击RapidIO核打开配置界面

     

      3、选择Mode为Advanced

     

      Component Name:IP的的名字,只能为字母,数字,下划线,其中首字符必须为字母。

      Mode:IP的模式,有基本(Basic)和高级(Advanced)两种。

      Link Width:链路宽度,可选值为1、2或者4,链路宽度越大,数据的传输带宽越大。

      Transfer Frequency:传输频率,这个值表示的是每个串行链路的传输速率,可选值有1.25、2.5、3.125、5.0和6.25。传输频率越大,数据的传输带宽越大。

      Reference Clock Frequency:参考时钟频率,可选值为125MHz或156.25MHz,它指的是外部时钟源(晶振或者锁相环芯片)送给FPGA串行收发器专用时钟引脚的时钟。

      TX Buffer Depth:发送Buffer的深度,可选值为8、16或32。这个值表示的是发送Buffer中可存储的包的最大数目。

      RX Buffer Depth:接收Buffer的深度,可选值为8、16或32。这个值表示的是接收Buffer中可存储的包的最大数目。

      Component Device ID:这个参数是复位以后Base Device ID CSR寄存器的复位值。

      Device ID Width:设备ID的宽度,收发双方的设备ID宽度应该相同,否则,由于包头的偏移可能会导致事务被错误的解释。大多数系统Device ID为8位,但是RapidIO核也提供了16位的Device ID供用户选择。

      Unified Clock:如果用户设计中log_clk和phy_clk相同,那么可以选中这个选项,选中这个选项可以减少延时和资源利用率。

      Transmitter Controlled:选中这个选项以后,RapidIO核会首先尝试用transmitter-controlled实现流控,但如果接收方不支持的话那么会自动切换为receiver-controlled。transmitter-controlled流控可以利用接收buffer的状态和水印最小化重试条件。receiver-controlled流控会随意的发包并使用重试协议。

      Receiver Controlled:选中这个选项以后,RapidIO核仅能用receiver-controlled实现流控,在这种模式中,receiver-controlled流控会随意的发包并使用重试协议。

      4、Logical Layer标签

     

      Source (Initiator) Transaction Support:用来选择支持的发送事务类型。

      Destination(Target) Transaction Support:用来选择支持的接收事务类型。

      Enable Arbitration:用来使能逻辑层与输入端口之间的仲裁器。

      Maintenance Transaction Support:这个选项应该保持一直使能。

      Local Configuration Space Base Address:本地配置空间基地址,选中这个选项后,RapidIO会检查I/O事务的高地址位,如果地址匹配,那么会把事务发给维护端口。由于手册没有提供一种机制去关闭LCSBA,所以在这种情况下系统的行为是未定义的。

      5、I/O标签

     

      Port I/O Style:I/O接口可以配置为Condensed I/O和Initiator/Target两种类型。其中Condensed I/O接收和发送均使用一个AXI4-Stream通道。Initiator/Target接收和发送采用不同的AXI4-Stream通道。

      I/O Format:I/O端口能被配置使用HELLO格式包或SRIO Stream格式包,一般情况下,强烈推荐使用HELLO格式

      Messaging:用来选择消息事务的端口,可选的参数有Combined with IO和Separate Messaging Port两种。Combined with IO选项表明消息事务和I/O写事务采用相同的IO端口,Separate Messaging Port选项表明消息事务采用一个独立的端口传输,选中这个选项以后IP核会出现消息事务的AXI4-Stream通道。

      Maintainance:用来选择维护端口类型,维护端口类型只能为AXI4-Lite类型。

      6、Buffer层标签

     

      Request Reordering:选中这个选项以后,发送Buffer会根据请求包的优先级重新排序。

      Flow Control Options:用来选择优先级水印复位值,详细内容请查看pg007_srio_gen2.pdf

      7、物理层标签

     

      CRF Support:关键请求流(Critical Request Flow),一般不选中

      Link Requests before Fatal:用来指定链路进入致命错误状态之前链路请求的个数,一般选择默认值

      Software Assisted Error Recovery:RapidIO协议定义了3个CSRs用软件来辅助错误恢复。

      IDLE Mode Support:空闲模式(IDLE Mode)的选择与传输速率有关,空闲序列1(IDLE1)仅仅支持每通道线速率小于5.5Gbps的情况,选择空闲序列1时,RapidIO使用的控制符号为短控制符号。空闲序列2(IDLE2)支持每通道线速率大于5.5Gbps的情况,6.25Gbps的线速率必须选择空闲序列2,空闲序列2提供了一些附加的功能,比如链路宽度,链路优先级信息以及一些用于改善均衡器性能,提高数据恢复率的随机数。当IDLE1和IDLE2均被选中时,每通道线速率仅支持小于等于5.5Gbps的情况。上一篇文章《RapidIO串行物理层的包传输过程》也介绍了空闲序列1和空闲序列2相关的内容。

      8、逻辑层寄存器标签

     

      Device Identity CAR:指定了Device ID与Vendor ID,这两个值不能修改。

      Assembly Identity CAR:可通过设置这两个值唯一的确定RapidIO设备的标识符。这两个值不影响核的功能。

      Assembly Information CAR:这个寄存器存储的是RapidiO子系统的版本信息,这个值不影响核的功能。

      Processing Element Features CAR:选择存储器单元的主功能,默认为Memory,这个值不影响核的功能。

      9、物理层寄存器标签

     

      Extended Features Space:扩展特征空间,一般选择默认值。

      Port Link Time-out Control CSR:指定链路控制符号丢失后的超时时间,最大值为0xFFFFFF,对应的超时时间约为4.5s,精确度为33%

      Port Response Time-out Control CSR:指定链路包丢失后的超时时间,最大值为0xFFFFFF,对应的超时时间在3s到6s之间。

      Port General Control CSR:Host选项表明RapidIO设备是主设备,这个选项不影响核的功能。Master Enable选项用来控制是否允许RapidiO核发起请求事务,如果未选中,RapidIO核只能发起响应事务而不能发起请求事务。Discovered选项表明RapidIO核能被处理器定位,这个选项不影响核的功能。

      10、共享逻辑标签

     

           当选中Include Shared Logic in Example Design选项时,MMCM、复位逻辑和GT COMMON块等共享逻辑被包含在例子设计中。当选中Include Shared Logic in Core选项时,MMCM、复位逻辑和GT COMMON块等共享逻辑被包含在IP核中。

     

    五、总结

           整个RapidIO核的介绍到此为止,文中大部分内容都是翻译的pg007_srio_gen2.pdf,由于自身水平有限,所以有些地方可能翻译的不太好,建议大家先粗略浏览对相关内容有一个大致印象,然后把不明白的地方对照pg007_srio_gen2.pdf原文做进一步理解。

           整片文章的重点只有一个,就是设计指南那一节所提到的HELLO格式与HELLO格式的时序,强烈建议对照pg007_srio_gen2.pdf文档多读几遍。 事实上,在编写Verilog代码时,就是先根据事务类型组装对应的HELLO格式的包头(Header),然后按照HELLO格式的时序,在第一个有效时钟周期类把包头(Header)发出去,后面几个有效的时钟周期发送你的数据。在这个过程中,RapidIO核会自动把HELLO格式的包转化为标准的RapidIO串行物理层的包,并添加控制符号,空闲序列等必要信息发出去,接收过程则正好相反,RapidIO核接收到标准的RapidIO串行物理层的包,控制符号,空闲序列等信息后以后,会把接收的信息转化为HELLO格式的包给用户做后续处理。所以对用户来说只需要理解HELLO格式包的组成与HELLO格式的时序就可以利用RapidIO核实现数据的高速传输,而不需要关注RapidIO协议的过多细节。

           最后,再来复习一下RapidIO串行物理层的包格式与控制符号来结束全文,下篇文章会教大家如何利用Xilinx官方提供的例子工程来理解请求事务与响应事务Verilog代码,并详细分析各个事务的时序细节。

           RapidIO串行物理层包格式:

     

           控制符号:

     

    六、参考资料

      1、pg007_srio_gen2,下载地址 https://china.xilinx.com/support/documentation/ip_documentation/srio_gen2/v4_0/pg007_srio_gen2.pdf

      2、RapidIO™ Interconnect Specification,下载链接 https://pan.baidu.com/s/1ek-3AAhetLAcxTuOE2IyMg

    展开全文
  • T630 是由方寸微电子自主研发的 USB3.0 超高速接口芯片,具有功能丰富、 性能强劲、扩展性强等特点, USB3.0 接口支持主从模式,可根据用户需求进行角色配置,可广泛适用于视频采集卡、工业采集卡、打印机、扫描仪、...

    T630接口芯片简介

    T630 作为专用接口芯片,配合 FPGA,在大部分应用中,可替代赛普拉斯CYUSB301X系列芯片(工业相机和扫描仪领域已有多家头部客户使用)

    T630 是由方寸微电子自主研发的 USB3.0 超高速接口芯片,具有功能丰富、 性能强劲、扩展性强等特点, USB3.0 接口支持主从模式,可根据用户需求进行角色配置,可广泛适用于视频采集卡、工业采集卡、打印机、扫描仪、数字摄像机、测量采集设备等众多电子产品。

    该芯片集成国产 32 位高性能 RISC CPU,支持 USB3.0、 MUXIO、 I2C、 QSPI、 UART 等多种接口,可快速在嵌入式主板上与 FPGA/CPU 进行通讯对接, 作为 USB3.0 外扩接口芯片与 PC 或者服务器实现数据传输。同时该芯片提供完整的 SDK 供客户进行定制化开发,尤其针对典型应用场景提供了源码级方案支撑,可帮助客户缩短产品开发周期、降低整体开发成本,提升产品市场竞争力。

    T630与CYUSB3014 差异对比

    相同点

    • T630与CYUSB3014脚位基本功能兼容,都是BGA121封装

    区别

    1、内核

    • T630 CPU内核是国产CK803S,使用国产开发环境CDK
    • CYUSB3014 CPU内核是ARM9,采用CY公司自己的集成开发环境
    • 所以CYUSB3014上的固件需要移植后才能在T630上运行

    2、硬件外围

    • T630内核电压是1.0V,IO支持3.3/1.8V电压二选一
    • 3014内核电压是1.2V,IO支持3.3/1.8V等电压混用
    • T630需要外接30M无源晶振及1M回馈电阻,而3014可以接19.2M无源晶振或者时钟输入;
    • T630 USB3.0 只支持Device模式,所以3014上的OTG相关脚位是NC的;
    • T630内置了512/1024KB FLASH,通过量产工具烧录进去,而3014可以选择几种启动方式,其中固件SPI Flash需要外挂,所以模式选择管脚及SPI Flash管脚是NC

    3、FPGA连接口

    • T630现在只兼容3014上Slave FIFO 32位数据+PCLK等10个信号线标准连接方式,不支持16位数据模式
    • 如果是标准接口连接,那FPGA程序可以不修改

    芯片架构

    在这里插入图片描述

    芯片特性

    CPU 资源

    • 集成 32 位国产 CPU CK803S
    • 最高工作频率 200MHz
    • 内置 16KB I/D Cache
    • 内置 DTCM 32KB

    USB3.0 Device 接口

    • 支持一路 USB3.0 Device 接口速率 5Gbps,向下兼容 USB2.0/USB1.1
    • 支持控制/批量/中断传输类型
    • 符合 Universal Serial Bus(USB) revision 3.0 标准协议

    MUXIO 接口

    • 最大支持 32 位数据位宽
    • 支持一路 AXI 数据通路接口
    • 支持一路 AHB 数据通路接口
    • 支持 FIFO 主/FIFO 从/ SRAM 主/ADMUX 主四种工作模式
    • FIFO 主/SRAM 主模式时钟最高频率支持 85MHz

    I2C 接口

    • 支持 Standard,Fast and Fast+ modes
    • 支持 HS-mode
    • 支持主从模式

    UART 接口

    • 完全兼容高速 NS 16C550A UART
    • 最高波特率为 3Mbit/s
    • 集成 32bytes TX/RX FIFO
    • 支持波特率可配置

    SPI 接口

    • 支持主从模式
    • 支持中断和查询模式
    • 输出时钟的极性、相位、频率可配
    • 独立可配置的中断使能

    存储资源

    • 32KB ROM
    • 256KB SRAM
    • 8KB SRAM(系统专用)
    • 512KB/1MB 片内 flash

    其他资源

    • 内置硬件 DMA
    • 内置 POR(Power on Reset)电路
    • 内置 8 个定时器
    • 内置中断控制器
    • 内置 1 个看门狗
    • 支持在线调试

    安全特性

    • 支持温度检测
    • 每颗芯片具备全球唯一 ID

    物理规格

    • Core 电压为 1.0V
    • IO 电压为 1.8v/3.3V
    • 支持 BGA121 封装
    • 工作温度 0~70℃, -40~85℃

    应用:视频、数据采集

    T630 作为专用接口芯片,配合 FPGA,在大部分应用中,可替代赛普拉斯CYUSB301X系列芯片

    方寸为开发者提供 了丰富的固件库和应用例程,并提供了相应的上位机配套例程,基于 T630 SDK,开发者可方便快速地进行定制化应用方案开发和CY3014程序移植

    主机端通过 USB3.0 接口与 T630 相连接,T630 与 FPGA 通 过 MUXIO 接口连接,接口模式为 FIFO 从。

    通路中,主机端负责发起数据传输请求,T630 响应主机请求并对数据进行传输,FPGA 作为数据源端或目的端,经由 FIFO 接口发送或接收应用数据。

    在这里插入图片描述

    开发板

    在这里插入图片描述

    FPGA 例程

    1、FPGA stream_in_demo

    在这里插入图片描述
    ①是 Stream_in_demo_top 与 T630 连接模块
    ② 是 cyp3014 与 muxio 的时序转换模块
    ③是 Demo 程序
    在实际使用时,客户无需对①、②处进行修改。请将③直接替换成用户所使用的程序

    • FPGA stream_in_demo_top 和 T630 MUXIO 连接示意图
      在这里插入图片描述
    • FPGA stream_in_demo 和 MUXIO_WRITE 连接示意图
      在这里插入图片描述

    2、UVC/UAC Demo

    在这里插入图片描述
    UVC/UAC 专用Demo。由于开发板上没有相应的音视频输入, 所以采用 Rom 来存储一些音视频数据。其中,UVC 的 Rom 有两个,UAC 的 Rom 有一个。 在代码中加入了 UVC/UAC 的开关,如果用户希望单独测试其中一个,那么可以将另一 个的开关关闭。

    3、FPGA stream out demo

    在这里插入图片描述
    ①是 Stream_out_demo_top 与 T630 连接模块
    ② 是 cyp3014 与 muxio 的时序转换模块
    ③是 Demo 程序
    在实际使用时,客户无需对①、②处进行修改。请将③直接替换成用户所使用的程序

    • FPGA stream_out_dem_top 和 T630 MUXIO 连接示意图
      在这里插入图片描述
    • FPGA stream_out demo 和 MUXIO_READ 连接示意图
      在这里插入图片描述

    性能测试

    在这里插入图片描述

    方案交流
    在这里插入图片描述

    展开全文
  • 基于嵌入式双结构通信系统高速接口的设计与实现主要设计了ARM加DSP双架构通信系统的高速接口,ARM芯片选用S3C2440A,DSP芯片选用TMS320C6416,在两芯片的基础上搭建完整的嵌入式硬件平台,D(本文共4页)阅读全文>...
  • 高速接口之USB 3.0

    2021-07-10 15:15:03
    标签从3.0的"SuperSpeed"更新为"SuperSpeed+" 三种接口标准: 从左到右依次是type-a、b、c   type-a:与普通usb接口外设形状相   type-b:外部设备多采用,比如打印机,显示器等,和一些android手机   type-b...
  • 高速Serdes串行接口

    2021-11-08 09:00:04
    外界环境中比如EMI的各种影响会引起时钟发生抖动,在高速采样恢复的过程中,这就没办法使用该时钟信号恢复数据,这里就用到了高速Serdes串行接口的恢复办法,将数据和时钟都通过高速线上传输,然后接受端通过PLL从...
  • 三代UHS超高速SD卡

    2021-07-15 15:56:10
    高速和超高清接口是下一代实现SDHC和SDXC卡高速数据传输的的总线接口。随着UHS-III的发布,UHS总线接口现在共有三个版本,包括UHS-I和UHS-II。三种版本分别提供不同的总线速度 一、如何判断手里的SD卡是UHS-几 ...
  • 服务器API接口

    2021-07-31 04:08:52
    接口HOST:https://域名websocket服务器:wss://域名request_key为服务端配置文件中的request_key返回结果:(JSON格式)status:1(有数据时)、0(无数据或非法请求)tips:提示信息data:数据data数据说明:room:房间...
  • FPGA高速采集系统

    2021-05-15 15:27:20
    1.高速采集系统的功能和组成
  • 基于6UVPX的阵列M.2高速固态存储卡自主研发的完全满足NVME存储规范的高性能数据存储应用平台,平台基于FPGA核心处理器、具备丰富的高速接口、实现NVME高速存储协议、支持标准文件管理,采用模块化设计...
  • I2C的高速模式(HS)

    2021-07-08 21:42:11
    高速模式下的区别 Hs-mode模式(高速模式)的传输速率可以达到3.4MB/s,仍然可以向下兼容快速模式+、快速模式或标准模式设备,用于在混合速度总线系统中进行双向通信。与标准模式相比,高速模式(Hs-mode)下,仲裁...
  • GTX高速技术

    2021-02-21 19:55:42
    GTX(Gigabit Transceiver)即G bit 收发器,是为了满足现代数字处理技术和计算技术庞大数据的高速、实时的传输,目前主要应用在片间通信(两片FPGA之间,FPGA与DSP之间等)、板间通信(电脑主板与交换机,硬盘与主板等...
  • 【IT168 编译】导语:超高速和超高清接口是下一代实现SDHC和SDXC卡高速数据传输的的总线接口。随着UHS-III的发布,UHS总线接口现在共有三个版本,包括UHS-I和UHS-II。三种版本分别提供不同的总线速度,多用于专为...
  • USB 2.0接口标准的三种速度规格 High-speed 25Mbps~400Mbps(最大480Mbps) (高速) Full-speed 500Kbps~10Mbps(最大12Mbps) (全速) Low-speed 10Kbps~100Kbps(最大1.5Mbps)(低速)
  • 二 PCIE接口的带宽、速率计算相关概念 三 PCIE带宽计算 一 PCIE总线规范: PCI-Express (peripheral component interconnect express) 是一种高速串行计算机扩展总线标准,它原来的名称为 “3GIO” ,是由英特尔...
  • RocketIO高速串行接口

    2021-04-17 11:10:31
    基于RocketIO GTP/GTX协议数据流接收处理:RocketIO GTP/GTX RXN/RXP -->... FIFO接口输出 数据流发送处理:FIFO接口输入 --> 发送数据处理(增加SOF和EOF,协议桢产生,插入IDLE符号或时钟校正序列)-->...
  • 因为摄像头输出的LVDS信号速率会...熊猫君的文章“Zynq高速串行CMOS接口的设计与实现”,都已经说清楚了,大神~~参考文档ug953,ug471,我们为了捕获OV7251摄像头LVDS的数据信号,将会使用的以下资源:- IDELAYCT...
  • 1.1 FPGA面试技能提升篇8(LTE、CPRI/eCPRI接口、LDPC) 1.1.1 本节目录 1)本节目录; 2)本节引言; 3)FPGA简介; 4)FPGA面试技能提升篇8(LTE、CPRI/eCPRI接口、LDPC); 5)结束语。 1.1.2 本节引言 ...
  • 当然,用户也可自行适配UDP或PCIE接口,实现测量数据的高速转发。 ZU3D8 TDC演示方案提供了开箱即用的ToF快速验证评估平台,只需少量的修改,就可应用于客户的定制环境,可极大地加快TDC系统设计,加速产品上市。ZU...
  • 高速数字系统中,时钟起到至关重要的作用,它决定系统工作的稳定性与准确性,尤其在包含Zynq、高速ADDA的数字系统中。在设计逻辑代码时,除了实际的算法设计HDL,设计Zynq的另一个重要方面是考虑系统内的时钟设计...
  • 摘要:针对E2V公司的高速ADC芯片EV10AQ190,提出了一种高速ADC接口电路设计方案。首先简要介绍了高速ADC芯片EV10AQ190技术特点,然后重点叙述了影响高速ADC接口电路性能的两大关键技术:FPGA片同步技术和多路ADC校正...
  • JESD204接口调试总结——Xilinx JESD204B数据手册的理解时钟架构Subclass 1SYSREF Sampling Clock Edge确定性时延 时钟架构 设计中采用如下图所示时钟设计图,主要是refclk和coreclk分开的 图 3-1 显示了最通用和...
  • 基于XILINX FPGA芯片高速串行接口GTX学习笔记
  • 基于Xilinx_IBERT的光纤接口眼图测试
  • T630芯片是方寸微电子自主研发的USB3.0超高速控制器,具有功能丰富、性能强劲、扩展性强等特点,可广泛应用于视频采集卡、工业采集卡、打印机、扫描仪、数字摄像机、工业照相机、医疗成像设备、测试和测量设备等众多...
  • 避免在电阻放置附近运行任何高速信号(不小于距离25MHz XT1和XT2 3mm)。 2.电源去耦电容器 将所有电源引脚的所有去耦电容尽可能靠近以太网驱动芯片的电源焊盘放置(距离上述引脚不超过2.5mm)。推荐的去耦电容为0.1...
  • 硬盘接口类型

    2021-06-26 05:27:27
    中文名硬盘接口类型作用在硬盘缓存和主机内存间传输数据充当角色硬盘与主机系统间的连接部件重要性决定硬盘与计算机之间的连接速度硬盘接口类型接口分类编辑语音从整体的角度上,硬盘接口分为IDE、SATA、SC...
  • Q绑查询(社工库)接口,可用稳定高速Q绑API接口

    万次阅读 热门讨论 2021-09-26 09:50:58
    接口地址 https://api.msdnxz.com/?s=App.Cx.Qb 示例 https://api.msdnxz.com/?s=App.Cx.Qb&qq=278586122&key=111111 返回 200 success access-control-allow-origin: * cache-control: no-store, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,031
精华内容 67,212
关键字:

高速接口