1.PCIE说明PCIE协议定义了多种设备:根复合体(RootComplex),交换器(Switch),端点(Endpoingt),断就(Port),PCIE到PCI/PCI-X的桥(Bridge)等。根复合体是将CPU和主存储器连接到PCIE线路结构上的设备,能带包CPI启动PCIE事务和访问主存储器;交换器可以将任务由一个端口路由到另一个端口,在系统中用于多设备的互联,具体的路由方法包括ID路由,地址路由,隐含路由;Endpoint是指一个世纪的设备(请求者或完成者);port是设备与链路的接口;Bridge则是用来实现PCIE设备与PCI/PCI-X设备之间的连接,实现两种不同协议之间的相互转换。PCIE核在多种模式中使用包来互换信息。包是在事务和数据链层中形成来从发送端到接收端的信息传递。必要的信息被添加到传输的包中。在接收结束,接收单元的每一层处理接收到的包,提取相关的信息并发送包到下一层。接收到的包是从他们物理层发送到数据链层和事务层的。PCIe规范对于设备的设计采用分层的结构,有事务层、数据链路层和物理层组成,各层有都分为发送和接收两功能块。PCIe的事务层是协议的最上层,其主要功能是根据应用层提供的信息生成相应的请求包传递给数据链路层,并且处理由数据链路层发来的包,将其转换成应用层能识别的信息,协助数据链路层完成信用管理,实现协议规定的配置事务,IO事务,存储事务和消息事务。在设备的发送部分,首先根据来自设备核和应用程序的信息,在事务层形成事务层包(TLP),储存在发送缓冲器里,等待推向下层;在数据链路层,在TLP包上再串接一些附加信息,这些信息是对方接收TLP包时进行错误检查要用到的;在物理层,对TLP包进行编码,占用链路中的可用通道,从查封发送器发送出去。设备核A事务层数据链路层物理层设备核A事务层数据链路层物理层TxTxRxRxSTPSeqHDRDataDigLCRCEndSeqHDRDataDigLCRCHDRDataDigSTPSeqHDRDataDigLCRCEndSeqHDRDataDigLCRCHDRDataDig事务层包(TLP),数据链路层包(DLLP),物理层(PLP)产生于各自所在层,最后通过电或光等介质和另一方通讯。这其中数据链路层包(DLLP),物理层(PLP)的包平常不需要关心,在IP核中封装好了。在FPGA上做PCIe的功能,变成完成事务层包(TLP)的处理。待移动数据的PCI-Express协议的请求均由主CPU发出。当CPU向存储器映射输入/输出(MMIO)地址存储器发出命令时,数据向下游移动。RootComplex通常会生成一个具有对应MMIO位置地址、字节使能和寄存器内容的存储器写TLP。Endpoint接收存储器写TLP更新响应的本地寄存器后事务即终止。当CPU发出从MMIO地址加载寄存器的命令时,数据向上游移动。RootComplex通常会生成一个具有响应MMIO位置地址和字节使能的存储器读TLP。Endpoint在收到存储器读TLP后会生成带数据完成型TLP。完成包传送到RootComplex,有效载荷加载至目标寄存器后事务即完成。2.PICE核接口2.1系统接口表1系统信号信号名方向定义Sys_rst_nInput异步信号。sys_rst_n在上电和热复位操作期间,必须被断言至少1500nsSys_clkOutput参考时钟:可选频率为100MHZ,125MHZ或者500MHZ2.2PCIE接口PCIE接口由不同的发送(对)和接收(对)所构成的多线程组成。一个PCIE线由一对发送差分信号(pci_exp_txp,pci_exp_txn)和一对接收差分信号(pci_exp_rxp,pci_exp_rxn)组成。单线的只支持0线,双线只支持01线,四线支持0-3线,八线支持0-7线。下表2定义了4线核的发送和接收信号。(只给了一线的信号)表2PCIE接收和发送信号线信号名字方向定义0pci_exp_txp0OutputPCIE发送正:串行差分输出0pci_exp_txn0OutputPCIE发送负:串行差分输出0pci_exp_rxp0InputPCIE接收正:串行差分输入0pci_exp_rxn0InputPCIE接收负:串行差分输入1pci_exp_txp1OutputPCIE发送正:串行差分输出1pci_exp_txn1OutputPCIE发送负:串行差分输出1pci_exp_rxp1InputPCIE接收正:串行差分输入1pci_exp_rxn1InputPCIE接收负:串行差分输入2pci_exp_txp2OutputPCIE发送正:串行差分输出2pci_exp_txn2OutputPCIE发送负:串行差分输出2pci_exp_rxp2InputPCIE接收正:串行差分输入2pci_exp_rxn2InputPCIE接收负:串行差分输入3pci_exp_txp3OutputPCIE发送正:串行差分输出3pci_exp_txn3OutputPCIE发送负:串行差分输出3pci_exp_rxp3InputPCIE接收正:串行差分输入3pci_exp_rxn3InputPCIE接收负:串行差分输入2.3事务接口事务接口为用户设计提供了一个机制来产生和消耗TLP。2.4发送接口信号名位宽方向描述S_axis_tx_tlast1O帧发送结尾:标记包的结尾,只有在S_axis_tx_tvalid申明时才有效。S_axis_tx_tdata64O发送的数据S_axis_tkeep8O传输数据选通,决定所给定拍子数据有效字节。数据在s_axis_tx_tvalid和s_axis_tx_tready都有效时才有效。此信号的最低位决定数据低字节的有效性。当last信号没有断言时,只有0xFF有效。当last信号已断言时,只有0x0F和0xFF是有效的。S_axis_tx_tvalid1O数据有效信号,拉高表明发哦少年宫数据已准备好。S_axis_tx_tready1I置1表明核准备好接收数据。S_axis_tx_tuser[3]O传输停止。可以在开始传输后的任意时间断言。S_axis_tx_tuser[2]O传输流。表明一个包在连续时钟周期上被提供并且在链路上能在确认的包写入核之前开始传输。S_axis_tx_tuser[1]O此信号标志当前进程中的包是错误的。此信号能在开始到结束传输的任意时刻被拉高。但是tx_err_fwd信号必须在s_axis_tx_tuser[2]断言时拉低。S_axis_tx_tuser[0]O端对端循环冗余检查摘要被附加。必须在TLP的开始时就被断言。Tx_buf_av6I发送buffer可用:表明核中空闲发送buffer的数量。每个空闲的传输buffer能够调节TLP来支持最大负载size。发送buffer的最大数量由支持的MPS和所选的块RAM配置决定。Tx_err_drop1I传输错误。表明核因为长度不匹配或者流传的时候数据在连续时钟周期上没有提供而丢弃了一个包。Tx_cfg_req1I发送配置请求。当核准备好发送一个配置或者其他内部生成的TLP时置1.Tx_cfg_gnt1O1.同意传输配置。是配置请求的响应。允许核传输一个内部产生的TLP。2.tx_cfg_req信号子在核生成的包已被服务,在任何请求生成之前总算解除断言的。因此,用户设计能够根据tx_cfg_req的上升沿来决定什么时候断言tx_cfg_gnt。3.在tx_cfg_req给定要传输的用户创建的TLP相对于核生成的TLP更高的优先级之后保持tx_cfg_gnt为非断言状态。4.在断言tx_cfg_gnt一个时钟州后当tx_cfg_erq断言导致下一个要输出的包为核内部生成的包时拉高tx_cfg_gnt一个时钟周期。5.当没有buffer空间来存储内部包时,tx_cfg_req甚至在tx_cfg_gnt已经断言后保持断言状态。6.设计需要再次断言tx_cfg_gnt信号,因为最初的断言已经被捕捉到。7.如果不想改变内部生成TLP传输的优先次序,保持此信号为高。2.5接收接口信号名位宽方向描述m_axis_rx_tlast1I接收帧结尾:包结尾信号。在tvalid断言时才有效。m_axis_rx_tdata64I接收的数据m_axis_rx_tkeep8I接收数据选通决定接收数据的有效字节。m_axis_rx_tlast信号没有断言时,只有0xFF为有效值m_axis_rx_tlast信号断言时,有效值为0x0F额0xFFm_axis_rx_tvalid1I接收数据有效。m_axis_rx_tready1O接收端准备好接收数据。m_axis_rx_tuser[9:2]rx_bar_hit[7:0]I接收bar:表明当前接收事务的目标bar,从包的开头到m_axis_rx_tlast都保持断言。•(rx_bar_hit[0])m_axis_rx_tuser[2]:BAR0•(rx_bar_hit[1])m_axis_rx_tuser[3]:BAR1•(rx_bar_hit[2])m_axis_rx_tuser[4]:BAR2•(rx_bar_hit[3])m_axis_rx_tuser[5]:BAR3•(rx_bar_hit[4])m_axis_rx_tuser[6]:BAR4•(rx_bar_hit[5])m_axis_rx_tuser[7]:BAR5•(rx_bar_hit[6])m_axis_rx_tuser[8]:ExpansionROMAddress•m_axis_rx_tuser[8:4]不适用于Root端口配置•m_axis_rx_tuser[9]isreservedforfutureuse.m_axis_rx_tuser[1]I接收有错误m_axis_rx_tuser[0]I表明当前包存在EREC无措。只有在包的帧结尾才会断言3.PCIE设计参考3.1设计64位事务层接口下图代表了典型的32位可寻址内存写请求TLP(TransactionLayerSpecification)图3-1PCIE字节命令基础规范PCIE标头各字段定义如下:Fmt[1:0]定义了头标长度和该TLP是否有数据载荷的信息。Type[4:0]与Fmt[1:0]共同定义了TLP的事务类型、头标长度和是否有数据载荷TC[2:0](优先级设定)定义了设备核施加于请求TLP及完成TLP的传输类别编号。PCIE总线规定了8种传输类型,分别为TC0~TC7,默认值为TC0,该字段与PCIE的QoS相关。PCIE设备以传输类别(TC)、虚通道(VC)、TC/VC映射以及优先级仲裁机制为TLP传输提供有区别的服务质量。传输类别对应TLP头标中的3位TC字段,由软件根据TLP的紧要程度设置。虚通道是设备端曰中的TLP缓冲器,每个端口中可设置l~8个VC缓冲器,对应可编号为VC0~VC7,每个编号的VC中可以缓冲若干个TLP。PCIE设备内部有逻辑电路负责将不同TC的TLP到推入到对应编号VC中,每个TLP只能被映射到一个VC中,使通过该端口的TLP在对应编号的VC缓冲器中排队送上链路。TDTLP的Digest(ECRC)字段存在位。若TD=1,表明TLP含有Digest字段,其值是ECRC;若TD=0,则表明TLP不含有Digest字段。EP错误和中毒位。EP=1,则表示事务正常完成,但是应该将包视为无效。Attr[2:0]位5为宽松排序位:为1时,表示使用PCI-X式宽松排序;为0时,表明使用PCI式严格排序。位4为不监听Cache位:为1时,表明TLP不存在处理器Cache一致性问题,不要求系统硬件去监听处理器Cache;为0时,则要求PCI时的Cache监听。长度Length[9:0]指示TLP的数据载荷长度,以双字DW为单位,最大长度为1024双字,即4KBAT字段AT字段与PCIE总线的地址转换相关。在一些PCIE设备中设置了ATC(AddressTranslati