CN111078609B - 一种基于FPGA的PCIe转三总线接口及方法 - Google Patents

一种基于FPGA的PCIe转三总线接口及方法 Download PDF

Info

Publication number
CN111078609B
CN111078609B CN201911104612.4A CN201911104612A CN111078609B CN 111078609 B CN111078609 B CN 111078609B CN 201911104612 A CN201911104612 A CN 201911104612A CN 111078609 B CN111078609 B CN 111078609B
Authority
CN
China
Prior art keywords
transaction
module
data
fifo
signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911104612.4A
Other languages
English (en)
Other versions
CN111078609A (zh
Inventor
葛芬
刘鹏
陈鑫
李向莉
赵雅悦
张伟枫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN201911104612.4A priority Critical patent/CN111078609B/zh
Publication of CN111078609A publication Critical patent/CN111078609A/zh
Application granted granted Critical
Publication of CN111078609B publication Critical patent/CN111078609B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0024Peripheral component interconnect [PCI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Communication Control (AREA)

Abstract

本发明公开了一种基于FPGA的PCIe转三总线接口,主要包括PCIe接口模块、下行数据通路、上行数据通路、上下行数据交换通路。本发明还公开了一种基于FPGA的PCIe转三总线接口方法,本发明可实现PCIe总线与三总线通用接口的协议转换和数据传输,以支持通信系统中通过PCIe总线与其他任意采用了控制总线、地址总线以及数据总线三总线接口的设备进行数据传输。区别于专用芯片的设计方式,基于FPGA实现PCIe转三总线接口具有更大的灵活性,并且简化了设计周期,更易于系统集成。

Description

一种基于FPGA的PCIe转三总线接口及方法
技术领域
本发明涉及计算机接口技术领域,特别是一种基于FPGA的PCIe转三总线接口及方法。
背景技术
随着计算机技术的不断发展,处理器与外设通信的I/O总线随着处理器速度的不断加快而更新换代。常用的通信总线有ISA总线、PCI/PCIX总线、PCI-Express总线等等。PCI-Express简称PCIe,作为一种第三代高性能I/O总线,它已经被广泛应用于设备之间的数据通信。PCIe总线采用差分链路作为数据传输的物理通道,由于差分信号可以使用更高的总线频率并且很好的解决了并行总线的串扰问题,使得PCIE总线的传输带宽相比于第二代总线接口(PCI/PCIX等)有很大提高。
虽然PCIe接口在系统通信设计中已经成为一种主流接口,但是通信系统中还存在着大量的第二代总线接口的设备,为了兼容这些设备,就需要设计者实现不同总线接口之间的桥接逻辑。然而,支持PCIe与PCI/PCIX总线转换的专用桥接芯片较少,且转换接口功能固定。第二代总线接口(PCI/PCIX等)通常采用并行通信方式,其通信接口包括控制总线、地址总线以及数据总线三种类型(简称三总线)。
发明内容
本发明所要解决的技术问题是克服现有技术的不足而提供一种基于FPGA的PCIe转三总线接口及方法,实现PCIe总线与三总线通用接口的协议转换和数据传输。
本发明为解决上述技术问题采用以下技术方案:
根据本发明提出的一种基于FPGA的PCIe转三总线接口,包括采用FPGA的PCIe IP核的PCIe接口模块、下行数据通路、上行数据通路以及上下行数据交换通路;
PCIe接口模块,用于实现PCIe总线协议的物理层、数据链路层以及事务层功能,完成数据从高速差分线到事务层并行传输接口的双向转换;PCIe接口模块的事务层包括用户接收接口和用户发送接口,用户发送接口用于接受上行数据通路所输入的各类组包事务,用户接收接口用于输出各类事务至下行数据通路;
下行数据通路,用于对用户接收接口所输入的各类事务、上下行数据交换通路输入的信息进行解析,根据事务作用于不同的目标,将不同的数据和命令传输到相应的目标上,在其中完成整个数据通路的流量控制,并为上行数据通路的组包过程计算其所需的相应字段和完成数据的大小端格式转换;
上下行数据交换通路,用于在上行数据通路和下行数据通路之间传输信息;
上行数据通路包括三总线接口输入信号端,上行数据通路用于对上下行数据交换通路和三总线接口输入信号端传输过来的信息,按照PCIe协议规范进行组包,并且经过事务仲裁后传输到PCIe接口模块的用户发送接口上。
作为本发明所述的一种基于FPGA的PCIe转三总线接口进一步优化方案,下行数据通路包括地址解码模块、AXIS转TRN模块、发布事务解析模块、非发布事务解析模块、完成事务解析模块、类型0配置事务解析模块、下行发布事务异步FIFO模块、下行非发布事务异步FIFO模块和下行完成事务异步FIFO模块;
上行数据通路包括上行发布事务异步FIFO模块、上行非发布事务异步FIFO模块、上行完成事务异步FIFO模块、完成事务组包模块、非发布事务组包模块、发布事务组包模块、类型0配置请求完成事务组包模块、事务顺序模块以及TRN转AXIS模块;
上下行数据交换通路包括上行RAM模块、下行RAM模块、第一同步FIFO模块、第二同步FIFO模块、配置寄存器组以及寄存器组读写控制模块;其中,
地址解码模块,用于对用户接收接口信号端输入的事务和寄存器组读写控制模块输入的寄存器信息进行地址、ID和事务类型判断,输出AXI-Stream接收接口信号至AXIS转TRN模块;
AXIS转TRN模块,用于将AXI-Stream接收接口信号转换成TRN接收接口信号,输出TRN接收接口信号至发布事务解析模块、非发布事务解析模块、完成事务解析模块和类型0配置事务解析模块;
发布事务解析模块,用于对TRN接收接口信号携带的发布事务进行解析,解析出事务的事务编码、数据负载大小、字节使能字段、地址以及负载数据信息,输出发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号至下行发布事务异步FIFO模块;
非发布事务解析模块,用于对TRN接收接口信号携带的非发布事务进行解析,解析出事务的事务编码、流量类别字段、属性字段、数据负载大小、请求者ID、标记字段、字节使能字段、地址以及负载数据信息,输出非发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号至下行非发布事务异步FIFO模块,输出下行RAM数据写入信号输出至下行RAM模块;
完成事务解析模块,用于对TRN接收接口信号携带的完成事务、上行RAM模块输入的数据进行解析,解析出事务的事务编码、完成状态字段、数据负载大小、字节使能字段、完成者ID字段以及负载数据信息,输出完成事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号至下行完成事务异步FIFO模块;
类型0配置事务解析模块,用于对TRN接收接口信号携带的类型0配置事务进行解析,解析出事务的总线号、设备号、功能号、寄存器号、拓展寄存器号、请求者ID以及负载数据信息,输出第一同步FIFO数据写入信号至第一同步FIFO模块;
下行发布事务异步FIFO模块,用于对发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号携带的事务信息进行缓存和跨时钟域处理,输出下行发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号,这三个信号即为三总线接口输出信号;
下行非发布事务异步FIFO模块,用于对非发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号携带的事务信息进行缓存和跨时钟域处理,输出下行非发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号,这三个信号即为三总线接口输出信号;
下行完成事务异步FIFO模块,用于对完成事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号携带的事务信息进行缓存和跨时钟域处理,输出下行完成事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号,这三个信号即为三总线接口输出信号;
上行发布事务异步FIFO模块,用于对三总线接口输入信号端输入的发布事务信息进行缓存和跨时钟域处理,输出上行发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号至发布事务组包模块;
上行非发布事务异步FIFO模块,用于对三总线接口输入信号端输入的非发布事务信息进行缓存和跨时钟域处理,输出上行非发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号至非发布事务组包模块;
上行完成事务异步FIFO模块,用于对三总线接口输入信号端输入的完成事务信息进行缓存和跨时钟域处理,输出上行完成事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号至完成事务组包模块;
非发布事务组包模块,用于对上行非发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信息和命令FIFO读出信号携带的事务信息,按照PCIe协议中非发布事务数据包的格式和时序进行组包,输出上行RAM数据写入信号至上行RAM模块,输出非发布事务组包的TRN发送接口信号至事务顺序模块;
发布事务组包模块,用于对上行发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信息和命令FIFO读出信号携带的事务信息,按照PCIe协议中发布事务数据包的格式和时序进行组包,输出发布事务组包的TRN发送接口信号至事务顺序模块;
完成事务组包模块,用于对上行完成事务异步FIFO模块中的地址FIFO数据读出信号、数据FIFO数据读出信息和命令FIFO读出信号携带的事务信息,按照PCIe协议中完成事务数据包的格式和时序进行组包,输出完成事务组包的TRN发送接口信号至事务顺序模块;
类型0配置完成事务组包模块,用于对第二同步FIFO模块输入的第二同步FIFO数据读出信号,按照PCIe协议中完成事务数据包的格式和时序进行组包,输出类型0配置完成事务组包的TRN发送接口信号至事务顺序模块;
事务顺序模块,用于对发布式事务组包模块、非发布式事务组包模块、完成事务组包模块和类型0配置完成事务组包模块的四路TRN发送接口信号携带的事务进行排序,输出一路事务顺序模块仲裁后的TRN发送接口信号至TRN转AXIS模块;
TRN转AXIS模块,用于对事务顺序模块输出的一路TRN发送接口信号转换成对应的AXI-Stream接口发送信号,输出AXI-Stream接口发送信号至PCIe接口模块;
上行RAM模块,用于对非发布事务组包模块的上行RAM数据写入信号携带的请求者ID和标记字段进行缓存,输出上行RAM数据读出信号至完成事务解析模块;
下行RAM模块,用于对非发布事务解析模块的下行RAM数据写入信号携带的低地址字段、数据负载大小、属性字段、流量类别、字节使能、请求者ID以及标记字段进行缓存,输出下行RAM数据读出信号至完成事务组包模块;
第一同步FIFO模块,用于对类型0配置事务解析模块的第一同步FIFO数据写入信号携带的寄存器ID、拓展寄存器ID、设备ID、总线ID、请求者ID以及负载数据字段进行缓存,输出第一同步FIFO数据读出信号至寄存器组读写控制模块;
第二同步FIFO模块,用于对寄存器组读写控制模块的第二同步FIFO数据写入信号携带的请求者ID、完成者ID和负载数据字段进行缓存,输出第二同步FIFO数据读出信号至类型0配置完成事务组包模块;
寄存器组读写控制模块,用于实现对配置寄存器组的读写操作,对第一同步FIFO模块的数据读出信号携带的事务信息和配置寄存器组的数据读出信号携带的寄存器信息进行解析,输出地址/总线寄存器传输信号至地址解码模块,输出寄存器组的数据写入信号和寄存器组的读写地址信号至配置寄存器组,输出同步第二FIFO数据写入信号至第二同步FIFO模块。
作为本发明所述的一种基于FPGA的PCIe转三总线接口进一步优化方案,配置寄存器组实现桥的配置寄存器空间,其按照PCIe协议中关于桥的配置寄存器组,即头类型1的配置寄存器空间的定义和功能描述来实现;
作为本发明所述的一种基于FPGA的PCIe转三总线接口进一步优化方案,事务顺序模块依照PCIe协议中关于事务顺序内容来实现,其依照协议中规定的事务顺序,根据链路拥塞情况,对事务进行仲裁,是保证数据高效传输的基础。
作为本发明所述的一种基于FPGA的PCIe转三总线接口进一步优化方案,上行发布事务异步FIFO模块、上行非发布事务异步FIFO模块、上行完成事务异步FIFO模块、下行发布事务异步FIFO模块、下行非发布事务异步FIFO模块以及下行完成事务异步FIFO模块均分别包括命令FIFO、数据FIFO和地址FIFO组成;上行通路三种事务的异步FIFO和下行通路的三种事务的异步FIFO不同是其读写操作所处的时钟域刚好相反,下行通路的三中事务异步FIFO的写时钟为PCIe的事务层时钟信号,读时钟为三总线接口时钟信号;所述类型0配置请求完成事务组包模块被分类出来单独进行组包并由专门的数据通路传送到事务顺序模块。
基于上述的一种基于FPGA的PCIe转三总线接口的下行数据通路单个事务包的解析方法,包括以下步骤:
步骤1、在系统初始/复位化完成后,上位机按照PCIe协议进行组包,事务包信息到达PCIe IP核的事务层的用户接收接口后,首先进行发送端和接收端的握手信号的判断,若都有效,则地址解码模块对事务包地址进行判断,若在配置寄存器限定的范围内,则往下转发到事务解析模块,若不在范围内,则直接丢弃;事务解析模块包括发布事务解析模块、非发布事务解析模块、完成事务解析模块以及类型0配置事务解析模块;其中发布事务解析模块包括32位寻址存储器写事务解析模块和64位寻址存储器写事务解析模块,非发布事务解析模块包括32位寻址存储器读事务解析模块、64位寻址存储器读事务解析模块、IO读事务解析模块、IO写事务解析模块、类型1配置读事务解析模块和类型1配置写事务解析模块,完成事务解析模块包括带数据的完成事务解析模块和不带数据的完成事务解析模块;
步骤2、然后,在事务解析模块中进行流量控制判断,如果满足流量控制条件,则提取事务的事务编码、数据负载大小、请求者ID、字节使能字段、地址、完成者ID以及负载数据信息并写入对应的异步FIFO和上行RAM模块,若不满足,则缓存第一帧并等待流控条件满足;
步骤3、再判断发送端的握手信号是否有效,如果有效,则继续接收并解析下一帧,否则在时钟上升沿来临时再次判断发送端握手信号是否有效;
步骤4、从第二帧开始,每接收一帧都需判断其是否是最后一帧,如果是,则当前事务传输结束,如果不是,则继续传输数据包的后续帧。
基于上述的一种基于FPGA的PCIe转三总线接口的上行数据通路单个事务包的组包方法,包括以下步骤:
步骤A、在系统初始化/复位完成后,首先,在三类事务组包模块中的命令FIFO读取控制模块中,对命令FIFO空信号进行判断,若命令FIFO非空,即表明至少有一个事务待组包传输,则读取命令FIFO的信息;其中,三类事务组包模块为发布事务组包模块、非发布事务组包模块和完成事务组包模块;
步骤B、判断接收端握手信号是否有效,如果有效,则根据从命令FIFO中读取的信息组包事务包的第一帧并传输至事务顺序模块的事务队列中,并且将地址FIFO读使能信号和发送端握手信号置为有效,将命令FIFO读使能置为无效,这里发送端为各个事务组包模块,接收端为事务顺序模块;其中,事务组包模块中发布事务组包模块包括32位寻址存储器写事务组包模块和64位寻址存储器写事务组包模块,非发布事务组包模块包括32位寻址存储器读事务组包模块、64位寻址存储器读事务组包模块、IO读事务组包模块和IO写事务组包模块,完成事务组包模块包括带数据的完成事务组包模块和不带数据的完成事务组包模块;
步骤C、下一周期的时钟上升沿继续判断接收端握手信号是否有效,有效则组包下一帧并且把数据FIFO读使能信号置为有效,把地址FIFO读使能置为无效,无效则缓存当前周期读取出来的FIFO信息并在下一周期继续进行接收端握手信号判断;
步骤D、接着从第二帧开始,判断当前帧是否为最后一帧,如果是则事务被完全组包并传输至事务顺序模块中,如果不是,则继续传输后续的帧;
步骤E、在事务顺序模块中,根据事务之间的优先级关系和当前链路的拥塞情况对事务队列中的事务进行排序,并且根据PCIe接口模块的握手信号是否有效来决定是否进行向上传送。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:
本发明基于FPGA的PCIe转三总线接口,可实现PCIe总线与三总线通用接口的协议转换和数据传输,以支持通信系统中通过PCIe总线与其他任意采用了控制总线、地址总线以及数据总线三总线接口的设备进行数据传输;该转换接口具有通用性、灵活性,且易于系统集成。
附图说明
图1是基于FPGA的PCIe转三总线接口总体结构图。
图2是PCIe接口模块的接口信号图。
图3是地址解码模块的接口信号图。
图4是AXIS转TRN模块的接口信号图。
图5是AXI-Stream接口数据信号与TRN接口数据信号的转换关系图。
图6是事务解析模块的结构图。
图7是64位寻址的存储器写事务解析模块的接口信号图。
图8是64位寻址的存储器写事务解析模块的状态机转换图。
图9是下行异步FIFO模块的结构图。
图10是下行发布事务异步FIFO中的命令FIFO读写数据信号的字段信息图。
图11是下行非发布事务异步FIFO中的命令FIFO读写数据信号的字段信息图。
图12是下行完成事务异步FIFO中命令FIFO的读写数据信号的字段信息图。
图13是事务组包模块的结构图。
图14是64位寻址的存储器写事务组包模块和命令FIFO读取控制模块的接口信息图。
图15是64位寻址的存储器写事务组包模块的状态机转换图。
图16是TRN转AXIS模块的接口信号图。
图17是下行RAM模块的读写信号的字段信息图。
图18是上行RAM模块的读写信号的字段信息图。
图19是同步FIFO1模块的读写信号的字段信息图。
图20是同步FIFO2模块的读写信号的字段信息图。
图21是寄存器组读写控制模块的信号接口图。
图22是下行数据通路单个事务包的解析流程图。
图23是上行数据通路单个事务包的解析流程图。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
本发明一种基于FPGA的PCIe转三总线接口包含PCIe接口模块、下行数据通路、上行数据通路、上下行数据交换通路以及配置寄存器模块,其总体结构图如图1所示。
PCIe接口模块实现PCIe总线协议的物理层、数据链路层以及事务层功能,完成数据从高速差分线到事务层并行传输接口的双向转换。该接口模块采用FPGA的PCIe IP核实现。PCIe IP核遵循PCIe基本规范,且可针对不同的带宽和应用需求进行配置。
PCIe IP核的配置过程主要是对IP核的通道数、事务层AXI-Stream接口宽度、事务层时钟频率以及事务包的最大负载长度等参数进行配置。其中IP核的通道数有1通道(x1)、2通道(x2)、4通道(x4)以及8通道(x8)四种配置选项,事务层AXI-Stream接口宽度有64bit和128bit两种配置选项,事务层时钟频率有62.5MHz、125MHz以及250MHz三种配置选项,事务包最大负载长度有128bytes、256bytes、512bytes以及1024bytes四种配置选项。用户可根据应用需求进行配置并例化IP核。
如图2所示,利用Xilinx公司的7系列PCIe IP核例化得到的一个四通道(x4),事务层AXI-Stream接口宽度为64bit,事务层时钟频率为250MHz,最大负载长度为512bytes的PCIe接口模块,其接口信号含义如下表所示。
表1 PCIe接口模块信号释义
信号名 信号描述
sys_rst_n 系统硬件异步复位信号,低电平有效
sys_clk 系统参考时钟
pci_exp_txp/n(0~3) 四通道(x4)差分信号
user_clk 事务层用户时钟信号
user_reset 事务层复位信号
user_link_up 链路连接信号
s_axis_tx_tlast 用户发送接口中的事务包尾帧信号
s_axis_tx_tdata 用户发送接口中的数据信号,64位
s_axis_tx_tkeep 用户发送接口中的数据字节有效指示信号,8位
s_axis_tx_tvalid 用户发送接口中的数据源有效信号
s_axis_tx_tready 用户发送接口中的目标端准备信号
tx_buf_av IP核内部的发送缓冲(Transmit Buffers)剩余空间信号,6位
m_axis_rx_tlast 用户接收接口中的事务包尾帧信号
m_axis_rx_tdata 用户接收接口中的数据信号,64位
m_axis_rx_tkeep 用户接收接口中的数据字节使能信号,8位
m_axis_rx_tvalid 用户接收接口中的数据源有效信号
m_axis_rx_tready 用户接收接口中的目标端准备信号
下行数据通路对PCIe IP核的用户接口所发出的各类事务进行解析,由于此桥接逻辑本身也是一种设备,并且其下游还有其他接口设备,所以根据事务作用于不同的目标(桥本身或者下游设备),把对应的数据和命令等信息传输到相应的目标上,在其中完成整个数据通路的流量控制,以及为上行数据通路的组包过程计算其所需的相应字段和完成数据的大小端格式转换等。下行数据通路包括地址解码模块、AXIS(Advanced eXtensibleInterface Stream)转TRN(Transaction interface)模块、作用于下游设备的三类事务解析模块:发布(Posted)解析模块、非发布(Nonposted)解析模块和完成(Completion)解析模块,以及与其对应的各类事务的异步FIFO模块和作用于配置寄存器的类型0配置事务解析模块。
其中,地址解码模块对PCIe接口模块的用户接收接口信号发出的事务进行地址、ID和事务类型判断,以此来确定当前接收的事务是否是作用于配置寄存器(本设计的本质为一个桥接逻辑,所以其有自己的配置空间和配置寄存器)或者下游的设备(下游的通用总线上可以通过二次编程,连接不同接口的设备),进而确定是否向下转发当前事务。
地址解码模块的信号如图3所示。图中的AXI-Stream格式的信号(其中后缀为i或o的都对应为表1中的同一个信号,在这里只是完成一个选通功能)在表1中已经阐述。另外两个信号是从寄存器组读写控制模块输入到地址解码模块的,其含义分别为,addrreg_busreg[31:0]表示寄存器组读写控制模块从配置寄存器组中读取出来的基址寄存器、二级总线基址寄存器、二级总线限界寄存器、主总线号、设备号、功能号、二级总线号以及从属总信号等信息,而addrreg_husreg_en信号则表示数据有效使能信号。
在地址解码模块中,当系统初始化完成后,寄存器组读写控制模块便开始从寄存器组中把上述信息读取出来并传输给地址解码模块,由于这些信息在寄存器组中的位置是固定的,并且每次系统运行只需要在初始化后进行一次上述操作,所以并不需要地址解码模块给出读使能和读地址信号。然后,在地址解码模块中,用本地寄存器把addrreg_busreg[31:0]信号传送进来的信息进行缓存。对于AXI-Stream信号传输进来的事务,如果其使用的是地址路由,则将其事务包中的地址与上述的基址寄存器、二级总线基址寄存器和二级总线限界寄存器进行比较,如果地址在基址寄存器限定的范围内,则事务是直接作用于桥本身,如果地址在二级总线基址寄存器和二级总线限界寄存器限定的范围内,则向下转发至二级接口一端;如果事务使用的是ID路由,则把事务中的总线号、设备号以及功能号与上述主总线号、设备号、功能号、二级总线号以及从属总线号等进行比较,如果事务中的总线号、设备号以及功能号与主总线号、设备号、功能号相同,则事务作用于桥本身,如果事务中总线号等于二级总线号或者从属总线号,则向下转发该事务。对于ID路由事务中的配置事务,由于桥只能识别上游的类型1配置事务,当按上述判断类型1配置事务是作用于桥本身时,则将此类型1配置事务修改为类型0配置事务,若是作用于下游设备,则向下转发。
AXIS转TRN模块把PCIe IP核发送接口的AXI-Stream接口信号转换成TRN接口信号。转换之后,这些信号将被传输到各个事务解析模块。该模块接口信号如图4所示。图中左边的AXI-Stream格式信号在表1中已经阐述,图中右边的TRN信号含义如表2所示。
表2 TRN接口信号释义
信号名 信号描述
trn_rsof_n/trn_tsof_n 用户接收端/发送端数据包首帧指示信号,低电平有效
trn_reof_n/trn_teof_n 用户接收端/发送端数据包尾帧信号,低电平有效
trn_rd/trn_td 用户接收端/发送端帧数据信号,64位
trn_rsrc_rdy_n/trn_tsrc_rdy_n 用户接收端/发送端数据源端准备信号,低电平有效
trn_rsrc_dsc_n/trn_tsrc_dsc_n 用户接收端/发送端数据源端断开连接信号,低电平有效
trn_rrem_n/trn_trem_n 用户接收端/发送端双字使能信号,低电平有效
trn_rdst_rdy_n/trn_tdst_rdy_n 用户接收端/发送端数据接收端准备信号,低电平有效
表2中的TRN接口信号由表1中对应的用户接收接口信号转换而来。其中主要是实现AXI-Stream接口信号中的数据信号到TRN接口信号中的帧数据信号以及AXI-Stream接口信号中的数据字节使能信号到TRN信号接口中的双字(1双字等于4字节)使能信号的转换。AXI-Stream接口数据信号与TRN接口数据信号之间的转换关系如图5所示,即通过组合逻辑调换每一帧中两个双字的位置即可完成这两个信号的转换。AXI-Stream接口数据字节使能信号与TRN接口数据双字使能信号的转换关系为:对于数据接口的非最后一帧,双字使能信号值都为1’b0,表示当前数据帧的两个双字都有效;对于数据包的最后一帧,其需要判断AXI-Stream接口数据字节使能信号的值;如果为8’hFF,则表明最后一帧的8个字节都有效,因此将TRN接口数据双字使能信号赋值为1’b0;如果为8’h0F,则表明最后一帧的低4个字节有效,因此将TRN接口数据双字使能信号赋值为1’b1,如果为其他值,则非法。其他TRN接口信号的转换则可直接由对应的AXI-Stream接口直接赋值或者取反赋值得到。
事务解析模块按事务类型分为三类:发布事务解析模块、非发布解析模块和完成事务解析模块,是用来接收和解析作用于下游设备的所有事务,并把解析出来的数据、地址以及命令等信息写入相应的异步FIFO模块进行缓冲和跨时钟域处理。如图6所示,其中发布事务解析模块包括64位寻址的存储器写事务解析模块和32位寻址的存储器写事务解析模块以及这两个子模块的仲裁模块;非发布事务解析模块包括64位寻址的存储器读事务解析模块、32位寻址的存储器读事务解析模块、IO读事务解析模块、IO写事务解析模块、类型1配置读事务解析模块和类型1配置写事务解析模块,以及这些解析子模块的仲裁模块;完成事务解析模块包括带数据的完成事务解析模块和不带数据的完成事务解析模块和它们的仲裁模块。
在协议规范中,类型0配置读写事务也是非发布事务的一种,但是,由于其是作用于桥接逻辑本身的配置寄存器组,所以被分类出来单独进行解析并且由专门的数据通路传输到配置寄存器组模块。
发布事务解析模块中的64位寻址的存储器写事务解析模块的接口信号如图7所示,图中TRN接口信号和系统时钟以及复位信号表1、表2中已经介绍,其他信号释义如表3所示。
表3 64位寻址的存储器写事务解析模块接口信号释义
信号名 信号描述
posted_addrfifo_wr_en 地址FIFO写使能信号,高电平有效
posted_datafifo_wr_en 数据FIFO写使能信号,高电平有效
posted_cmdfifo_wr_en 命令FIFO写使能信号,高电平有效
posted_addrfifo_in 地址FIFO数据写入信号,64位
posted_datafifo_in 数据FIFO数据写入信号,64位
posted_cmdfifo_in 命令FIFO数据写入信号,25位
memwr64_fmt_type 事务类型仲裁信号,7位
posted_datafifo_rem_size 数据FIFO剩余空间信号,7位
图8展示了64位寻址的存储器写事务解析模块的状态机转换过程,为了简化表示转化条件,图中a2表示源端、目标端的握手信号都有效且低电平有效。a1表示当前帧是首帧或者尾帧且低电平有效。a0表示流量控制判断,它由异步数据FIFO的剩余空间信号和数据包首帧中所包含的负载长度字段(Length)进行比较得到,高电平有效。z2为命令FIFO写使能信号,高电平有效。z1为地址FIFO写使能信号,高电平有效。z0为数据FIFO写使能信号,高电平有效。
系统复位完成后,状态机处于初始状态,即RX_RST,若当前两端的握手信号有效,当前数据帧为首帧且流量控制条件满足,此时从首帧中解析出事务编码字段、负载长度字段以及字节使能字段等信息,写入命令FIFO。然后状态机跳转到RX_MEM_WR64_QW2状态,在这个状态中,若两端握手信号有效,则接收和解析事务包的第二帧,此事务的第二帧为64位地址,解析后写入地址FIFO。然后状态机跳转到RX_MEM_WR64_QWN状态,若两端握手信号有效且当前数据帧不是事务包最后一帧,则接收和解析事务包的第三帧,此事务的第三帧到最后一帧都是此事务包的负载数据,解析这些数据帧,并按时序写入数据FIFO,并且状态机的下一个状态还是RX_MEM_WR64_QWN状态;若两端握手信号有效且当前数据帧为事务包的最后一帧,则接收并解析当前帧,写入数据FIFO,并且状态机跳转到RX_MEM_WR64_WT状态。在RX_MEM_WR64_WT状态中,把三类异步FIFO的写使能信号置为无效,并且状态机回到初始状态。在状态跳转过程中,如果跳转条件不满足,则把当前帧的信息缓存并跳转至相应的等待状态以等待跳转条件满足,如首帧的等待状态RX_MEM_WR64_QW1_WT。
其他事务解析模块的解析过程大致与64位寻址的存储器写事务的解析过程类似,但各个事务解析过程都存在一些差异。对于32位寻址的存储器写事务,由于其路由地址为32位,所以在此事务的第二帧,高32位为地址,低32位为负载数据,在解析这一帧的过程中,要同时写入地址FIFO和数据FIFO,且对地址FIFO和数据FIFO写入信号的高32位写入0。对于IO写事务和完成事务,由于其路由方式为ID路由,所以与采用地址路由的事务不同,这些事务的第二帧写入地址FIFO的是ID而不是地址。而对于读事务,由于读事务和不带数据的完成事务这几个事务中是不携带负载数据的,所以不必对数据FIFO进行操作。而对于作用于桥的配置寄存器模块的类型0配置读写事务,则是解析之后直接通过寄存器读写控制模块作用于桥的配置寄存器。各类事务的仲裁模块,只需在每个时钟周期对各个事务解析模块的事务类型仲裁信号进行有效性判断即可完成仲裁逻辑。
异步FIFO模块主要用来缓存事务解析后的有用信息,并且用来隔离PCIe时钟域和下游的通用总线时钟域。图中每个异步FIFO模块都由命令FIFO,数据FIFO和地址FIFO组成,分别存储由事务解析模块传送过来的命令、数据以及地址等信息。
如图9所示,下行异步FIFO模块根据事务的类型的不同都分为三个子模块:下行发布事务异步FIFO模块、下行非发布事务异步FIFO模块和下行完成事务异步FIFO模块。而每类事务FIFO模块又分为命令FIFO模块、地址FIFO模块以及数据FIFO模块。每个FIFO模块都通过例化FIFO IP核来实现。
在下行发布事务异步FIFO模块中,由于在例化PCIe IP核时,限定了最大负载长度为512字节,所以命令FIFO、地址FIFO和数据FIFO的深度都为128。命令FIFO的位宽为25位,其字段信息如图10所示。其中Fmt为事务包格式字段,Type为事务包类型字段,Length为事务包数据负载长度字段,Byte Enable为事务包字节使能字段。地址FIFO的位宽为64位,这是由单个事务的路由地址的最大位宽决定的,在PCIe体系中,路由地址的位宽存在64位和32位两种,当为后者时,把其赋值给地址FIFO写信号的低32位,高32位则写入0且是无效信息。数据FIFO的位宽也是64位,这是由于PCIe事务层的数据接口位宽为64位,即一帧的最大数据量为64位。
在下行非发布事务异步FIFO模块中,由于非发布事务类型中的事务要么不携带数据,要么单个事务的数据量只能为32bit,即1双字,所以命令FIFO、地址FIFO和数据FIFO的深度均为8。命令FIFO位宽为53bit,其字段信息如图11所示。其中RamAddr地址为当前事务中写入下行RAM模块的数据的写入地址。地址FIFO的位宽为64位,如果当前事务的路由方式为地址路由且地址长度为32位时,将其赋值给地址FIFO写信号的低32位,而当事务的路由方式为ID路由时,完成者ID被赋值给地址FIFO写信号的低16位。数据FIFO的位宽为32位。
在下行完成事务FIFO异步模块中,命令FIFO和地址FIFO的深度为8,而数据FIFO的深度为128。命令FIFO的位宽为32位,其字段信息如图12所示。其中State为事务完成状态信号,表示事务的完成情况。ByteCount字段为字节计数信号,表示剩余需要传输的负载数据量。由于完成事务的路由方式都是ID路由,所以地址FIFO位宽为16位,其写入的信息为当前完成事务的完成者ID字段。数据FIFO的位宽为64位。
上行通路通过从异步FIFO模块中提取信息,按照PCIe协议规范进行组包,并且经过事务仲裁后传输到PCIe IP的接收接口上。上行数据通路包括上行异步FIFO模块,事务组包模块,类型0配置请求完成事务组包模块,事务顺序模块以及TRN转AXIS模块。
上行异步FIFO模块的接口和下行异步FIFO模块一样,不同是其读写操作所处的时钟域刚好相反,下行异步FIFO模块的写时钟为PCIe的事务层时钟信号,读时钟为通用接口的时钟信号。
事务组包模块按事务类型分为三类:发布事务组包模块、非发布事务组包模块以及完成事务组包模块。三类事务组包模块根据从下行数据通路的异步FIFO模块中提取出的命令和事务类型信息对当前要组包的事务类型进行判断,并利用从异步FIFO中读取的其他信息,如地址、数据、负载长度等,按照PCIe协议规范进行事务组包,并向上传输。其中完成事务的组包还需从上下行数据交换通路的下行RAM模块中提取相应的字段,如低地址字段。
如图13所示,发布事务组包模块包括64位寻址的存储器写事务组包模块、32位寻址的存储器写事务组包模块、命令FIFO读取控制模块以及两个子事务的仲裁模块;非发布事务组包模块包含64位寻址的存储器写事务组包模块、32位寻址的存储器事务组包模块、IO写事务组包模块、IO读事务组包模块、命令FIFO读取控制模块以及两个子事务的仲裁模块;完成事务组包模块包括带数据的完成事务组包模块、不带数据的完成事务组包模块、命令FIFO读取控制模块以及两个子事务的仲裁模块。
由于配置事务只能由主接口(PCIe接口)所连接的上游的根集合点(RootComplex)发起,用来配置本系统的桥接逻辑的配置寄存器和从接口(通用总线接口)下面所连接的设备,所以在上行数据通路的非发布事务组包模块中没有配置事务组包子模块。与事务解析模块一样,类型0配置请求完成事务被分类出来单独进行组包并由专门的数据通路传送到事务顺序模块。
其中发布事务组包模块中的64为寻址存储器写事务组包模块和命令FIFO读取控制模块的接口信号如图14所示。图中TRN接口信号和系统时钟以及复位信号表1、表2中已经介绍,其他信号释义如表4所示。
命令FIFO读取控制模块的主要作用是控制发布事务组包逻辑对发布FIFO中的命令FIFO的读取。由于发布事务解析模块中包含两个子事务解析模块,如果在每个子事务模块中都对命令FIFO读使能信号进行控制,则会产生错误的读操作,为了防止产生错误的读操作,这里把两个子事务模块对命令FIFO的读操作集中到命令FIFO读取模块进行控制。
表4 64位寻址的存储器写事务组包模块和命令FIFO读取控制模块接口信号释义
信号名 信号描述
up_datafifo_rd_en 数据FIFO读使能信号,高电平有效
up_addrfifo_rd_en 地址FIFO读使能信号,高电平有效
up_addrfifo_out 地址FIFO数据读出信号,64位
up_datafifo_out 数据FIFO数据读出信号,64位
up_cmdfifo_out 命令FIFO数据读出信号,25位
up_cmdfifo_rd_en_delay 命令FIFO读使能延时信号,高电平有效
wr64_arb_cmdfifo 64位寻址写事务组包指示信号,低电平有效
up_cmdfifo_rd_en 命令FIFO读使能信号,高电平有效
up_cmdfifo_empty 命令FIFO空信号,高电平有效
wr32_arb_cmdfifo 32位寻址写事务组包指示信号,低电平有效
对于命令FIFO读取控制模块,在FIFO空信号无效的情况下,置位命令FIFO读使能信号,在下个时钟沿读取命令FIFO中的一个事务,并在这个周期把命令FIFO读使能信号置为零。直到当前所读取的事务被两个子事务组包模块其中一个的事务组包指示信号告知已处理完,命令FIFO读使能信号才再次进入以上所述的逻辑判断过程。
图15展示了64位寻址的存储器写事务组包模块的状态机转换过程,为了简化表示转化条件,图中a3表示目标端的握手信号都有效且低电平有效。a2表示目标端的流量控制且高电平有效。a1为命令FIFO读使能延时信号且高电平有效。a0表示当前帧是否为最后一帧,由剩余待传输的负载数据大小判断得到。z1为地址FIFO读使能信号,高电平有效。z0为数据FIFO读使能信号,高电平有效。
系统复位完成后,状态机处于初始状态,即UP_RST,若目标端握手信号有效,流量控制条件满足并且命令FIFO读使能信号有效,则在当前状态,利用命令FIFO读取控制模块从命令FIFO中读出的信息组包当前事务包的首帧,并置位地址FIFO读使能信号。然后状态机跳转到UP_MEMWR64_QW2状态,若目标端握手信号有效,则利用从地址FIFO读出的信息组包事务包的第二帧,并把地址FIFO读使能置为无效,数据FIFO读使能置为有效。然后状态机跳转到UP_MEMWR64_QWN状态,若目标端握手信号有效并且当前帧为最后一帧,则利用从数据FIFO中读出的信息组包事务包的第三帧也是最后一帧,并且把地址FIFO、数据FIFO的读使能信号都置为无效,状态机跳转到UP_MEMWR64_END状态,此状态的作用是为了插入一周期的延时;若目标端握手信号有效但当前帧不是最后一帧,则利用从数据FIFO中读出的信息组包事务包的第三帧也是负载数据的第一帧,并且把地址FIFO读使能信号都置为无效,数据FIFO读使能信息置为有效,状态机的下一状态还是UP_MEMWR64_QWN状态。状态机跳转到UP_MEMWR64_END后,在一周期直接回到初始状态。
在状态跳转过程中,如果跳转条件不满足,则把当前帧的信息缓存并跳转至相应的等待状态,以等待跳转条件满足。如首帧的等待状态UP_MEMWR64_QW1_WT,第二帧的等待状态UP_MEMWR64_QW2_WT以及第三帧到尾帧的等待状态UP_MEMWR64_QWN_WT。
其他事务组包模块的组包过程与64位寻址存储器写事务的组包过程类似,不同事务组包之间存在些许差异。对于采用ID路由的事务,如IO事务,配置事务和完成事务,在组包事务包的第二帧时,利用的是ID信息进行组包,并且由于ID路由的信息在第二帧中只占32位,所以第二帧还会携带32位的负载数据。完成事务在组包第一、第二帧时还需要利用从下行RAM模块中读取出的数据。而对于读事务,如存储器读,IO读,由于其不需要携带数据,所以此类数据包只需两帧即可传输完毕。对于IO写和配置写事务,其单个数据包携带数据大小为32位,而这32位负载数据和ID信息一起组包成事务包的第二帧,所以此类事务包也只需两帧即可传输完毕。
事务顺序模块是依照PCIe协议中关于事务顺序(transaction ordering)有关内容来实现的,其依照协议中规定的事务顺序,对事务进行仲裁。此模块的四路输入信号和一路输出信号均为TRN接口信号,其接口信号组成和含义在表2中有释义。事务传送顺序是保证数据完整性的基础,并且可以避免死锁的产生。事务的传送顺序如表5所示。我们依照表中的事务之间的顺序关系来实现事务顺序模块,同时其也是事务的仲裁模块。为了实现表中的排序,此模块中还包含一个RAM模块,其深度为8,用来作为排序队列。
表5事务顺序规则
Figure BDA0002270902700000161
表5定义了事务通过此桥接转换逻辑时,事务的排序要求。其中,列中的事务表示先生成的事务,行中的事务表示随后生成的事务,表中的条目指示两个事务之间的排序关系。当关系为“是”时,表示当发生阻塞时,让行事务跳过列事务进行传输,以避免死锁。当关系为“否”时,表示始终不能让行事务跳过列事务进行传输,这是生产者/消费者模块所强制要求的,而在定义事务顺序的时候,必须保证生产者/消费者的正确运行,以保证数据传输的完整性。对于表的条目中只有一个判决的,其表示强制执行,对于有两类判决的,作以下解释:
对于第A行、第1列的选项a(下面统一以这种格式表示:A1a),其含义为,在存储器写事务包中的属性(Attr)字段被设置为0的情况下,它不可以跳过它前面的任何存储器写事务;对于A1b,其含义为,在存储器写事务包中的属性(Attr)字段被设置为1的情况下,它可以跳过它前面的任何存储器写事务。D1a的含义是如果读完成事务包的属性字段设置为0,则此读完成事务不可以跳过其前面的存储器写事务;D1b的含义为,如果读完成事务包的属性字段被设置1,则此读完成事务可以跳过其前面的存储器写事务。D4a的含义是不同读请求的读完成事务之间,在必要情况下,可以相互跳过;D4b的含义是同一个读请求的读完成事务(它们拥有相同的事务ID)必须按照地址递增的顺序传输。
TRN转AXIS模块把用户发送端的TRN接口信号转换成PCIe IP核事务层的接收端的AXI-Stream接口信号。该模块接口信号如图16所示。其信号的含义在前面的表1、表2中已解释。该模块转换逻辑是AXIS转TRN模块转换逻辑的反过程。
上下行数据交换通路用来在上行数据通路和下行数据通路之间传输相关信息,由以下几个模块组成:上行RAM模块、下行RAM模块、同步FIFO1模块、同步FIFO2模块以及寄存器组读写控制模块。
下行RAM模块主要用来存储下行数据通路中从非发布事务解析模块中提取出来的与上行完成事务组包有关的字段。这些字段由下行数据通路的非发布事务解析模块输出,写入下行RAM模块,然后上行数据通路的完成事务组包模块在组包完成事务的时候,从下行RAM模块中取出需要的信息进行组包。
下行RAM模块中包含RAM存储逻辑和读写地址生成逻辑,其中,为了简化实现过程,存储逻辑采用RAM IP核来实现,而读写地址则是根据输入的读、写使能信号和当前RAM存储体中的空闲地址空间来得到的。
下行RAM模块深度为16,位宽为54位。其读写信号各字段的含义如图17所示,LowerAddress为低地址字段,它在非发布事务解析模块中由字节使能等字段计算得到,反映在完成数据包有效载荷中返回数据的第一个允许字节的地址。Length字段表示有效数据载荷的大小,单位为双字(DW)。TC为流量类别字段,Attr为属性比特字段。Request ID和Tag分别为请求者ID和标记字段。
上行RAM模块主要用来存储上行数据通路中非发布事务组包模块从上行数据通路的异步FIFO中提取出来的与下行完成事务解析有关的字段。这些字段从上行数据通路的非发布事务组包模块的输出写入上行RAM模块,下行数据通路的完成事务解析模块在解析完成事务的时候,从上行RAM模块中取出指定地址的信息。与下行RAM模块一样,上行RAM模块也包含RAM存储逻辑和读写地址生成逻辑,存储逻辑采用RAM IP核来实现。
上行RAM模块深度为16,位宽为24bit。其读写信号各字段的含义如图18所示。Request ID和Tag字段为PCIe协议中定义的数据包的包头中的相应字段,其含义分别为请求者ID和读写请求的完成子事务的顺序标记。
同步FIFO1模块主要用来对类型0配置事务解析模块解析出的事务信息进行缓冲,并将解析出来的数据传输给寄存器组读写控制模块。其深度为4,位宽为75bit。其读写数据信号的组成字段如图19所示。En字段为数据有效使能信号,用来指示Data字段是否存在有效数据,除此字段外,其他字段均是从类型0配置事务包中解析出来的字段。其中,RegID为寄存器ID字段,ExtRegID为拓展寄存器ID字段,FunID为功能号字段,DevID为设备号字段,BusID为总线号字段,RequestID为请求者ID字段,Data为数据字段。
同步FIFO2模块主要用来对寄存器组读写控制模块读出的信息进行缓冲,并将信息传输给类型0配置完成事务组包模块。其深度为4,位宽为65bit。其读写数据信号的组成字段如图20所示。En字段为数据有效使能信号,用来指示Data字段是否存在有效数据。其中CompleteID为完成者ID字段,RequestID为请求者ID字段,Data为数据字段。
配置寄存器模块是实现桥的配置寄存器空间,其按照协议中关于桥的配置寄存器组,即头类型1的配置寄存器空间的定义和功能描述来实现即可。
寄存器组读写控制模块主要实现对配置寄存器组的读写控制,分别实现其对配置寄存器组的读、写操作。其信号如图21所示,图中信号释义如表6所示,其中输出给地址解码模块的两个信号:addrreg_busreg[31:0]和addrreg_busreg_en已在前文做出解释。
表6寄存器组读写控制模块信号释义
信号名 信号描述
wrdata_to_reg 寄存器组的数据写入信号,32位
wr_reg_en 寄存器组的写使能信号,高电平有效
reg_id 寄存器组读写地址信号,10位
rd_reg_en 寄存器组的读使能信号,高电平有效
rddata_from_reg 寄存器组的数据读出信号,32位
fifo1_rd_en 同步FIFO1的读使能信号,高电平有效
fifo1_empty 同步FIFO1的空信号,高电平有效
fifo1_rd_data 同步FIFO1的数据读出信号,75位
fifo2_almost_full 同步FIFO2的将满信号,高电平有效
fifo2_wr_en 同步FIFO2的写使能信号,高电平有效
fifo2_wr_data 同步FIFO2的数据写入信号,65位
以下分别基于下行数据通路和上行数据通路来说明事务的处理流程。
下行数据通路单个事务包的解析流程如图22所示。在系统初始/复位化完成后,上位机配合驱动一起,按照PCIe协议进行组包并传输。事务包信息到达PCIe IP核的事务层的用户接收接口(对PCIe IP核来说为发送接口)上后,首先进行发送端和接收端的握手信号的判断,若都有效,则地址解码模块对事务包地址进行判断,若在配置寄存器限定的范围内,则往下转发到事务解析模块,若不在范围内,则直接丢弃。然后在事务解析模块中进行流量控制判断,如果满足流量控制条件,则提取有用信息并写入对应的异步FIFO模块和上行RAM模块,若不满足,则缓存第一帧并等待流控条件满足。然后再判断发送端的握手信号是否有效,如果有效,则继续接收并解析下一帧,否则在时钟上升沿来临时再次判断发送端握手信号是否有效。然后从第二帧开始,每接收一帧都需判断其是否是最后一帧,如果是,则当前事务传输结束,如果不是,则继续传输传输数据包的后续帧。
上行数据通路单个事务包的组包流程如图23所示。在系统初始化/复位完成后,首先,在命令FIFO读取控制模块中,对命令FIFO空信号进行判断,若命令FIFO非空,即表明至少有一个事务待组包传输,则读取命令FIFO的信息。然后在子事务组包模块中,判断接收端(这里接收端为事务顺序模块)握手信号是否有效,如果有效,则根据从命令FIFO中读取的信息组包事务包的第一帧并传输至事务顺序模块的事务队列中,并且把地址FIFO读使能信号和发送端(这里发送端就是事务组包模块)握手信号置为有效,把命令FIFO读使能置为无效。然后下一周期的时钟上升沿继续判断接收端握手信号是否有效,有效则组包下一帧并且把数据FIFO读使能信号置为有效,把地址FIFO读使能置为无效,无效则缓存当前周期读取出来的FIFO信息并在下一周期继续进行接收端握手信号判断。然后再判断当前帧(第二帧开始)是否为最后一帧,如果是则事务被完全组包并传输至事务顺序模块中,如果不是,则继续传输后续的帧。最后,在事务模块中,对事务队列中的事务进行排序,并且根据接收端(此时接收端为PCIe接口模块)的握手信号是否有效来决定是否进行向上传送。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围内。

Claims (7)

1.一种基于FPGA的PCIe转三总线接口,其特征在于,包括采用FPGA的PCIe IP核的PCIe接口模块、下行数据通路、上行数据通路以及上下行数据交换通路;
PCIe接口模块,用于实现PCIe总线协议的物理层、数据链路层以及事务层功能,完成数据从高速差分线到事务层并行传输接口的双向转换;PCIe接口模块的事务层包括用户接收接口和用户发送接口,用户发送接口用于接收上行数据通路所输入的各类组包事务,用户接收接口用于输出各类事务至下行数据通路;
下行数据通路,用于对用户接收接口所输入的各类事务、上下行数据交换通路输入的信息进行解析,根据事务作用于不同的目标,将不同的数据和命令传输到相应的目标上,在其中完成整个数据通路的流量控制,并为上行数据通路的组包过程计算其所需的相应字段和完成数据的大小端格式转换;
上下行数据交换通路,用于在上行数据通路和下行数据通路之间传输信息;
上行数据通路包括三总线接口输入信号端,上行数据通路用于对上下行数据交换通路和三总线接口输入信号端传输过来的信息,按照PCIe协议规范进行组包,并且经过事务仲裁后传输到PCIe接口模块的用户发送接口上。
2.根据权利要求1所述的一种基于FPGA的PCIe转三总线接口,其特征在于,下行数据通路包括地址解码模块、AXIS转TRN模块、发布事务解析模块、非发布事务解析模块、完成事务解析模块、类型0配置事务解析模块、下行发布事务异步FIFO模块、下行非发布事务异步FIFO模块和下行完成事务异步FIFO模块;
上行数据通路包括上行发布事务异步FIFO模块、上行非发布事务异步FIFO模块、上行完成事务异步FIFO模块、完成事务组包模块、非发布事务组包模块、发布事务组包模块、类型0配置请求完成事务组包模块、事务顺序模块以及TRN转AXIS模块;
上下行数据交换通路包括上行RAM模块、下行RAM模块、第一同步FIFO模块、第二同步FIFO模块、配置寄存器组以及寄存器组读写控制模块;其中,
地址解码模块,用于对用户接收接口信号端输入的事务和寄存器组读写控制模块输入的寄存器信息进行地址、ID和事务类型判断,输出AXI-Stream接收接口信号至AXIS转TRN模块;
AXIS转TRN模块,用于将AXI-Stream接收接口信号转换成TRN接收接口信号,输出TRN接收接口信号至发布事务解析模块、非发布事务解析模块、完成事务解析模块和类型0配置事务解析模块;
发布事务解析模块,用于对TRN接收接口信号携带的发布事务进行解析,解析出事务的事务编码、数据负载大小、字节使能字段、地址以及负载数据信息,输出发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号至下行发布事务异步FIFO模块;
非发布事务解析模块,用于对TRN接收接口信号携带的非发布事务进行解析,解析出事务的事务编码、流量类别字段、属性字段、数据负载大小、请求者ID、标记字段、字节使能字段、地址以及负载数据信息,输出非发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号至下行非发布事务异步FIFO模块,输出下行RAM数据写入信号输出至下行RAM模块;
完成事务解析模块,用于对TRN接收接口信号携带的完成事务、上行RAM模块输入的数据进行解析,解析出事务的事务编码、完成状态字段、数据负载大小、字节使能字段、完成者ID字段以及负载数据信息,输出完成事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号至下行完成事务异步FIFO模块;
类型0配置事务解析模块,用于对TRN接收接口信号携带的类型0配置事务进行解析,解析出事务的总线号、设备号、功能号、寄存器号、拓展寄存器号、请求者ID以及负载数据信息,输出第一同步FIFO数据写入信号至第一同步FIFO模块;
下行发布事务异步FIFO模块,用于对发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号携带的事务信息进行缓存和跨时钟域处理,输出下行发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号,这三个信号即为三总线接口输出信号;
下行非发布事务异步FIFO模块,用于对非发布事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号携带的事务信息进行缓存和跨时钟域处理,输出下行非发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号,这三个信号即为三总线接口输出信号;
下行完成事务异步FIFO模块,用于对完成事务解析模块的地址FIFO数据写入信号、数据FIFO数据写入信号和命令FIFO数据写入信号携带的事务信息进行缓存和跨时钟域处理,输出下行完成事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号,这三个信号即为三总线接口输出信号;
上行发布事务异步FIFO模块,用于对三总线接口输入信号端输入的发布事务信息进行缓存和跨时钟域处理,输出上行发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号至发布事务组包模块;
上行非发布事务异步FIFO模块,用于对三总线接口输入信号端输入的非发布事务信息进行缓存和跨时钟域处理,输出上行非发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号至非发布事务组包模块;
上行完成事务异步FIFO模块,用于对三总线接口输入信号端输入的完成事务信息进行缓存和跨时钟域处理,输出上行完成事务异步FIFO 模块的地址FIFO数据读出信号、数据FIFO数据读出信号和命令FIFO数据读出信号至完成事务组包模块;
非发布事务组包模块,用于对上行非发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信息和命令FIFO读出信号携带的事务信息,按照PCIe协议中非发布事务数据包的格式和时序进行组包,输出上行RAM数据写入信号至上行RAM模块,输出非发布事务组包的TRN发送接口信号至事务顺序模块;
发布事务组包模块,用于对上行发布事务异步FIFO模块的地址FIFO数据读出信号、数据FIFO数据读出信息和命令FIFO读出信号携带的事务信息,按照PCIe协议中发布事务数据包的格式和时序进行组包,输出发布事务组包的TRN发送接口信号至事务顺序模块;
完成事务组包模块,用于对上行完成事务异步FIFO模块中的地址FIFO数据读出信号、数据FIFO数据读出信息和命令FIFO读出信号携带的事务信息,按照PCIe协议中完成事务数据包的格式和时序进行组包,输出完成事务组包的TRN发送接口信号至事务顺序模块;
类型0配置完成事务组包模块,用于对第二同步FIFO模块输入的第二同步FIFO数据读出信号,按照PCIe协议中完成事务数据包的格式和时序进行组包,输出类型0配置完成事务组包的TRN发送接口信号至事务顺序模块;
事务顺序模块,用于对发布式事务组包模块、非发布式事务组包模块、完成事务组包模块和类型0配置完成事务组包模块的四路TRN发送接口信号携带的事务进行排序,输出一路事务顺序模块仲裁后的TRN发送接口信号至TRN转AXIS模块;
TRN转AXIS模块,用于对事务顺序模块输出的一路TRN发送接口信号转换成对应的AXI-Stream接口发送信号,输出AXI-Stream接口发送信号至PCIe接口模块;
上行RAM模块,用于对非发布事务组包模块的上行RAM数据写入信号携带的请求者ID和标记字段进行缓存,输出上行RAM数据读出信号至完成事务解析模块;
下行RAM模块,用于对非发布事务解析模块的下行RAM数据写入信号携带的低地址字段、数据负载大小、属性字段、流量类别、字节使能、请求者ID以及标记字段进行缓存,输出下行RAM数据读出信号至完成事务组包模块;
第一同步FIFO模块,用于对类型0配置事务解析模块的第一同步FIFO数据写入信号携带的寄存器ID、拓展寄存器ID、设备ID、总线ID、请求者ID以及负载数据字段进行缓存,输出第一同步FIFO数据读出信号至寄存器组读写控制模块;
第二同步FIFO模块,用于对寄存器组读写控制模块的第二同步FIFO数据写入信号携带的请求者ID、完成者ID和负载数据字段进行缓存,输出第二同步FIFO数据读出信号至类型0配置完成事务组包模块;
寄存器组读写控制模块,用于实现对配置寄存器组的读写操作,对第一同步FIFO模块的数据读出信号携带的事务信息和配置寄存器组的数据读出信号携带的寄存器信息进行解析,输出地址/总线寄存器传输信号至地址解码模块,输出寄存器组的数据写入信号和寄存器组的读写地址信号至配置寄存器组,输出同步第二FIFO数据写入信号至第二同步FIFO模块。
3.根据权利要求2所述的一种基于FPGA的PCIe转三总线接口,其特征在于,配置寄存器组实现桥的配置寄存器空间,其按照PCIe协议中关于桥的配置寄存器组,即头类型1的配置寄存器空间的定义和功能描述来实现。
4.根据权利要求2所述的一种基于FPGA的PCIe转三总线接口,其特征在于,事务顺序模块依照PCIe协议中关于事务顺序内容来实现,其依照协议中规定的事务顺序,根据链路拥塞情况,对事务进行仲裁,是保证数据高效传输的基础。
5.根据权利要求2所述的一种基于FPGA的PCIe转三总线接口,其特征在于,上行发布事务异步FIFO模块、上行非发布事务异步FIFO模块、上行完成事务异步FIFO模块、下行发布事务异步FIFO模块、下行非发布事务异步FIFO模块以及下行完成事务异步FIFO模块均分别包括命令FIFO、数据FIFO和地址FIFO组成;上行通路三种事务的异步FIFO和下行通路的三种事务的异步FIFO不同是其读写操作所处的时钟域刚好相反,下行通路的三中事务异步FIFO的写时钟为PCIe的事务层时钟信号,读时钟为三总线接口时钟信号;所述类型0配置请求完成事务组包模块被分类出来单独进行组包并由专门的数据通路传送到事务顺序模块。
6.基于权利要求2所述的一种基于FPGA的PCIe转三总线接口的下行数据通路单个事务包的解析方法,其特征在于,包括以下步骤:
步骤1、在系统初始/复位化完成后,上位机按照PCIe协议进行组包,事务包信息到达PCIe IP核的事务层的用户接收接口后,首先进行发送端和接收端的握手信号的判断,若都有效,则地址解码模块对事务包地址进行判断,若在配置寄存器限定的范围内,则往下转发到事务解析模块,若不在范围内,则直接丢弃;事务解析模块包括发布事务解析模块、非发布事务解析模块、完成事务解析模块以及类型0配置事务解析模块;其中发布事务解析模块包括32位寻址存储器写事务解析模块和64位寻址存储器写事务解析模块,非发布事务解析模块包括32位寻址存储器读事务解析模块、64位寻址存储器读事务解析模块、IO读事务解析模块、IO写事务解析模块、类型1配置读事务解析模块和类型1配置写事务解析模块,完成事务解析模块包括带数据的完成事务解析模块和不带数据的完成事务解析模块;
步骤2、然后,在事务解析模块中进行流量控制判断,如果满足流量控制条件,则提取事务的事务编码、数据负载大小、请求者ID、字节使能字段、地址、完成者ID以及负载数据信息并写入对应的异步FIFO和上行RAM模块,若不满足,则缓存第一帧并等待流控条件满足;
步骤3、再判断发送端的握手信号是否有效,如果有效,则继续接收并解析下一帧,否则在时钟上升沿来临时再次判断发送端握手信号是否有效;
步骤4、从第二帧开始,每接收一帧都需判断其是否是最后一帧,如果是,则当前事务传输结束,如果不是,则继续传输数据包的后续帧。
7.基于权利要求2所述的一种基于FPGA的PCIe转三总线接口的上行数据通路单个事务包的组包方法,其特征在于,包括以下步骤:
步骤A、在系统初始化/复位完成后,首先,在三类事务组包模块中的命令FIFO读取控制模块中,对命令FIFO空信号进行判断,若命令FIFO非空,即表明至少有一个事务待组包传输,则读取命令FIFO的信息;其中,三类事务组包模块为发布事务组包模块、非发布事务组包模块和完成事务组包模块;
步骤B、判断接收端握手信号是否有效,如果有效,则根据从命令FIFO中读取的信息组包事务包的第一帧并传输至事务顺序模块的事务队列中,并且将地址FIFO读使能信号和发送端握手信号置为有效,将命令FIFO读使能置为无效,这里发送端为各个事务组包模块,接收端为事务顺序模块;其中,事务组包模块中发布事务组包模块包括32位寻址存储器写事务组包模块和64位寻址存储器写事务组包模块,非发布事务组包模块包括32位寻址存储器读事务组包模块、64位寻址存储器读事务组包模块、IO读事务组包模块和IO写事务组包模块,完成事务组包模块包括带数据的完成事务组包模块和不带数据的完成事务组包模块;
步骤C、下一周期的时钟上升沿继续判断接收端握手信号是否有效,有效则组包下一帧并且把数据FIFO读使能信号置为有效,把地址FIFO读使能置为无效,无效则缓存当前周期读取出来的FIFO信息并在下一周期继续进行接收端握手信号判断;
步骤D、接着从第二帧开始,判断当前帧是否为最后一帧,如果是则事务被完全组包并传输至事务顺序模块中,如果不是,则继续传输后续的帧;
步骤E、在事务顺序模块中,根据事务之间的优先级关系和当前链路的拥塞情况对事务队列中的事务进行排序,并且根据PCIe接口模块的握手信号是否有效来决定是否进行向上传送。
CN201911104612.4A 2019-11-13 2019-11-13 一种基于FPGA的PCIe转三总线接口及方法 Active CN111078609B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911104612.4A CN111078609B (zh) 2019-11-13 2019-11-13 一种基于FPGA的PCIe转三总线接口及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911104612.4A CN111078609B (zh) 2019-11-13 2019-11-13 一种基于FPGA的PCIe转三总线接口及方法

Publications (2)

Publication Number Publication Date
CN111078609A CN111078609A (zh) 2020-04-28
CN111078609B true CN111078609B (zh) 2023-04-25

Family

ID=70310916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911104612.4A Active CN111078609B (zh) 2019-11-13 2019-11-13 一种基于FPGA的PCIe转三总线接口及方法

Country Status (1)

Country Link
CN (1) CN111078609B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111614551B (zh) * 2020-05-15 2022-03-08 北京光润通科技发展有限公司 一种pcie千兆以太网mac层控制器及驱动方法
CN111858413B (zh) * 2020-06-29 2022-05-27 牛芯半导体(深圳)有限公司 Pcie交换芯片端口的数据调度方法及装置
CN112650468B (zh) * 2020-12-03 2022-02-22 北京博雅慧视智能技术研究院有限公司 一种零延迟fifo电路及电子设备
CN113868179B (zh) * 2021-09-10 2024-04-02 中国航空工业集团公司西安航空计算技术研究所 一种LPC_DPRam的通信装置及数据转换方法
CN116049060B (zh) * 2022-01-06 2024-05-03 海光信息技术股份有限公司 数据转换桥电路和数据传输系统
CN115080116B (zh) * 2022-07-25 2022-11-29 广州智慧城市发展研究院 兼容多种存储器接口的微控制器、方法、芯片和显示器
CN116166595B (zh) * 2023-04-26 2023-07-18 上海励驰半导体有限公司 一种用于soc总线的数据传输系统、方法及芯片

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001256176A (ja) * 2000-03-13 2001-09-21 Mitsubishi Electric Corp ブリッジ装置
CN101123511A (zh) * 2007-09-21 2008-02-13 杭州华三通信技术有限公司 一种pci快速总线系统及其能量管理方法
CN103559152A (zh) * 2013-10-31 2014-02-05 烽火通信科技股份有限公司 基于pcie协议的cpu访问本地总线的装置及方法
CN103763129A (zh) * 2013-12-31 2014-04-30 华为技术有限公司 一种PCIe设备管理方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001256176A (ja) * 2000-03-13 2001-09-21 Mitsubishi Electric Corp ブリッジ装置
CN101123511A (zh) * 2007-09-21 2008-02-13 杭州华三通信技术有限公司 一种pci快速总线系统及其能量管理方法
CN103559152A (zh) * 2013-10-31 2014-02-05 烽火通信科技股份有限公司 基于pcie协议的cpu访问本地总线的装置及方法
CN103763129A (zh) * 2013-12-31 2014-04-30 华为技术有限公司 一种PCIe设备管理方法及装置

Also Published As

Publication number Publication date
CN111078609A (zh) 2020-04-28

Similar Documents

Publication Publication Date Title
CN111078609B (zh) 一种基于FPGA的PCIe转三总线接口及方法
US7797467B2 (en) Systems for implementing SDRAM controllers, and buses adapted to include advanced high performance bus features
JP5897524B2 (ja) PCIExpressでのIDベースストリームを可能にする方法及び装置
US8103803B2 (en) Communication between a processor and a controller
US20080155163A1 (en) Serial advanced technology attachment (SATA) and serial attached small computer system interface (SCSI) (SAS) bridging
CN102841871B (zh) 基于高速串行总线的DMA结构的pipeline读写方法
KR20120040535A (ko) 버스 시스템 및 그것의 동작 방법
US20120079148A1 (en) Reordering arrangement
CN112148651B (zh) 一种增强型rapidio互联装置及设备
CN113961494A (zh) 一种pcie总线与axi总线的桥接系统
JP3125739B2 (ja) バススイッチ
CN1636198B (zh) 用于传送流动分组的装置、系统和方法
US6718411B2 (en) Asic system architecture including data aggregation technique
US8090893B2 (en) Input output control apparatus with a plurality of ports and single protocol processing circuit
US7610415B2 (en) System and method for processing data streams
US20030188071A1 (en) On-chip high speed data interface
US6557060B1 (en) Data transfer in host expansion bridge
US20120117286A1 (en) Interface Devices And Systems Including The Same
WO2023076597A1 (en) System and method for flexibly crossing packets of different protocols
JP2008502977A (ja) バス・コントローラのための割り込み方式
US10482054B1 (en) AXI-CAPI adapter
CN210038775U (zh) 片上系统
CN116795763B (zh) 基于axi协议的数据分组传输的方法、片上系统和芯片
US20230134215A1 (en) System and Method for Flexibly Crossing Packets of Different Protocols
JP4930554B2 (ja) 入出力制御装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant