FPGA中实现的硬件流水线是FAST平台实现分组硬件处理的基础。FPGA OS为FAST流水线提供了基本的分组收发,高速DMA和查表等服务。FAST 流水线与FPGA OS的接口定义直接反映了分组硬件处理功能在FPGA OS和FAST流水线中的划分,也是FAST平台提供商必须考虑的关键问题。

一、FAST流水线接口定义

FAST流水线与FPGA OS之间定义了6个接口,分别是PIn/POut、CIn/COut,MEI和AUX。如下图所示。

PIn/POut是流水线接收和发送分组的接口,CIn/COut分别是流水线接收和发送流水线控制信息的接口,MEI(Match Engine Interface)是流水线访问FPGA OS提供的匹配引擎的接口。AUX是FPGA OS为FAST流水线提供时钟、复位和时间戳等信息的接口。

各接口信号的详细定义如下表所示。其中MEI接口中的信号宽度N1/N2与平台相关。Clk时钟频率与平台相关,一般不小于125MHz。所有I/O信号的变化都与CLK同步。

接口类型 信号名称 方向 信号描述
PIn接口 pin_data_valid In 接收分组数据有效
pin_data[133:0] In 接收的分组数据
pin_ready Out 可以接收新的分组指示
POut接口 pout_data_valid Out 发送分组数据有效
pout_data[133:0] Out 发送的分组数据
pout_ready In 可以发送分组指示
CIn接口 cin_data_valid In 写入控制消息有效
cin_data[127:0] In 写入的控制消息
cin_ready Out 可接收控制消息
COut接口 cout_data_valid Out 写出控制消息有效
cout_data[127:0] Out 写出的控制消息
cout_ready In 可接收控制消息
MEI接口 key_valid Out 查表关键字有效
key[N1-1,0] Out 输出的查表关键字
me_ready In 匹配引擎准备好
flowid_valid In 匹配返回的结果有效
flowid[N2-1,0] In 匹配返回的结果
match_flag In 是否匹配标识
AUX接口 clk In 时钟信号
reset_n In 低有效的复位信号
timestamp[31:0] In 本地时间戳

FAST流水线通过Key接口向查表协处理器提交查表关键字,从FlowID接口接收返回的查表结果(匹配的地址)。包括是否匹配(match_flag为1表示匹配,0表示未匹配),以及匹配的规则序号FlowID等。

只要me_ready信号有效,FAST流水线可连续地向查表协处理器提交查表请求,查表协处理器必须保证这些查表结果按照查表请求提交的顺序返回查表结果。

查表协处理器中规则的配置管理方法与具体的平台相关。FAST库在实现时必须对不同的平台进行适配,提供管理这些规则的API接口。

二、数据通路PIn/POut数据格式

PIn和POut两个接口采用相同的分组格式,分组数据宽度为134位,其中低128位为报文数据,高6位为控制信息,每个数据分组包括32字节的metadata和分组数据,如下图所示。

分组数据的格式为接口收发的以太网报文格式。其中以太网报文格式中不包含最后的4字节CRC字段,接收时,FPGA OS负责接收时进行CRC校验和剥离,发送时,FPGA OS会计算分组的CRC字段并附加在报文最后。

数据通路的[133:132]位为报文数据的头尾标识。01标识报文头部,11标识报文中间数据,10标识报文尾部。由于不同报文具有不同长度,因此在报文数据最后一拍可能存在一些无效的字节。数据报文的最后一拍的[131:128]位用来标识无效字节的个数。其中0000表示16个字节全部有效;0001标识最低1个字节无效,最高15个字节有效;以此类推,1111表示最低15个字节无效,最高1个字节有效。

设FAST流水线的时钟频率为xMhz,因此数据通路理论传输带宽为128bit*xMHz。例如当x=125时,通路带宽为16Gbps。

三、控制通路CIn/COut数据格式

FAST流水线的控制通路CIn和COut采用相同的消息格式。对FAST流水线模块的每次读写操作都转换成一个128位宽的命令字写入FAST流水线。命令字的格式如下表所示。与流水线处理分组信息一样,每个模块只处理DMID等于本地模块号的命令字。相应的模块完成读写操作后,修改命令字,并将命令字发送给下游模块,最后命令字从COut接口输出。FPGA OS负责将软件读写请求转换成FAST流水线的命令字,并将COut输出的命令字返回给由SMID标识的软件模块。

位置 字段 含义
[127:125] CMD 001:读帧;010写帧;011读响应帧;
[124:112] SEQ 访问序号
[111:104] SMID 发出C消息的模块ID(软件模块)
[103:96] DMID 接收C消息的模块ID(硬件模块)
[95:64] ADDR 操作地址
[63:32] Mask 写数据掩码
[31:0] Data 写的数据/读返回数据

显然,每个硬件模块内部的编址与都是32位,且编址方法与其他模块无关,由模块开发者独立确定。


发表评论

电子邮件地址不会被公开。 必填项已用*标注