一种多pcie端口的msi中断过滤装置

文档序号:1200965 发布日期:2020-09-01 浏览:22次 >En<

阅读说明:本技术 一种多pcie端口的msi中断过滤装置 (MSI interruption filtering device with multiple PCIE ports ) 是由 刘威 龚锐 石伟 周宏伟 张剑锋 任巨 杨乾明 张见 王永文 于 2020-06-18 设计创作,主要内容包括:本发明公开了一种多PCIE端口的MSI中断过滤装置,包括维序模块单元和协议转换模块,维序模块单元的维序模块包括从地址缓冲、MSI地址域匹配逻辑、边带缓冲、主地址缓冲、从数据缓冲、MSI数据缓冲、主数据缓冲、数据选择器、从响应缓冲、MSI响应缓冲、响应轮询控制模块、响应选择器、主响应缓冲、突发队列控制模块以及缓冲控制模块,协议转换模块包括端口选择器、AXI协议转换模块以及多端口轮询控制模块。本发明能够解决多PCIE端口的MSI中断顺序性问题和MSI中断唯一性问题,能够保证维序模块流出每个MSI请求之前所有的写请求都返回了响应,正确区分MSI请求是哪个节点设备发出的中断,具有可扩展性好的优点。(The invention discloses an MSI interruption filtering device of a multi-PCIE port, which comprises a dimension sequence module unit and a protocol conversion module, wherein the dimension sequence module of the dimension sequence module unit comprises a slave address buffer, MSI address domain matching logic, a sideband buffer, a master address buffer, a slave data buffer, an MSI data buffer, a master data buffer, a data selector, a slave response buffer, an MSI response buffer, a response polling control module, a response selector, a master response buffer, a burst queue control module and a buffer control module, and the protocol conversion module comprises a port selector, an AXI protocol conversion module and a multi-port polling control module. The invention can solve the problems of MSI interruption sequence and MSI interruption uniqueness of a plurality of PCIE ports, ensure that all write requests return responses before each MSI request flows out of the maintenance module, correctly distinguish which node equipment sends the interruption of the MSI request, and has the advantage of good expandability.)

一种多PCIE端口的MSI中断过滤装置

技术领域

本发明属于集成电路设计领域,具体涉及一种多PCIE端口的MSI中断过滤装置。

背景技术

高速***组件互联PCI-Express(Peripheral Component InterconnectExpress,简称PCIE)是一种高速串行计算机扩展总线标准,英特尔于2001年提出后,以其带宽高、可扩展性强等优势,在处理器中很快得到广泛应用。

在处理器系统中,PCIE根复合体(Root Complex)位于CPU和PCIE拓扑结构之间,往上与CPU通过总线相连,往下通过根端口(Root Port,即PCI2PCI桥)管理各PCIE树形拓扑中的节点。PCIE节点包括开关部件(switch)、PCIE设备和传统PCI设备等。随着半导体集成度的不断提高,目前可以在PCIE根复合体中集成越来越多的端口。如图1所示,根复合体中集成了3个端口,端口之下分别连接的开关部件、PCIE设备和传统PCI设备。该根复合体和CPU核通过AXI(Advanced eXtensible Interface)总线互连。AXI总线是ARM公司研发推出的***片上总线协议,是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,读写通道也是分离的,通过读写请求的标号(AWID/ARID)来支持突发传输访问和乱序访问,如果读写请求的标号(AWID/ARID)相同,则请求不能乱序,必须等待前面所有的突发请求都顺序完成后才能继续发出当前的请求。

PCIE设备要发送中断给CPU和中断处理单元,可以采用消息告知中断(MessageSignaled Interrupt,MSI)的方式。MSI是作为发送的存储写操作实现的带内消息。MSI的地址和数据由软件指定。由于消息是带内消息,因此消息的接收可用于“推送”与中断关联的数据。根据定义,MSI中断是独享的。指定给设备的每条MSI消息保证是系统中均为唯一消息。该唯一性是通过PCIE拓扑结构中的节点编号来决定的,PCIE拓扑结构中的节点编号是该节点的总线号、设备号、功能号组成的唯一编码,中断处理单元只能通过该唯一编码来区分接收到的MSI中断是哪个端口下的哪个设备发出的。

根据PCIE协议,MSI是设备发出的特定地址的存储写。那么,它和普通地址的存储写请求一样,在出了PCIE端口进入AXI总线时都是按照地址路由的。但是,中断的写和普通写之间是有顺序性要求的。PCIE设备的软件行为可以简化为“生产-消费”模型,设备生产的数据要写到内存,然后发出中断通知CPU核去内存中取得要消费的最新数据。如果CPU 核先收到中断,而设备生产的数据还未到达内存,那么CPU核取到的就是旧数据,那么程序就会执行错误。具体到图1所示的系统结构中,设备发出一串普通的写后,然后发出MSI中断。因为MSI的定义是特定地址域的存储写,那么这些请求在出根复合体模块的时候都是 AXI写请求,这将导致两个问题:(1)AXI写请求是地址路由,中断处理单元不能通过地址信息来区分哪个设备发出了中断。(2)如果要保证中断写请求和普通写请求的顺序性,根据 AXI协议的要求,这些AXI写请求的标号(AWID)是固定的。虽然AWID相同的请求都是顺序处理的,但是AXI协议中的突发属性会破坏“生产-消费”模型。因为这些写请求进入 AXI总线后是路由到不同的目的地,那么有可能出现中断请求先到中断处理单元,数据写请求后到内存。上述两个问题在根复合体中的端口数目变多时,情况会更加恶化。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种多PCIE端口的MSI中断过滤装置,本发明能够解决多PCIE端口的MSI中断顺序性问题和MSI中断唯一性问题,能够保证维序模块流出每个MSI请求之前所有的写请求都返回了响应,正确区分MSI请求是哪个节点设备发出的中断,具有可扩展性好的优点。

为了解决上述技术问题,本发明采用的技术方案为:

一种多PCIE端口的MSI中断过滤装置,包括维序模块单元和协议转换模块,所述维序模块单元包括对应每个PCIE端口的维序模块,所述维序模块包括从地址缓冲、MSI地址域匹配逻辑、边带缓冲、主地址缓冲、从数据缓冲、MSI数据缓冲、主数据缓冲、数据选择器、从响应缓冲、MSI响应缓冲、响应轮询控制模块、响应选择器、主响应缓冲、突发队列控制模块以及缓冲控制模块,所述从地址缓冲的输出端分为两路且一路通过MSI地址域匹配逻辑输出给主地址缓冲、另一路通过边带缓冲作为MSI数据缓冲的一路输入,所述从数据缓冲的输出端通过数据选择器分为两路且一路作为MSI数据缓冲的另一路输入、另一路作为主数据缓冲的输入,所述从响应缓冲、MSI响应缓冲的输出端分别与响应选择器的输入端相连,所述响应选择器的输出端与主响应缓冲相连,所述响应选择器的控制端与响应轮询控制模块相连,所述突发队列控制模块以及缓冲控制模块用于对所有缓冲和选择器进行控制,所述突发队列控制模块记录每个MSI请求以及其之前的未响应的写请求个数,所述缓冲控制模块利用这些记录的写请求个数来保证维序模块流出每个MSI请求之前所有的写请求都返回了响应;所述协议转换模块包括端口选择器、AXI协议转换模块以及多端口轮询控制模块,所述MSI 数据缓冲的输出端、端口选择器、AXI协议转换模块依次相连,所述端口选择器的控制端与多端口轮询控制模块相连,所述AXI协议转换模块将PCIE拓扑节点的设备节点号(DEVID) 作为新地址信息的AXI写请求。

可选地,所述从地址缓冲、边带缓冲、主地址缓冲、从数据缓冲、MSI数据缓冲、主数据缓冲、从响应缓冲、MSI响应缓冲、主响应缓冲均为同时钟域的先入先出存储单元,存储单元的位宽可配置,具有读写通道、空满和已存数目状态。

可选地,所述缓冲控制模块带有一个主状态机,并根据主状态机状态跳转控制各缓冲的读写,所述主状态机包含六种状态:IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、MOVE_DMA,其中IDLE表示状态机操作停止状态;WAIT_MSI表示等待MSI数据缓冲空闲的状态;MOVE_MSI表示读取MSI请求的状态;WAIT_W表示等待从数据缓冲非空的状态;WAIT_DMA表示等待主数据缓冲空闲的状态;MOVE_DMA表示读取DMA写请求的状态,其中,IDLE往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、MOVE_DMA 状态的跳转条件a1~a6分别为:

a1:边带缓冲为空;

a2:同时满足:边带缓冲非空、从数据缓冲非空、MSI地址域匹配、MSI数据缓冲已满;

a3:同时满足:边带缓冲非空、从数据缓冲非空、MSI地址域匹配、MSI数据缓冲未满;

a4:边带缓冲非空、从数据缓冲为空;

a5:同时满足:边带缓冲非空、从数据缓冲非空、MSI地址域匹配&主数据缓冲已满;

a6:同时满足:边带缓冲非空、从数据缓冲非空、MSI地址域匹配&主数据缓冲未满;

其中,WAIT_MSI分别往WAIT_MSI、MOVE_MSI状态的跳转条件b2和b3为:

b2:MSI数据缓冲已满;

b3:MSI数据缓冲未满;

其中,MOVE_MSI往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、 MOVE_DMA状态的跳转条件为前述的条件a1~a6;

其中,WAIT_W往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、MOVE_DMA 状态的跳转条件同前述的条件a1~a6;

其中,WAIT_DMA分别往WAIT_DMA、MOVE_DMA状态的跳转条件e5和e6分别为:

e5:主数据缓冲已满;

e6:主数据缓冲未满;

其中,MOVE_DMA往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、 MOVE_DMA状态的跳转条件f1~f6分别为:

f1:同时满足:写请求长度计数器的计数值awlen_cnt等于0、边带缓冲为空;

f2:同时满足:写请求长度计数器的计数值awlen_cnt等于0、边带缓冲非空、从数据缓冲非空、MSI地址域匹配、MSI数据缓冲已满;

f3:同时满足:写请求长度计数器的计数值awlen_cnt等于0、边带缓冲非空、从数据缓冲非空、MSI地址域匹配、MSI数据缓冲未满;

f4:满足两个条件之一,第一个条件为同时满足:写请求长度计数器的计数值awlen_cnt 等于0、边带缓冲非空、从数据缓冲为空;第二个条件为同时满足:写请求长度计数器的计数值awlen_cnt非0、从数据缓冲为空;

f5:满足两个条件之一,第一个条件为同时满足:(写请求长度计数器的计数值awlen_cnt 等于0、边带缓冲非空、从数据缓冲非空、MSI地址域不匹配、主数据缓冲已满;第二个条件为同时满足:写请求长度计数器的计数值awlen_cnt非0、从数据缓冲非空、主数据缓冲已满;

f6:满足两个条件之一,第一个条件为同时满足:写请求长度计数器的计数值awlen_cnt 等于0、边带缓冲非空、从数据缓冲非空、MSI地址域不匹配、主数据缓冲未满;第二个条件为同时满足:写请求长度计数器的计数值awlen_cnt非0、从数据缓冲非空、主数据缓冲未满;

可选地,所述突发队列控制模块带有一个包含多个标签的标签池,所述标签池中的每个标签含有一位有效信号和一个计数器,计数器的值记为counter_value;当边带缓冲写入的请求是一个MSI请求的时候,它会通知突发队列控制模块分配一个标签;只有对应的counter_value减少为0的时候,MSI请求才能流出MSI数据缓冲,并且突发队列控制模块同步释放分配的标签,标签池中就可以记录多一个的MSI请求,所述标签的分配具有优先级,标签小的优先级更高,即如果多个标签被占用的情况下,如果小号的标签释放了,那么下一次分配的时候,优先分配小号的标签;从地址缓冲在非满且端口输出的写地址有效时,将写地址通道信息和设备节点号(DEVID)打包写入从地址缓冲中,从地址缓冲的出栈条件是同时满足:(I)从地址缓冲非空;(II)边带缓冲未满;(III)如果从地址缓冲当前的读数据是一个DMA写请求则MSI地址域匹配或主地址缓冲未满,如果从地址缓冲当前的读数据是一个MSI请求则MSI地址域不匹配或标签池未全部分配;主地址缓冲的写使能条件为写使能 aw_in_fifo_deq有效且MSI地址域不匹配;当主地址缓冲内有有效信息且AXI总线空闲时,读使能有效;边带缓冲无条件接收从地址缓冲的部分读请求的长度(AWLEN)和设备节点号(DEVID),以及地址域匹配信号msi_match,边带缓冲的读使能包含两种情况,第一种情况为主状态机状态为MOVE_MSI,第二种情况为主状态机状态为MOVE_DMA且写请求长度计数器的计数值awlen_cnt等于0;从数据缓冲从端口接收数据,读使能是主状态机为 MOVE_MSI或者MOVE_DMA,读数据根据数据选择器送到MSI数据缓冲或是主数据缓冲,当主状态机状态为MOVE_MSI时,数据被写入MSI数据缓冲;当主状态机状态为 MOVE_DMA时,数据被写入主数据缓冲;主数据缓冲的读使能由AXI总线控制;MSI数据缓冲的读使能msi_out_fifo_deq的条件为:MSI数据缓冲非空、分配给该MSI请求的标签对应的计数器的值counter_value非0、MSI响应缓冲未满、协议转换模块中轮询的选择信号 msi_ready有效;从响应缓冲的写入是AXI总线控制,当MSI数据缓冲读出,MSI响应缓冲就立即写入固定值,该固定值与写请求标号(AWID)一样,从响应缓冲和MSI响应缓冲的读取由响应轮询控制,即根据从响应缓冲为空信号b_data_fifo_empty、MSI响应缓冲为空信号b_msi_fifo_empty信号来控制从哪个响应缓冲中读取,都非空且主响应缓冲非满时,轮询读取,轮询的读数据写如主响应缓冲中,主响应缓冲进而写入端口中。

和现有技术相比,本发明具有下述优点:

1、突发队列控制模块记录每个MSI请求以及其之前的未响应的写请求个数,缓冲控制模块利用这些记录来保证维序模块流出每个MSI请求之前所有的写请求都返回了响应,保证了CPU核在收到MSI请求时,已经返回相应的写请求已经将最新的数据写到了内存,那么在中断服务程序中CPU核将会得到最新的数据,保证了“生产-消费”模型的正确性。

2、协议转换模块摒弃MSI请求原始的命中了MSI地址域的地址信息,转换为利用PCIE 拓扑节点的标号设备节点号(DEVID)为新地址信息的AXI写请求,保证了中断处理单元收到每个MSI后,能立刻区分是哪个节点设备发出的中断。

3、本发明维序模块单元包括对应每个PCIE端口的维序模块,维序模块可以根据需要选择采用的数量,当根复合体中的端口数目增加时,维序模块个数的相应增加。因维序模块就在端口的出口处,实现了每个端口下的拓扑节点发出的MSI请求和存储写请求的顺序性。

附图说明

图1为现有技术的PCIE系统拓扑结构示意图。

图2为本发明实施例中的三个PCIE端口的MSI中断过滤装置的结构示意图。

图3为本发明实施例中的中断过滤结构中的缓冲结构示意图。

图4为本发明实施例中的缓冲控制模块内的主状态机。

图5为本发明实施例中的突发队列控制示意图。

具体实施方式

图1举例的是有3个端口的根复合体以及其在微处理器中的简易架构。该架构采用的是 AXI总线连接CPU核、中断处理单元以及根复合体等。所有端口下的节点设备是全局编码的,即所有节点设备的设备节点号DEVID全局唯一。这些设备都可能发出MSI中断和DMA写请求,这些请求在根复合体和总线之间都是AXI写请求。根据AXI协议的定义,写请求只需要关注写地址通道、写数据通道和写响应通道,因此,本发明只关注AXI协议的写请求相关通道。下文将以三个PCIE端口为例,对本发明多PCIE端口的MSI中断过滤装置进行进一步的详细说明。毫无疑问,本发明多PCIE端口的MSI中断过滤装置的PCIE端口可以根据需要进行扩展,其需要变化的就是调整维序模块单元包括的维序模块的数量。

如图2所示,本实施例三PCIE端口的MSI中断过滤装置包括维序模块单元和协议转换模块,维序模块单元包括对应每个PCIE端口的维序模块(共三个维序模块),维序模块包括从地址缓冲11、MSI地址域匹配逻辑12、边带缓冲13、主地址缓冲14、从数据缓冲15、MSI数据缓冲16、主数据缓冲17、数据选择器18、从响应缓冲19、MSI响应缓冲20、响应轮询控制模块21、响应选择器22、主响应缓冲23、突发队列控制模块24以及缓冲控制模块25,从地址缓冲11的输出端分为两路且一路通过MSI地址域匹配逻辑12输出给主地址缓冲14、另一路通过边带缓冲13作为MSI数据缓冲16的一路输入,从数据缓冲15的输出端通过数据选择器18分为两路且一路作为MSI数据缓冲16的另一路输入、另一路作为主数据缓冲17 的输入,从响应缓冲19、MSI响应缓冲20的输出端分别与响应选择器22的输入端相连,响应选择器22的输出端与主响应缓冲23相连,响应选择器22的控制端与响应轮询控制模块 21相连,突发队列控制模块24以及缓冲控制模块25用于对所有缓冲和选择器进行控制,突发队列控制模块24记录每个MSI请求以及其之前的未响应的写请求个数,缓冲控制模块25 利用这些记录的写请求个数来保证维序模块流出每个MSI请求之前所有的写请求都返回了响应;协议转换模块包括端口选择器26、AXI协议转换模块27以及多端口轮询控制模块28, MSI数据缓冲16的输出端、端口选择器26、AXI协议转换模块27依次相连,端口选择器27 的控制端与多端口轮询控制模块28相连,AXI协议转换模块27将PCIE拓扑节点的标号设备节点号DEVID作为新地址信息的AXI写请求。

本实施例中,从地址缓冲11、边带缓冲13、主地址缓冲14、从数据缓冲15、MSI数据缓冲16、主数据缓冲17、从响应缓冲19、MSI响应缓冲20、主响应缓冲23均为同时钟域的先入先出存储单元,存储单元的位宽可配置,具有读写通道、空满和已存数目状态。如图3 所示,这些缓冲包含写使能和写数据、读使能和读数据、以及空满和已存数目这三个状态信号。已存数目表示缓冲中已保存的数据组数,即还能读取的次数。如果已存数据为0,则空信号有效。如果已存数目等于缓冲深度,则满信号有效。为方便描述,本实施例中写使能记为*_enq,读使能为*_deq,空为*_empty,满为*_full,已存数目为*_count。以从地址缓冲(11)aw_in_fifo为例,写使能为aw_in_fifo_enq,读使能为aw_in_fifo_deq,空为aw_in_fifo_empty,满为aw_in_fifo_full,已存数目为aw_in_fifo_count,其他缓冲的控制信号依此类推。

从地址缓冲11与根复合体中的端口相连,保存其输出的AXI请求的写地址通道AW所有信号(包括写请求标号AWID、写请求地址AWADDR、写请求长度AWLEN等),以及发起该请求的设备节点号(DEVID)。从地址缓冲11还与MSI地址域匹配逻辑12和边带缓冲 13相连。从地址缓冲11的输出受缓冲控制模块25控制。

MSI地址域匹配逻辑12对写请求地址AWADDR和软件配置的MSI地址域进行对比,如果写请求地址AWADDR命中该地址域,那么就将该写请求通道信号传递给主地址缓冲14;否则就不传递。

边带缓冲13与从地址缓冲11和MSI数据缓冲16相连。边带缓冲13无条件接收从地址缓冲11输出的写请求长度(AWLEN)以及设备节点号(DEVID),另外,边带缓冲13还同时保存该AXI请求的地址域匹配结果,即标识该请求是否是MSI请求。边带缓冲13的读取由缓冲控制模块25控制。

主地址缓冲14根据MSI地址域匹配结果来判断是否保存从地址缓冲11输出的信号。主地址缓冲14的读取由AXI总线控制。

从数据缓冲15与根复合体中的端口和数据选择器18相连。该缓冲保存端口输出的AXI 请求的写数据通道的所有信号,该缓冲的读取由缓冲控制模块25控制。

MSI数据缓冲16与边带缓冲13和数据选择器18相连,将边带缓冲13和数据选择器18 输出的信号打包后保存。MSI数据缓冲16还要协议转换模块相连。

主数据缓冲17与数据选择器18相连,保存非MSI请求的写数据通道信号。主数据缓冲 17的读取由AXI总线控制。

从响应缓冲19与AXI总线和响应选择器22相连,它保存的是AXI总线返回的非MSI请求的响应,输出给响应选择器22。

MSI响应缓冲20写入的固定的写请求标号(AWID),写使能就是MSI数据缓冲16的读使能,即MSI请求的响应是立即返回的。MSI响应缓冲20输出给响应选择器22。

响应选择器22由响应轮询控制21,轮询输出从响应缓冲19和MSI响应缓冲20的数据。

主响应缓冲23与响应选择器22和根复合体中的端口相连。保存的是响应选择的AXI响应通道的信号,输出给端口。

本实施例中,缓冲控制模块25带有一个主状态机,并根据主状态机状态跳转控制各缓冲的读写,如图4所示,主状态机包含六种状态:IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、MOVE_DMA,其中IDLE表示状态机操作停止状态;WAIT_MSI表示等待MSI 数据缓冲16空闲的状态;MOVE_MSI表示读取MSI请求的状态;WAIT_W表示等待从数据缓冲15非空的状态;WAIT_DMA表示等待主数据缓冲17空闲的状态;MOVE_DMA表示读取DMA写请求的状态,图4中的箭头表示从一个状态跳转到另一个状态,跳转的条件如下表所示,表中的各信号名满足缓冲的命名规则,state表示当前状态,n_state表示跳转到的状态。其中,IDLE往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、MOVE_DMA 状态的跳转条件a1~a6分别为:

a1:边带缓冲13为空,可记为sb_fifo_empty;

a2:同时满足:边带缓冲13非空、从数据缓冲15非空、MSI地址域匹配、MSI数据缓冲16已满,可记为:~sb_fifo_empty&~w_in_fifo_empty&msi_match&msi_out_fifo_full;

a3:同时满足:边带缓冲13非空、从数据缓冲15非空、MSI地址域匹配、MSI数据缓冲16未满,可记为:~sb_fifo_empty&~w_in_fifo_empty&msi_match&~msi_out_fifo_full;

a4:边带缓冲13非空、从数据缓冲15为空,可记为:~sb_fifo_empty&w_in_fifo_empty;

a5:同时满足:边带缓冲13非空、从数据缓冲15非空、MSI地址域匹配&主数据缓冲17已满,可记为:~sb_fifo_empty&~w_in_fifo_empty&msi_match&w_out_fifo_full;

a6:同时满足:边带缓冲13非空、从数据缓冲15非空、MSI地址域匹配&主数据缓冲17未满,可记为:~sb_fifo_empty&~w_in_fifo_empty&msi_match&~w_out_fifo_full;

其中,WAIT_MSI分别往WAIT_MSI、MOVE_MSI状态的跳转条件b2和b3为:

b2:MSI数据缓冲16已满,可记为:msi_out_fifo_full;

b3:MSI数据缓冲16未满,可记为:~msi_out_fifo_full;

其中,MOVE_MSI往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、 MOVE_DMA状态的跳转条件为前述的条件a1~a6;

其中,WAIT_W往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、MOVE_DMA 状态的跳转条件同前述的条件a1~a6;

其中,WAIT_DMA分别往WAIT_DMA、MOVE_DMA状态的跳转条件e5和e6分别为:

e5:主数据缓冲17已满;

e6:主数据缓冲17未满;

其中,MOVE_DMA往IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA、 MOVE_DMA状态的跳转条件f1~f6分别为:

f1:同时满足:写请求长度计数器的计数值awlen_cnt等于0、边带缓冲13为空,可记为:

awlen_cnt==’0&sb_fifo_empty;

f2:同时满足:写请求长度计数器的计数值awlen_cnt等于0、边带缓冲13非空、从数据缓冲15非空、MSI地址域匹配、MSI数据缓冲16已满,可记为:

awlen_cnt==’0&~sb_fifo_empty&~w_in_fifo_empty&msi_match&msi_out_fifo_full;

f3:同时满足:写请求长度计数器的计数值awlen_cnt等于0、边带缓冲13非空、从数据缓冲15非空、MSI地址域匹配、MSI数据缓冲16未满,可记为:

awlen_cnt==’0&~sb_fifo_empty&~w_in_fifo_empty&msi_match&~msi_out_fifo_full;

f4:满足两个条件之一,第一个条件为同时满足:写请求长度计数器的计数值awlen_cnt 等于0、边带缓冲13非空、从数据缓冲15为空;第二个条件为同时满足:写请求长度计数器的计数值awlen_cnt非0、从数据缓冲15为空,可记为:

(awlen_cnt==’0&~sb_fifo_empty&w_in_fifo_empty)|(awlen_cnt!=’0&w_in_fifo_empty);

f5:满足两个条件之一,第一个条件为同时满足:(写请求长度计数器的计数值awlen_cnt 等于0、边带缓冲13非空、从数据缓冲15非空、MSI地址域不匹配、主数据缓冲17已满;第二个条件为同时满足:写请求长度计数器的计数值awlen_cnt非0、从数据缓冲15非空、主数据缓冲17已满,可记为:

(awlen_cnt==’0&~sb_fifo_empty&~w_in_fifo_empty&~msi_match&w_out_fifo_full)|(awlen _cnt!=’0&~w_in_fifo_empty&w_out_fifo_full);

f6:满足两个条件之一,第一个条件为同时满足:写请求长度计数器的计数值awlen_cnt 等于0、边带缓冲13非空、从数据缓冲15非空、MSI地址域不匹配、主数据缓冲17未满;第二个条件为同时满足:写请求长度计数器的计数值awlen_cnt非0、从数据缓冲15非空、主数据缓冲17未满,可记为:

(awlen_cnt==’0&~sb_fifo_empty&~w_in_fifo_empty&~msi_match&~w_out_fifo_full)|(awle n_cnt!=’0&~w_in_fifo_empty&~w_out_fifo_full);

前述各状态的跳转条件按照前述方便描述的命名规则,可整理得到表1。

表1:前述各状态的跳转条件表。

Figure BDA0002546035000000091

缓冲控制模块25包含一个主状态机和计算每个MSI请求前未响应写请求个数的逻辑。状态机包含IDLE、WAIT_MSI、MOVE_MSI、WAIT_W、WAIT_DMA和MOVE_DMA状态。通过状态机的跳转控制所有缓冲的读写、数据选择器18的选择以及控制突发队列控制模块 24的执行。另外,计算的未响应写请求个数作为突发队列控制模块24中各标签的计数器的初始值。如果由多个端口,那么上述维序模块要和端口一一对应。协议转换首先从各端口的 MSI数据缓冲16中根据轮询原则进行要转换的MSI信息,然后再AXI协议转换模块27中将这些信息打包成AXI请求。转换后的AXI请求摒弃了原有的地址信息,利用PCIE拓扑节点的DEVID替代地址来进行路由。

本实施例中,突发队列控制模块24(outstanding队列控制模块)带有一个包含多个标签的标签池,如图5所示,本实施例中标签池有16个标签,标签池中的每个标签含有一位有效信号和一个计数器,计数器的值记为counter_value;当边带缓冲13写入的请求是一个MSI 请求的时候,它会通知突发队列控制模块24分配一个标签;只有对应的counter_value减少为0的时候,MSI请求才能流出MSI数据缓冲16,并且突发队列控制模块24同步释放分配的标签,标签池中就可以记录多一个的MSI请求,标签的分配具有优先级,标签小的优先级更高,即如果多个标签被占用的情况下,如果小号的标签释放了,那么下一次分配的时候,优先分配小号的标签。本实施例中,标签池中标签的个数可以根据端口支持的AXI写请求的突发个数来设置。每个标签对应一个计数器,计数器的宽度为写请求标号(AWID)宽度,表示该MSI请求之前还有多个各普通AXI写请求没有响应。只有对应的计数器减少为0的时候,该标签对应的MSI请求才能流出MSI数据缓冲16。当MSI请求流出MSI数据缓冲16后,该标签就释放,标签池中就可以记录多一个的MSI请求。

从地址缓冲11在非满且端口输出的写地址有效时,将写地址通道信息和设备节点号 DEVID打包写入从地址缓冲11中,通常写地址通道包含写请求地址AWADDR、写请求标号AWID、写请求长度AWLEN和写请求大小AWSIEZ等。

从地址缓冲11的出栈条件是同时满足:(I)从地址缓冲11非空;(II)边带缓冲13未满; (III)如果从地址缓冲11当前的读数据是一个DMA写请求则MSI地址域匹配或主地址缓冲 14未满,如果从地址缓冲11当前的读数据是一个MSI请求则MSI地址域不匹配或标签池未全部分配。上述出栈条件可记为:

~aw_in_fifo_empty&~sb_fifo_full&(msi_match|~aw_out_fifo_full)&(~msi_match| ~tag_pool_full);

上式中,msi_match是MSI地址域匹配逻辑12对AWADDR进行对比,如果命中地址域,则msi_match有效,否则无效;tag_pool_full表示突发队列控制模块24中的标签池已全部分配。即四个相与的条件都必须满足,第一个是从地址缓冲11里必须要有有效数据;第二个是边带缓冲13必须要要有空闲空间,因为从地址缓冲11的读数据要无条件进入边带缓冲13;第三个和第四个要一起理解,如果从地址缓冲11当前的读数据是一个msi请求,那么就必须判断tag_pool_full信号无效,表示还有标签分配给从地址缓冲11读出的msi请求;如果是 DMA写请求,那么就要判断aw_out_fifo非满,因为主地址缓冲14要有空间来存储从地址缓冲11读出的DMA写请求。

主地址缓冲14的写使能条件为写使能aw_in_fifo_deq有效且MSI地址域不匹配。上述条件可记为:aw_in_fifo_deq&~msi_match。当主地址缓冲14内有有效信息且AXI总线空闲时,读使能有效。

边带缓冲13无条件接收从地址缓冲11的部分读数据地址长度AWLEN和设备节点号DEVID,以及地址域匹配信号msi_match,边带缓冲13的读使能包含两种情况,第一种情况为主状态机状态为MOVE_MSI,第二种情况为主状态机状态为MOVE_DMA且写请求长度计数器的计数值awlen_cnt等于0;上述条件可记为:

n_state[MOVE_MSI]|n_state[MOVE_DMA]&(awlen_cnt==’0)。

从数据缓冲15从端口接收数据,读使能是主状态机为MOVE_MSI或者MOVE_DMA,可记为:n_state[MOVE_MSI]|n_state[MOVE_DMA]。读数据根据数据选择器18送到MSI数据缓冲16或是主数据缓冲17,当主状态机状态为MOVE_MSI(n_state[MOVE_MSI]有效) 时,数据被写入MSI数据缓冲16;当主状态机状态为MOVE_DMA(n_state[MOVE_DMA] 有效)时,数据被写入主数据缓冲17,主数据缓冲17的读使能由AXI总线控制。

MSI数据缓冲16的读使能msi_out_fifo_deq的条件为:MSI数据缓冲16非空、分配给该MSI请求的标签对应的计数器的值counter_value非0、MSI响应缓冲20未满、协议转换模块中轮询的选择信号msi_ready有效;上述条件可记为:msi_out_fifo_deq= (~msi_out_fifo_empty&(counter_value==’0))&~b_msi_fifo_full&msi_ready。其中,counter_value 是分配给该MSI请求的标签对应的计数器的值,msi_ready是协议转换模块中轮询的选择信号,如果选择到了对应的端口,对应端口的msi_ready有效;否则无效。

从响应缓冲19的写入是AXI总线控制,当MSI数据缓冲16读出,MSI响应缓冲20就立即写入固定值,该固定值与写请求标号AWID一样,从响应缓冲19和MSI响应缓冲20的读取由响应轮询控制21,即根据从响应缓冲19为空信号b_data_fifo_empty、MSI响应缓冲20为空信号b_msi_fifo_empty信号来控制从哪个响应缓冲中读取,都非空且主响应缓冲23 非满时,轮询读取,轮询的读数据写如主响应缓冲23中,主响应缓冲23进而写入端口中。

协议转换模块包括端口选择器26、AXI协议转换模块27以及多端口轮询控制模块28,协议转换主要实现两部分功能,一是从3个端口的MSI数据缓冲16中轮询读取相应信息,二是将读取的信息转换打包成AXI写请求。多端口轮询是无条件轮询,即依次尝试去读取各个端口的MSI数据缓冲16,如果此时该端口的MSI请求有效,那么就将该有效的MSI请求传递给AXI协议转换模块27;否则,继续尝试下一个端口,然后查询的端口号回滚,依此轮询。传递的有效MSI请求包含两部分信息,一是发送该MSI的设备节点号DEVID,二是该设备写的数据。AXI协议转换模块27将设备节点号DEVID打包到AXI的写地址通道,将设备写上了的数据打包到AXI的写数据通道。同时,将AXI的写相应通道置为空闲,读地址通道和读数据通道可以不用考虑。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

17页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种嵌入式芯片中传输控制方法和装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!