You are on page 1of 41

摘 要

摘 要

互联网在丰富人民生活的同时, 也在不断发展壮大。目前,支撑互联网发展的
边缘网络吞吐率已经达到了 100Gbps 以上。但是,网络处理设备的数据处理能力
还远远不能满足如此之大的吞吐率。与此同时,随着网络协议的发展,灵活性越来
越高,网络路由与交换设备不仅需要具有高性能,还要能够具有高度可编程与可配
置性。因此,这方面的需求已成为研究的热点。本论文重点研究了基于 FPGA 平台
的网络处理单元的设计与实现。
本论文提出一种新的网络处理单元设计方法,它采用 Dynamic-BV 的匹配方法
设计了一种流水线结构,针对网络处理单元的功能,将整个系统分为了解析器、匹
配与动作模块、数据缓冲模块、逆解析器四大部分。其中解析器负责解析网络处理
单元接收到的数据包的报文结构,将数据包中各个协议的报头和数据分离出来,匹
配模块负责将解析器解析出的数据报头的指定字段与规则集进行匹配,动作模块
则根据匹配的结果对数据报头的指定字段进行修改,数据缓冲模块负责将解析器
输出的数据包数据部分和数据报头同步传输到逆解析器,最后逆解析器负责将经
动作模块处理过的数据报头与未处理的数据部分重新拼接起来,组成新的数据包。
本文设计的网络处理单元支持高度可编程与可配置性,其资源占用主要取决于
规则集的大小以及 IO 的数量。经过系统优化设计,在规则集有 4 个规则且输入数
据位宽为 512 位的情况下,基于 xc7v2000tflg1925-1 网络处理单元资源占用率均低
于 50%,网络处理单元模块的工作频率可以达到 400MHz。

关键字:FPGA 网络处理单元 高度可配置 流水线


ABSTRACT

ABSTRACT

Internet technology has developed rapidly since the 1950s, when communication
researchers recognized the need for regular communication between different computer
users and communication networks. Especially today in the 21st century, we have entered
the 5G era, and the throughput rate of edge network has reached more than 100Gbps.
Therefore, we increasingly need network routing and switching equipment with high
throughput rate and low latency. At the same time, with the development of network
protocols, more and more flexibility, network routing and switching equipment not only
need to have high performance, but also can be highly programmable and configurable.
This paper focuses on the design and implementation of network processing unit based
on FPGA platform.
Since the advent of FPGA, it has been widely used in many fields for its superior
flexibility and reliable performance. Because this thesis aims to design a high
performance and highly configurable network processing unit, FPGA is the most suitable
platform. Aiming at the function of network processing unit, this paper divides the whole
system into many small modules. After realizing the function of each part with Verilog,
Vivado is used to encapsulate it into an independent IP core. The functions of each part
and the whole network processing unit are simulated and verified. The verification results
show that each module and the whole network processing unit can complete its expected
functions.
In addition to functional simulation, the timing and resource occupancy of the
designed network processing unit are analyzed based on XC7V2000TFLG1925-1. Finally,
the operating frequency of the network processing unit module can reach 100MHz.
Resource usage is also good, mainly depending on the size of the matching rule set.

Key words: FPGA Network processing unit Height configurability Pipeline


struct
目 录 i

目 录

第一章 绪论 ..................................................................................................................... 1
1.1 研究背景及价值 .................................................................................................. 1
1.2 国内外研究及概述 ............................................................................................. 1
1.3 主要工作及内容安排 ......................................................................................... 2
第二章 相关技术基础 ..................................................................................................... 5
2.1 FPGA 简介 .......................................................................................................... 5
2.2 Verilog HDL 简介 ................................................................................................ 6
2.3 网络处理器抽象模型 ......................................................................................... 7
第三章 网络处理单元系统设计 ..................................................................................... 9
3.1 项目需求 ............................................................................................................. 9
3.2 体系结构 ........................................................................................................... 10
3.3 解析器结构 ....................................................................................................... 10
3.4 匹配模块结构 ................................................................................................... 12
3.5 动作模块结构 ................................................................................................... 16
3.6 逆解析器结构 ................................................................................................... 17
第四章 系统测试及仿真 ............................................................................................... 21
4.1 仿真环境的搭建 ............................................................................................... 21
4.2 解析器功能仿真 ............................................................................................... 22
4.3 匹配模块功能仿真 ........................................................................................... 25
4.4 动作模块功能仿真 ........................................................................................... 26
4.5 逆解析器模块功能仿真 ................................................................................... 27
4.6 系统功能仿真及性能分析 ............................................................................... 28
第五章 总结与展望 ....................................................................................................... 31
致谢 ................................................................................................................................. 33
参考文献 ......................................................................................................................... 35
ii 目 录
第一章 绪论 1

第一章 绪论

1.1 研究背景及价值

如今网络需求高吞吐率、低延迟的网络路由和交换设备,边缘网络的吞吐率已
经达到了 100Gbps 以上[1],由于网络协议的灵活性,网络设备在具有高性能的同时
还需要具有高可编程和可配置性,因此设计实现一种高度可配置的高性能网络处
理单元十分必要,FPGA 以其优越的灵活性和可靠的性能可以作为网络处理单元的
实现平台。
网络处理器是一种专门应用于网络应用数据包的处理器。它也是集成电路的
一种,但区别于特殊用途集成电路 ASIC 的单一功能,网络处理更加复杂、更加灵
活,一般可以利用软件依照网络运算的特性特别编程从而实现网络的特殊用途,在
一块芯片上实现不同的功能,以应用于多种不同的网络设备及产品,如路由器、防
火墙、入侵检测系统、入侵预防系统、网络监听系统等[1][2]。自 1999 年第一款网络
处理器问世以来,网络处理器就得到许多半导体公司、网络设备厂商的关注,不同体
系结构的网络处理器相继出现并投入使用。与此同时,针对网络处理器其应用技术
的研究也成为近年网络领域的研究热点。在现代通信网络中,语音、视频和资料等
信息不再以模拟信号的方式发送,而是以数据包的方式。网络处理器为了能优化处
理数据包,特别具备了一些特性和架构,以加速处理网络数据包的效率。可以完成
路由查找、协议分类、报文处理以及防火墙和服务质量等各种任务[1][2]。
本文致力于设计一种可配置的网络处理单元,使其能够支持简单的网络交换
和转发处理,并具有高吞吐量。

1.2 国内外研究及概述

近年来,硬件领域以及编程语言的发展红利也逐渐映射到网络处理器的研究
上来。ASIC 作为网络处理设备的初始应用芯片,在应用领域逐渐广泛并趋于灵活
的网络市场上逐渐不被人满意。更多的半定制化芯片,如 FPGA 应用到了网络处
理器设计中。网络处理器应用开发难度也影响着其灵活性,利用新型的可编程技术,
简化网络处理器的设计的方式方法成为研究热点。
2 基于 FPGA 的网络处理器设计与实现

随着需求的推动和技术间的交叉融合,网络处理器在平衡高速、灵活特性上逐
渐出现矛盾。随着通用性强、开发环境友好、软硬件融合程度高等设计理念逐渐泛
化为数据处理技术从而成为潮流,网络处理器面临着从交换、路由、网络融合与演
进等传统业务拓展到适应新型体系结构、满足特殊需求型业务甚至应用与终端领
域的重大挑战。
T.Zhang 等学者提出了一种基于 FPGA 的高速 OBS(Optical Burst Switch,光
突发交换)核心节点 BCP 网络处理器并提出了一种新的有效的波长调度算法[3]。
针对的业务较为普通,获得高带宽后面对拥塞情况没有考虑。
Y.Niu 等人提出了一种基于 FPGA 的可配置的 IPSec 处理器,其本质是高性能
在线网络安全处理器[4]。虽然关注点是网络安全,但进行网络流量可视化难度较高。
V.Veeraprathap 等人介绍了一种基于 FPGA 的网络处理器设计与实现,它是一
种可扩展的分组交换结构,具有存储转发、错误管理、电源管理和安全等先进的的
网络功能[5]。但该方法在灵活性上的体现还是基于设计时的应用下发,没有考虑任
务热部署,无法实现出预设能力外的更多功能。
G.Gadre 等提出了一种利用 RISC 处理器作为高速网络接口的、基于 FPGA
实现的网络处理器[6]。其使用 RISC 处理器作为网络处理器的专有高速网络接口
卡.这种 NP 可以进行多线程协议处理。
Bojie Li 等人的文章介绍了一种基于 FPGA 加速平台的高柔性和高性能的
ClickNP[7]。该处理器灵活性高,可以服务基于高级 C 类语言的可编程点击模块化路
由器.其原型拥有每秒高达 2 亿个包的流量处理速度,并且具有低于 2μs 延迟。
H Y. Su 等人甚至提出了一种基于模板的网络处理器自动生成框架[8],通过将
P4 程序自动转换为 VHDL 程序来生成具有匹配动作结构的网络处理器。该方法
实例化过程复杂,适合学术界进行学术研究,不适合现场部署。

1.3 主要工作及内容安排

本论文主要对比了国内外基于 FPGA 设计的网络处理单元,并分析了不同的


数据匹配方案,最终根据不同的需求设计了两种方案。对于用 Verilog 设计的模块
进行了资源占用、速度等方面的评估。
本论文的主要研究内容如下:
第一章 绪论 3

1)从可配置性、吞吐量出发,设计一种数据解析器,通过参数化设计,使其同时
适配不同的协议解析。
2)从灵活性和工作频率出发,设计一种数据匹配和动作模块,通过采用合适的匹
配方案和规则集存储方式,使其配置规则更灵活且数据处理速度更快。
本论文共由部分组成,每个部分的内容安排如下:
第一章为绪论。对基于 FPGA 的网络处理单元设计的研究背景进行了简单介
绍,然后分析了国内外在该领域的研究现状,最后总结了本人在该课题中的主要工
作及论文内容的安排。
第二章为该课题涉及到的相关技术基础。介绍了 FPGA 的发展背景以及工作
原理、特点等。之后介绍了 Verilog HDL 这种硬件描述语言的发展史,最后介绍了
网络处理器的抽象模型。
第三章为本课题设计的网络处理单元的硬件结构。首先从整体进行了划分,将
整个网络处理单元分为了解析器、数据缓冲器、匹配与动作、逆解析器等模块。之
后又针对每个模块详细介绍了其功能和具体的硬件结构设计方法。
第四章为系统测试及仿真。首先介绍了系统仿真平台的搭建,然后就仿真结果
进行了分析,最后对生成硬件模块的资源占用、时序分析等做了简要说明。
最后第五章为论文工作内容的总结与展望。
4 基于 FPGA 的网络处理器设计与实现
第二章 相关技术基础 5

第二章 相关技术基础

2.1 FPGA 简介

1984 年,Xilinx 公司的创始人之一,密西根大学毕业生,RossFreeman 第一次


提出了可编程逻辑器件(PLD)的概念[9]。Freeman 也因为这项发明进入 2009 美国
发明家名人堂。遗憾的是英年早逝的他没能看到他所缔造的 FPGA 帝国是多么的
辉煌[10]。
首款 FPGA,即赛灵思 XC2064,只包含 64 个逻辑模块,每个模块含有两个
3 输入查找表(LUT)和一个寄存器。按照现在的计算,该器件有 64 个逻辑单元—
—不足 1000 个逻辑门[9]。尽管容量很小,XC2064 晶片的尺寸却非常大,比当时
的微处理器还要大;而且采用 2.5 微米工艺技术勉强能制造出这种器件。但随着 IC
制造工艺的发展,FPGA 也迅速发展,资源爆炸式增长,ZYNQ 系列的 Z-7100 的
逻辑单元已经到了 444k。
FPGA 由可编程逻辑块(CLB),输入/输出模块(IOB)及可编程互连资源(PIR)
等三种可编程电路和一个 SRAM 结构的配置存储单元组成。CLB 是实现逻辑功能
的基本单元,他们通常规则排列成一个阵列,散布于整个芯片中。可编程输入/输
出模块(IOB)主要完成芯片上的逻辑与外部引脚的接口,它通常排列在芯片的四
周。可编程互连资源(PIR)包括各种长度的连线线段和一些可编程链接开关,他
们将各个 CLB 之间或 CLB 与 IOB 之间以及 IOB 之间连接起来,构成特定功能的
电路。
另外,FPGA 还具有以下特点[11]:
●设计灵活:芯片结构可重构,内部设置了数量丰富的输入输出单元引脚及触
发器;
●兼容性强:FPGA 芯片可与 CMOS、TTL 等大规模集成电路兼容,协同完成
计算任务;
●并行计算:FPGA 内部结构可按数据包步骤多少搭建相应数量流水线,不同
流水线处理不同数据包,实现流水线并行、数据并行功能;
●适用性强:是专用电路中开发周期最短、应用风险最低的器件之一。
6 基于 FPGA 的网络处理器设计与实现

2.2 Verilog HDL 简介

Verilog 是一种用于描述、设计电子系统(特别是数字电路)的硬件描述语言,
主要用于在集成电路设计,特别是超大规模集成电路的计算机辅助设计[12]。Verilog
能够在多种抽象级别对数字逻辑系统进行描述:既可以在晶体管级、逻辑门级进行
描述,也可以在寄存器传输级对电路信号在寄存器之间的传输情况进行描述[12]。
除了对电路的逻辑功能进行描述,Verilog 代码还能够被用于逻辑仿真、逻辑综合,
其中后者可以把寄存器传输级的 Verilog 代码转换为逻辑门级的网表,从而方便在
FPGA(现场可编程逻辑门阵列)上实现硬件电路,或者让硬件厂商制造具体的
AISC(专用集成电路)。设计人员还可以利用 Verilog 的扩展部分 Verilog-AMS 进
行模拟电路和混合信号集成电路的设计。
1983 年末,Gateway 设计自动化公司的工程师创立了 Verilogs。当时
Gateway 设计自动化公司还叫做自动集成设计系统(Automated Integrated Design
Systems),1985 年公司将名字改为 Gateway 设计自动化。该公司的菲尔·莫比(Phil
Moorby)完成了 Verilog 的主要设计工作。1990 年,Gateway 设计自动化被 Cadence
公司收购[13]。
1990 年代初,开放 Verilog 国际(Open Verilog International, OVI)组织(即现
在的 Accellera)成立,Verilog 面向公有领域开放。1992 年,该组织寻求将 Verilog
纳入电气电子工程师学会标准。最终,Verilog 成为了电气电子工程师学会 1364-
1995 标准,即通常所说的 Verilog-95。
设计人员在使用这个版本的 Verilog 的过程中发现了一些可改进之处。为了解
决用户在使用此版本 Verilog 过程中反映的问题,Verilog 进行了修正和扩展,这部
分内容后来再次被提交给电气电子工程师学会。这个扩展后的版本后来成为了电
气电子工程师学会 1364-2001 标准,即通常所说的 Verilog-2001。Verilog-2001 是对
Verilog-95 的一个重大改进版本,它具备一些新的实用功能,例如敏感列表、多维
数组、生成语句块、命名端口连接等。目前,Verilog-2001 是 Verilog 的最主流版
本,被大多数商业电子设计自动化软件包支持。
2005 年,Verilog 再次进行了更新,即电气电子工程师学会 1364-2005 标准。
该版本只是对上一版本的细微修正。这个版本还包括了一个相对独立的新部分,即
Verilog-AMS。这个扩展使得传统的 Verilog 可以对集成的模拟和混合信号系统进行
第二章 相关技术基础 7

建模。容易与电气电子工程师学会 1364-2005 标准混淆的是加强硬件验证语言特性


的 SystemVerilog(电气电子工程师学会 1800-2005 标准),它是 Verilog-2005 的一
个超集,它是硬件描述语言、硬件验证语言(针对验证的需求,特别加强了面向对
象特性)的一个集成。
2009 年,IEEE 1364-2005 和 IEEE 1800-2005 两个部分合并为 IEEE 1800-2009,
成为了一个新的、统一的 SystemVerilog 硬件描述验证语言(hardware description
and verification language, HDVL)[14]。

2.3 网络处理器抽象模型

网络处理器的结构有很多种,但是从功能上基本上都可以分成可编程处理核
心、专用协处理单元、存储层次、片上互连机制以及外围接口等 5 大部分,它们的
组织如图 2-1 所示[15]。

图 2-1 网络处理器结构

其中的可编程处理核心为多个精简 RISC 核或者 VLIW 核组成的阵列,它们为


网络处理器提供了灵活的可编程能力。这些处理单元通常为高速并行的网络处理
定制了专门的微结构和指令集,成为一种典型的专用指令集处理器 (Application
Specific Instruction Processor,ASIP)[15]。
可编程的处理单元在网络处理器中居于核心的地位。由于网络处理器中包含
大量的处理单元(16 到 64 个甚至更多),因此处理单元的设计必须高效,才能满足
8 基于 FPGA 的网络处理器设计与实现

网络处理器在性能、面积、功耗等方面的约束。处理单元的结构还必须具有足够的
灵活性,方便编程配置以及对各种协处理器和接口进行管理。同时处理单元的结构
还应该简洁规整,模块划分应该合理,从而方便设计正确性的验证[15]。
第三章 网络处理单元系统设计 9

第三章 网络处理单元系统设计

本章主要从整体和部分对该课题设计的网络处理单元的系统结构进行介绍。
利用 Verilog HDL 对各部分进行了模块化设计,并封装成独立的 ip 核,也方便了
针对不同的协议进行参数化配置的需求。本章开篇先是介绍了设计的项目需求,紧
接着提出了整个网络处理单元的体系结构,进而又分模块研究了解析器的功能和
体系结构,提出了匹配与动作部分的结构设计,并分析了采用的方法与其他方法的
对比,最后提出了一种逆解析器的体系结构。

3.1 项目需求

该项目需要解决的问题:
现有的网络处理单元普遍吞吐量低、协议解析和数据匹配操作不够灵活、系统
的工作频率不高。项目需要实现网络处理单元的高度可配置性和高吞吐量,支持简
单的数据接收、处理和转发。
为解决以上问题,该项目需要完成以下功能:
对接收到的数据包进行解析、字段修改、逆解析等操作,以完成对一帧网络数
据的接收、处理和转发工作。在本文中,用一帧位宽为 512 的数据作为处理对象。
在该数据的协议报头部分,包含了链路层的 Ethernet 协议和网络层的 IPv4 协议两
种报头。设计的工程硬件体系需要在 512 位的原始数据中根据数据的结构,将标
头部分提取出来。并根据不同协议的不同报文结构,对数据进行相关的错误检查等
一系列操作。针对从原始数据中提取出来的标头向量,系统需要针对协议的指定字
段,对其进行匹配操作,与其进行匹配的对象是我们预先初始化的规则集。规则集
要能够实时修改,以达到高度可配置性和灵活性的要求。根据匹配的结果,系统还
需要对其他字段进行替换、增添或删除的操作,以实现对网络数据的处理功能。系
统完成对标头数据的处理之后,还需要将其与原始数据的数据字段进行拼接,最终
构成一帧新的网络数据发送出去。
根据上面分析,设计的工程需要达到的性能指标:
1) 工程基于 xc7v2000tflg1925-1 进行设计,最终的工作频率需要达到 400MHz;
2) IO 资源占比小于 90%,其他资源占比小于 10%。
10 基于 FPGA 的网络处理器设计与实现

3.2 体系结构

要完成一个完整的网络处理过程,需要事先熟悉网络处理单元需要完成的工
作,据此将整个系统分为几个大模块,再根据需求将大模块细分为小模。一个复杂
的系统设计,采用这种自上而下的设计方法不失为一种好的选择。
如图 3-1,作者将整个网络处理单元划分为解析器、匹配与动作模块、数据缓
冲器、逆解析器四个部分。利用 Verilog HDL 设计完每个部分之后,利用 Vivado 软
件,将各部分封装成独立的 ip 核。完成独立功能单元 ip 核设计之后,用 Vivado 的
Block design 将 ip 例化为完整的网络处理单元。

图 3-1 网络处理单元系统结构

网络处理单元接收到一帧数据之后,首先会由解析器复制一定长度的数据标
头,复制的数据标头中包含了指示数据转发过程的信息,解析器会将这些信息提取
出来组成一个标头向量,另外的解析信息和数据标头将会送往数据缓冲器,解析信
息和数据标头将交给逆解析器使用。解析器将标头向量提供给匹配动作表,标头向
量中的一部分字段用来进行匹配,另一部分则是交给动作引擎的待处理字段,匹配
表根据匹配出的规则选定动作引擎将要进行的操作,例如增加、删除、修改字段等。
最终修改完成的标头向量将会交给逆解析器,由于只是数据的转发过程,逆解析器
不会改变标头中的协议,而是按照和解析过程完全相反的顺序将数据标头与缓存
数据重新组合成一个数据包发出。数据缓冲器的存在是为了使标头向量与数据标
头、解析信息同步到达逆解析器。

3.3 解析器结构

网络处理单元处理一帧数据,对数据结构进行解析是必不可少的一个环节,解
第三章 网络处理单元系统设计 11

析器支持对接收到的数据进行包分类、协议实现等。随着互联网技术的发展,网络
协议日益复杂多样,对解析器的硬件结构以及解析速度也提出了更高的要求。
该课题根据如图 3-2 所示的流水线解析器结构[16][17][18],完成了链路层 Ethernet
协议和网络层 IPv4 协议的解析。

图 3-2 解析器流水线结构

流水线结构的每一级只处理数据标头中的一种协议,并输出标头向量、协议类
型和剩下的数据标头传递给流水线的下一级,进行下一种协议的解析。虽然协议不
尽相同,但对于不同协议的解析过程是大同小异的,不同的只是协议中的部分参数,
我们只需要针对不同的协议进行参数化设计,封装成独立 ip 之后,就可以通过修
改 ip 的参数,从而实现对不同协议的解析。据此,作者设计了如图 3-3 所示的结
构,再次将解析器的每一级细分为协议类型验证、标头移位、字段提取、类型产生、
错误检查等模块。

图 3-3 解析器硬件结构

以上结构中的协议类型验证模块主要接收上一级协议解析出的类型字段,判
断类型字段是否与这一级可以解析的协议类型相匹配。例如,IPv4 的类型验证字
段为 0800,如果从上一级的 Ethernet 解析出的类型字段为 0800,则匹配,反之不
12 基于 FPGA 的网络处理器设计与实现

匹配。如果匹配,则输出使能信号 Type_right,对其它的几个模块进行使能,如果
不匹配,则输入的 Header_slice 跳过这一级,直接进行到下一级的协议解析。这一
模块只需要设计一个数据选择器即可实现所需功能。
类型产生模块则是从数据的协议标头中将类型字段提取出来,输出
Type_record 用于下一级协议解析的判断。该字段决定了这一帧数据下一阶段要进
行什么协议的解析。这一模块只需要参数化起始偏移量和终止偏移量,根据不同的
协议配置不同的参数,就可以实现不同协议类型字段的提取。
标头移位模块是每一级解析器的核心,在协议类型验证匹配后,标头移位模块
工作,将上一级解析剩下的数据包中这一级要解析的协议的标头提取出来,并通过
字段提取模块与上一级已经解析出来的协议的标头向量 Header_vector 拼接到一起。
字段提取模块将更新后的标头向量输出,等待与数据包中下一个协议的标头进行
拼接。当数据包中所有的协议都已经解析完毕,解析器输出最终的标头向量
Header_vector,用于后面匹配与动作部分的处理。
随着对数据处理速度的要求越来越高,错误检查模块的设计也至关重要。这一
部分主要是为了保证协议解析正确。例如对于 IPv4 协议,就需要对其进行版本号
检查、首部长度检查、检验和等等。检查的结果直接更新到寄存器中,如果某一级
的协议解析有问题,解析器会选择丢包,放弃后面一系列的数据处理过程[19]。

3.4 匹配模块结构

在网络处理单元工作时,数据包匹配的方法有很多种。
经典的五字段数据包分类根据数据包头中的五个字段对数据包进行分类[20]。
用于对分组进行分类的各个预定义条目称为规则,它们存储在规则集中。每条规则
都有一个规则 ID(RID)、5 个字段及其关联值、优先级和匹配时要采取的操作。只
有当数据包与规则中的所有字段匹配时,该数据包才被视为匹配规则。数据包分类
通常需要对规则集进行增量更新(修改、删除和插入)。Pankaj Gupta 和 Nick
McKeown 提出了两种基于树/树结构的支持动态更新的算法[21]。另外 B. Vamanan
和 T. N. Vijaykumar 提出了一种在 TCAM(三态内容寻址存储器,ternary content
addressable memory)上使用树结构的动态可更新的分组分类方案[22]。
以上方法都具有规则更新时间长、资源消耗大、在最坏情况下,一条插入的规
第三章 网络处理单元系统设计 13

则会在不同的子数组之间移动等缺点。
由 W. Jiang 和 V. K. Prasanna 提出的基于决策树的方法根据规则中一个或多个
字段的信息将搜索空间切割成更小的子空间[23]。由此生成的结果可以映射到流水
线架构中去。但是这种方法如果更新规则的话,决策树需要重新计算并映射到
FPGA。
基于分解的方法首先单独搜索每个包头字段。合并部分结果以产生最终结果。
基于散列的技术可用于合并部分结果。然而,重新配置散列函数是一项昂贵的操作。
位向量(BV)是另一种基于分解的方法;在 BV 中,每个字段中的查找返回一个
向量,每个位对应一个规则。仅当输入与该字段中的相应规则匹配时,才将位设置
为“1”。逐位逻辑与操作从所有字段中并行收集匹配项。
W. Jiang 和 V. K. Prasanna 还提出了一种基于 FPGA 的场分裂位向量(FSBV,
Field-Split BV)的方法[24]。在这种方法中,w 位字段分成 w 个一位的子字段,有
一个固定的规则映射 B 矩阵,对于每个子字段,会有一个“0”或“1”的向量,根据每
个字段的值映射 B 矩阵得出每个子字段对应的位向量,所有子字段映射出的位向
量做与运算得出最终的匹配向量。如图 3-4 所示[25],给出了 FSBV 的一个例子。事
先根据标头向量中的协议确定一组规则集(Rule set),将需要匹配的 w 位字段分
为 w 个子字段,每个子字段都有“0”或“1”两种情况。例如需要匹配的四位子字段
为 1100:
R0 为 11*0,对比过后,R0 与子字段匹配;
R1 为 0101,对比过后,R1 与子字段不匹配;
R2 为 110*,对比过后,R2 与子字段匹配。
则所有规则分别与子字段都对比结束后输出结果为 101 的规则向量。
14 基于 FPGA 的网络处理器设计与实现

图 3-4 FSBV 实例

尽管 FSBV 不需要任何规则集特性的知识,但它不支持规则集的动态更新。为
此,Yun R. Qu 和 Viktor K. Prasanna 又提出了 Dynamic-BV(动态位向量)的方法
[23]
。相对 FSBV 的直接将子字段与规则对比,Dynamic-BV 又添加了一个 V 矩阵
用来控制规则集中的规则是否有效。通过控制 V 矩阵中与规则对应的每一位的“0”
和“1”,也方便对规则集中的规则进行增加、删除、插入等操作。
●增加规则:每个子字段有 0 和 1 两种情况 对应多个规则构成的两个位向量,
最坏的情况下修改一个子字段的规则,需要更新两个位向量(0 和 1 分别对应的位
向量),由于每个位向量对应多条规则,所以一次更新可以同时更新多条规则。
●删除规则:如图 3-5,添加一个 V 矩阵,V 矩阵的每一位对应规则集的每个
规则,当 V 矩阵中的某一位为 0 时,它对应的规则失效。
●插入规则:如图 3-6,首先需要检查 V 矩阵中是否有任何无效的位(空缺检
查,vacancy check),如果有无效位,将无效位设置为 1(有效位),然后修改规
则矩阵中对应的位向量。

图 3-5 删除规则集中的规则 R1
第三章 网络处理单元系统设计 15

图 3-6 插入新的规则

根据上文介绍的 Dynamic-BV 的数据包匹配方法[26],作者设计了如图 3-7、图


3-8 所示的两种结构。在图 3-7 所示的第一种方法中,所有规则在一个时钟周期内
全部匹配结束,将每一个规则匹配的结果拼接为一个 n 位的规则位向量。图 3-8 所
示的流水线结构,每一级进行一种规则的匹配,每一级匹配结束后更新规则位向量,
所有规则位向量匹配结束后,输出最终的规则位向量[26]。两种结构都需要对初步
得到的规则位向量进行优先级处理,保证匹配模块最后只输出一个只有一个规则
匹配的规则位向量,即至多只有一位为“1”的规则位向量。
两种方法的最小模块都相同,只是在资源消耗和工作频率两个方面各有侧重。

图 3-7 基于 Dynamic-BV 的数据匹配并行结构


16 基于 FPGA 的网络处理器设计与实现

图 3-8 基于 Dynamic-BV 的数据匹配流水线结构

3.5 动作模块结构

对解析器解析出来的标头向量的固定字段匹配结束后,就需要根据匹配的结
果对标头向量的另一字段进行增加、删除、修改等操作。例如,针对标头向量中的
Ethernet 字段,我们需要对目的地址进行匹配操作,而后根据匹配的结果,对源地
址字段进行操作。对源地址的操作就需要用到本小节介绍的动作模块。
首先我们需要做的是将前面匹配模块输出的规则位向量进行译码,根据规则
位向量的不同输出不同的地址,指向存有操作码的 RAM,从 RAM 中取出操作码
之后,再将操作码与标头向量的指定字段进行增加、删除或者修改。对于可能增加
的字段会预留位置,对于删除的字段只需将该字段全部置换为 0,因此这三种方式
可以合成为对于字段的修改。因此,动作模块可以用一个通用的模块来完成。
如图 3-9,展示了动作模块的硬件结构。该模块的主要输入是匹配规则 rule 和
标头向量 header_vector,以及操作数据 RAM 的交互接口。匹配规则是 X 匹配模块
得到的匹配结果,标头向量是解析器生成的数据,模块的输出是经处理后的标头向
量。

图 3-9 动作模块结构
第三章 网络处理单元系统设计 17

模块主要由三部分组成:
● 操作数据 RAM:操作所需的数据都存储在 RAM 中,例如路由表信息。一
个数据转发过程可能会包含有多次的匹配动作,对不同的数据进行处理,为了方便
读取 RAM 中的数据,利用配置参数对 RAM 进行分块管理。接受到读取地址和
读使能信号后,RAM 将读取出数据交给动作模块处理。
● 规则译码:规则译码的输入是匹配规则和部分配置参数。配置参数的译码得
到操作数据读取地址的高位,即将 RAM 按照动作类型的不同分成不同的区域;
对于匹配规则的译码得到读取地址的低位,即相同动作类型内的不同操作数据。
● 数据处理:数据处理主要有增加字段、删除字段、修改字段三种方式,这三
种操作的共同点是在处理时都需要操作数据,以及待操作字段的起始位置和偏移
量。操作数据将从 RAM 中获取,操作字段起始位置和偏移量则从参数配置中获
取。完成数据的处理操作后,将输出处理后的标头向量。
一个动作模块往往和一个匹配模块是对应的关系,动作模块的设计也将采用
流水线结构,在完成动作模块硬件设计之后,将其按需插入到匹配模块流水线中,
组成匹配-动作的完整流水线。

3.6 逆解析器结构

解析器负责将一帧数据中的协议标头提取出来,另外还需要进行协议验证、错
误检查等操作。提取出来的数据标头经过匹配与动作模块处理后交由逆解析器重
新组装成完整的数据包发出。可以说,逆解析器的作用和解析器完全相反,处理数
据的过程也完全相反。据此,可以采用和解析器类似的结构设计逆解析器。如图 3-
10 所示为逆解析器的流水线结构[27]。

图 3-10 逆解析器流水线结构
18 基于 FPGA 的网络处理器设计与实现

同解析器的流水线一样,逆解析器也是每一级流水处理一个协议,每一级根据
标头向量的内容修改标头切片,最终生成有效的标头向量,与解析器另外输出的有
效负载合并后发出。逆解析器的主要作用是字段合并,同解析器一样,我们也可以
根据不同的协议设计一个通用模块,只需要修改模块的参数就可以完成对不同协
议的逆解析。如图 3-11 为逆解析器模块的硬件结构。

图 3-11 逆解析器硬件结构

逆解析器有三个输入端口,三个输出端口。输入端口分别为由解析器输出的状
态向量 Status、数据包中没有处理的数据段标头切片 header_slice,以及数据包中由
解析器提取出来后又经匹配动作模块处理过的标头向量 header_vector。逆解析过
程将修改后的标头和未经修改的数据切片合并到一起,组成新的协议标头。输出分
别是修改后的数据段标头切片和标头向量,以及交给下一级流水的状态向量。
逆解析模块可以分成四个部分:

⚫ 协议类型验证:在解析状态向量中存储了解析过程中的协议类型标记,由

于逆解析需要完成和解析相反的过程,并不改变协议的类型,所以在解析过程中处
理的协议类型在逆解析过程也要经过处理。协议类型验证会生成一个信号,该信号
为模块内其他组件的使能,当协议类型验证正确时,模块内的其它组件将完成其功
能,当协议类型错误时,标头切片会不经任何处理输出,此模块视为透明。

⚫ 字段合并:标头向量 header_vector 中含有处理后的标头切片的部分字段,

我们要将这些字段重新写入原标头向量中,如图 3-12 所示。要将指定的字段


写入到指定位置,需要字段的源起始地址与偏移量,以及目的起始地址与偏移量。
源起始地址与偏移量在解析时就使用过,固定字段在标头向量中的位置是固定的,
而对于一个协议来说,字段的位置也是固定的,这些信息将作为合并参数指示字段
第三章 网络处理单元系统设计 19

合并。

图 3-12 字段合并示意图

⚫ 校验和:部分协议在逆解析时需要完成校验和操作,因此在逆解析模块里,

预留了校验和组件。

⚫ 校验和更新:在完成校验和计算后,需要将生成的校验和再更新到标头切

片的固定位置,此部件的功能和字段合并的功能一致,只是对象不同。
同整个系统的其他模块一样,逆解析器也采用参数化设计,然后封装成独立 ip
核,通过修改 ip 指定参数,从而实现对不同协议的逆解析。
20 基于 FPGA 的网络处理器设计与实现
第四章 系统测试及仿真 21

第四章 系统测试及仿真

为验证第三章所设计的系统结构功能是否正确,本章从仿真环境的搭建开始,
对组成网络处理器的各个小模块,即 3.2 章节中划分的几部分进行了逐个仿真。最
后又对整个网络处理器进行了仿真。验证了各部分及整体的功能完整性,并对整个
网络处理器进行了时序仿真,测试其可以满足的最大工作频率。与此同时基于
xc7v2000tflg1925-1 做了资源消耗分析。

4.1 仿真环境的搭建

该工程所支持的协议类型为 Ethernet 和 IPv4,包含了 4 个匹配表与 3 个动


作类型。在完成了各模块的硬件 Verilog 设计之后,需要对其进行仿真验证。如图
4-1 所示是仿真平台结构图。

图 4-1 仿真平台结构图

我们将通过 test_mod 模块来对工程进行激励仿真验证。在 test_mod 中,有


两个 rom,分别存贮了待发送验证的数据标头(Header_rom)和与其对应的结果数
据标头(result_rom),Driver 按照一定的频率从数据标头 rom 中取出数据,发送
给工程,同时发出的数据也将收到监视,防止发生输出错误的情况。另一边,经过
工程处理的数据标头将回收发送到 compare 比较模块中,比较模块将接收到的结
果与 rom 中存储的结果相比较,判断是否出错。
22 基于 FPGA 的网络处理器设计与实现

在仿真测试之前,还需要完成匹配-动作表的初始化。Verilog 程序中声明了 4
个匹配表,分别是 ipv4_match、Check_ttl、dmac、smac。ipv4_match 表的匹配关
键字是目的 IP 地址,匹配方式是最长前缀匹配,规则深度是 1024,由于规则深
度的增加只是意味着流水级的增加,为了方便测试,将规则深度修改为 16,写入
规则为随机的 16 个 IPv4 地址,其中包含了不同层的子网,用来测试最长前缀匹
配。Check_ttl 表的匹配关键字是生存时间 ttl,匹配方式是精确匹配,在测试文件
中,将测试 ttl 大于 1、等于 1、小于 1 三种情况,用来检测匹配结果和动作模
块的执行情况。dmac 表的匹配关键字为下一跳目的 IP 地址,匹配方式是精确匹
配,测试时任意在表中写入 16 个地址,在测试文件中测试与表中地址相邻、相同、
相异的 IP 地址。smac 表的匹配关键字为端口 ID,匹配表将按照程序中声明的端
口 ID 填充。除了匹配表以外,每个匹配表还对应了一个操作数据存储 RAM,这
些 RAM 的初始化将使用和匹配表相对应的数据。在完成匹配动作表的初始化之
后,需要构建一个数据包头。数据包头的协议类型为 Ethernet 和 IPv4,程序中需
要使用或者处理的字段有目的、源 MAC 地址、以太网长度/类型、IP 版本号、IP
首部长度、IP 生存周期 ttl、IP 包头校验和、目的 IP 地址,这些字段将在测试文
件中赋予不同的内容以验证硬件逻辑功能的正确性,其余字段则使用随机数据。

4.2 解析器功能仿真

如图 4-2 所示是针对解析器 ip 搭建的仿真平台结构图。其中 Test_mod 负


责给解析器提供测试数据以及时钟、复位信号等激励,解析器接收到测试信号之后,
按照 Verilog 描述的逻辑进行工作,输出标头向量、数据切片、状态向量等信号。
通过观察 Modelsim 的波形图,与我们预期的结果进行对比即可判断解析器功能是
否正确。
第四章 系统测试及仿真 23

图 4-2 解析器仿真平台

由于我们设计的解析器较简单,只解析了两层协议(Ethernet+IP),所以我
们可以更细致的对每一个协议的解析过程进行仿真。
如图 4-3 所示是 Ethernet 协议的报文结构。根据 Ethernet 的报文结构我们给出
两个 116 位的测试数据:
116’haaaaaaaaaaaa_bbbbbbbbbbbb_0800_c;
116’hbbbbbbbbbbbb_aaaaaaaaaaaa_0800_c.

图 4-3 Ethernet 报文结构

图 4-4 Ethernet 仿真波形图

如图 4-4 是我们仿真的波形。从图中标注我们可以清楚的看到:
由测试数据
116’haaaaaaaaaaaa_bbbbbbbbbbbb_0800_c;
116’hbbbbbbbbbbbb_aaaaaaaaaaaa_0800_c.
解析出的标头向量、协议类型以及状态状态向量均和预期相同,证明 Ethernet
解析模块功能正确无误。
如图 4-5 所示是 IPv4 协议的报文结构。根据 IP 协议的报文结构我们给出两个
168 位的测试数据 A、B:
A:168’h4_A_BB_0015_0080_0000_CC_XX_00A0_DDDDDDDD_EEEEEEEE_
M;
B:168’h6_A_BB_0015_0080_0000_CC_XX_00A0_DDDDDDDD_EEEEEEEE_
M.
24 基于 FPGA 的网络处理器设计与实现

图 4-5 IP 协议报文结构

如图 4-6(a)、图 4-6(b)是我们仿真的波形。从图中标注我们可以清楚的看
到:
由测试数据
A:168’h4_A_BB_0015_0080_0000_CC_11_00A0_DDDDDDDD_EEEEEEEE_0
F;
B:168’h6_A_BB_0015_0080_0000_CC_11_00A0_DDDDDDDD_EEEEEEEE_0
F.
解析出的标头向量、协议类型以及状态状态向量均和预期相同,证明 IP 解析
模块功能正确无误。

图 4-6(a)数据 A 仿真波形

图 4-6(b)数据 B 仿真波形
第四章 系统测试及仿真 25

以上我们完成了对解析器 ip 的分协议仿真,仿真的结果也和我们预期的结果
是一样的,说明我们设计的解析器在功能方面没有问题。

4.3 匹配模块功能仿真

与解析器的仿真类似,我们需要搭建一个仿真平台,用 Verilog 设计一个激励


模块,给我们的匹配模块输入测试数据等激励信号,再通过 Modelsim 的波形与我
们的预期波形进行对比,从而判断匹配模块的功能是否符合我们的要求。由 3.3 节
介绍的匹配方法,我们设计了图 3-7 和图 3-8 所示的两种匹配结构,这两种结构都
是由图 4-6 所示的结构多次例化得来的,因此为了节省时间,我们只需要仿真图 4-
7 所示的结构,观察其波形是否正确即可,大大简化了仿真工作。

图 4-7 匹配仿真模块

根据模块所需要的激励,给出两种 Header_vector 值:
A : 16’hFFA0;
B : 16’hFFFF.
R0 为
8’hA0.
上一级的规则匹配结果 Rule_result_last 为
4’b0000.
V 矩阵中 R0 位有效。匹配字段为后八位,则如果模块功能正确,则 A 数据的
匹配的结果为 4’b0001,B 数据的匹配结果为 4’b0000。
如图 4-8(a)为 A 数据的仿真波形,图 4-8(b)为 B 数据的仿真波形。我们
可以清晰的看到匹配结果与我们预期结果相同,证明匹配模块功能正常。
26 基于 FPGA 的网络处理器设计与实现

图 4-8(a)A 数据匹配波形

图 4-8(b)B 数据匹配波形

4.4 动作模块功能仿真

该模块的主要功能是接收前面匹配模块发出的规则向量,对规则向量进行译
码,从动作模块内部的查找表 中取出译码后所得地址所指向的数据段,利用取得
的数据段对标头向量的指定字段进行修改。例如针对 Ethernet 协议的标头向量,我
们在完成对目的地址字段的匹配操作之后,需要对源地址字段进行修改。
同样,我们需要用 Verilog 设计一个模块,用来给动作模块输入测试数据等激
励信号。图 4-9 是针对动作模块搭建的仿真平台结构。

图 4-9 动作模块仿真平台

我们以四个规则的匹配为例,遍历所有可能的规则向量输入信号:4’b0000、
4’b0001、4’b0010、4’b0100、4’b1000,并输入一个 40 位的标头向量 40’b0,可以
第四章 系统测试及仿真 27

从图 4-10 中发现输出的标头向量的后 32 位根据不同的输入规则向量被修改成了


不同的字段,与我们的预期相同,证明动作模块的功能没有问题。

图 4-10 动作模块仿真波形

4.5 逆解析器模块功能仿真

逆解析器的作用是将经匹配-动作模块处理的标头向量 header_vector 与前面解


析器输出的数据切片 header_slice 再次合并到一起,构成一个新的数据包发送出去。
但是,值得注意的是,千万不要图省事直接将标头向量 header_vector 和数据切片
header_slice 拼接。前面 3.5 节我们已经介绍了逆解析器的硬件结构,对于特别的
协议,我们还需要进行校验和的错误检查,因此比较方便的设计方法是分不同的协
议将标头向量与数据切片拼接起来。本小节的仿真工作也针对 IP 和 Ethernet 分别
进行仿真。
在做 IP 协议的逆解析时,输入的标头向量中包含 Ethernet 和 IP 两种协议的报
头,总长度为 272 位,其中后 160 位是 IP 协议的报头,前面 112 位是 Ethernet 协
议的报头。因此针对 IP 协议逆解析的仿真,我们给出图 4-11(A)、图 4-11(B)所示
的两组测试数据:

图 4-11(A)

图 4-11(B)

A、B 两组数据的不同之处在于前面解析器对未经匹配-动作模块修改的标头
向量错误检查之后输出的状态向量 status 表示该协议的报头有没有问题,A 数据是
28 基于 FPGA 的网络处理器设计与实现

协议没有问题的,B 协议是协议有问题的。所以如果逆解析器的功能正确的话,A
数据仿真出的新的数据切片 header_slice_next 应该是 IP 报头字段与输入的数据切
片的拼接,而输出的新的标头向量 header_vector_next 应该只剩下 Ethernet 协议的
报头。B 数据的仿真由于 IP 协议有问题,所以不会给逆解析器的拼接模块使能,
默认会丢掉错误检查不通过的数据包,即输出默认值 0。
如图 4-12(A)、图 4-12(B)所示,分别为 A、B 数据的仿真结果。从图中我们可
以清晰看到,输出的结果与我们预期的结果相同。由此说明,逆解析器功能没有问
题。

图 4-12(A) A 数据仿真波形

图 4-12(B) B 数据仿真波形

4.6 系统功能仿真及性能分析

根据前文,我们已经完成了网络处理单元的各个组成模块的设计与仿真,本小
节是在将各模块封装成的 ip 利用 Vivado 连接起来之后,对整个网络处理单元的性
能进行评估的一个总结。
完成工程的创建和 Block Design、Create hdl wrapper 等操作之后,首先我们将
写好的仿真文件导入到 Vivado,对工程进行功能仿真。
对于系统的仿真,我们采用如图 4-13(A)、图 4-13(B)所示的两组数据。A 组数
据,在匹配阶段,没有规则与之协议所需匹配的字段匹配,故标头向量不做处理,
输出的结果与输入的数据相同。B 组数据中 Ethernet 协议和 ip 协议的目的地址匹
配结果均为 Rule_result=4’b0001,动作模块将对源地址字段进行删除操作,即将源
地址字段全部替换成 0。
如图 4-14(A)、图 4-14(B)所示为 A、B 组数据的仿真波形。从图中可以看出,
A 组数据的输出结果与输入相同,B 组数据的输出结果与输入对比,协议的源地址
第四章 系统测试及仿真 29

字段均已被替换为 0。与我们的预期结果相同,可以说明系统的功能正常。

图 4-13(A) A 组系统测试数据

图 4-13(B) B 组系统测试数据

图 4-14(A) A 组仿真波形图

图 4-14(B) B 组仿真波形图

功能仿真没有问题之后,我们将对工程进行 RTL 分析。如图 4-15 所示是顶层


模块的 RTL 原理图。

图 4-15 RTL 原理图

然后进行综合实现,在综合实现后执行时序分析。在综合后设计中,Vivado 时
序引擎会根据连接和扇出来估算信号线延迟,在实现后设计中,将基于实际布线信
息来估算信号延迟,我们通过 Report Timing Summary 报告实现时序验收。图 4-
16(a)是“时钟汇总 Clock Summary”中报告的时钟信息,模块中采用单一时钟,时钟
周期为 2.5ns,时钟频率为 400Mhz,在该时钟约束条件下,得到图 4-16(b)所示“设
30 基于 FPGA 的网络处理器设计与实现

计时序汇总 Design Timing Summary”中报告的最大延迟分析 Setup、最小延迟分析


Hold 和管脚开关限制 Pulse Width,可以看到,所有定义的时序约束均得到满足。

图 4-16(a) 时钟汇总信息

图 4-16(b) 设计时序汇总信息

时序验收之后,通过 Report Utilization 来观察该模块在 FPGA 中的资源占用


率。如表 4-1 所示,是本例模块在 xc7v2000tflg1925-1 中的资源占用率。
表 4-1 资源占用率

Resource Utilization Available Utilization %


LUT 239 1221600 <0.01%
Register 3071 2443200 <0.01%
IO 1051 1200 87.58%

BUFGCTRL 2 128 0.02%


MMCME2_ADV 1 24 0.04%
第五章 总结与展望 31

第五章 总结与展望

新时代,人民群众对于美好生活的向往,推动着互联网技术的快速发展,也推
动着网络处理技术的发展。Verilog 作为一种成熟的硬件描述语言,被广泛用于
ASIC 和 FPGA 的设计工作。又得益于 FPGA 的灵活性和稳定性,使得实现更为灵
活便捷的现场可重配置性。因此,基于 FPGA 的网络处理单元的设计与实现,本文
进行了以下工作:
完成了链路层和网络层协议的解析器和逆解析器设计,针对每一种协议封装
为独立的 ip 核,因此可以根据需求,更改 ip 核的参数就可以实现添加新的协议,
对其进行解析或者逆解析,实现了灵活性和可配置特性。该模块的设计最终在
FPGA 平台实现,并进行了功能仿真。
设计了两种高效的数据匹配结构,并用 Verilog 完成了其基本单元的设计,同
样封装成了独立 ip 核。在工程设计的时候,可以根据匹配规则的数量,灵活修改
匹配模块的例化数量。在 FPGA 平台完成综合实现之后,进行了功能仿真。
建立工程,利用本文中设计的模块 ip 核搭建了一个网络处理单元,并对其进
行了功能验证、时序分析以及资源占用统计。验证的结果表明,处理器能够完整的
实现数据接收和转发的功能,在时序上能够达到 400Mhz 的时钟频率,在资源占
用上,主要占用的资源集中在 IO 端口和匹配表上,其余的部分并不会占用太多资
源。
下一步工作展望:文中的硬件模板设计在组合成完整的网络处理单元之后,在
FPGA 实现过程中,由于布局布线的原因会导致时钟频率的下降,以致吞吐量的下
降,这就要求在编译映射的过程中应该对硬件结构进行调整,同时对硬件模板的设
计还有优化的空间。另外,文中提出的数据匹配方案的部分具体实现也是今后需要
努力的方向。
32 基于 FPGA 的网络处理器设计与实现
致谢 33

致谢

时光飞逝,回首大学四年时光,有过与同学朋友一起游玩的快乐,也有考研的
艰辛困苦,但正是这些快乐与艰辛交织而成的大学生活,才使我积累了珍贵的人生
经验和专业知识。使得我自去年 12 月份开始本科毕设之后,终于要将它完成。回
想这近半年的毕设时光,有许许多多需要感谢的人,多亏了他们,我才能坚持到现
在。
首先要感谢我的指导老师,曾志斌老师。曾老师学识渊博,治学严谨,在毕业
设计的选题、研究设计、论文撰写等方面都给予我耐心地指导,每当遇到问题的时
候,他总是给我们鼓励,耐心帮我们梳理问题,并激励着我们向更高的目标前行。
我谨在此向老师表示我最诚挚的感谢和敬意。
其次还要感谢给予了我巨大帮助的陈羽学长。每当我遇到问题或者思路不清
的时候,他总能给我细致入微的解答,每次与陈羽学长关于问题的讨论总能让我收
获很多新知识、新思路,他对待学术认真积极的态度也是我学习的榜样。在此,由
衷的感谢陈羽学长的帮助。
同时,要感谢我的家人、我的朋友一直以来默默的支持和理解。
最后,感谢学校给我们提供的平台,以及对我们的关心照顾。
34 基于 FPGA 的网络处理器设计与实现
参考文献 35

参考文献

[1] 赵 玉 宇 , 程 光 , 刘 旭 辉 , 袁 帅 , 唐 路 . 下 一 代 网 络 处 理 器 及 应 用 综 述 . 软 件 学
报,2021,32(2):445-474.
[2] https://zh.wikipedia.org/zh-hans/网络处理器.
[3] Tairan Zhang, Xinwan Li, Guiling Wu and Jianping Chen, Design and
implementation of high-speed BCP processor for OBS core node based on FPGA,
The 19th Annual Wireless and Optical Communications Conference (WOCC 2010),
Shanghai, 2010: 1-3.
[4] Niu, Yun, et al. A Configurable IPSec Processor for High Performance In-Line
Security Network Processor. Seventh International Conference on Computational
Intelligence and Security, CIS 2011, Sanya, Hainan, China, December 3-4, 2011
IEEE Computer Society, 2011: 674-678.
[5] Veeraprathap, V, M. Nagaraja, and M. Z. Kurian. Network on chip design and
implementation on FPGA with advanced hardware and networking functionalities.
Fourth International Conference on Computing IEEE, 2014: 1-6.
[6] G. Gadre, S. Badhe and K. Kulkarni, Network processor — A simplified approach
for transport layer offloading on NIC, 2016 International Conference on Advances in
Computing, Communications and Informatics (ICACCI), Jaipur, 2016: 2542-2548.
[7] Li, Bojie, et al. ClickNP: Highly Flexible and High-performance Network Processing
with Reconfigurable Hardware. Conference on Acm Sigcomm Conference ACM,
2016: 1-14.
[8] Z. Cao, H. Su, Q. Yang, M. Wen and C. Zhang, Poster Abstract: A Template-based
Framework for Generating Network Processor in FPGA, IEEE INFOCOM 2019 -
IEEE Conference on Computer Communications Workshops (INFOCOM
WKSHPS), Paris, France, 2019: 1057-1058.
[9] Xilinx. Vivado Design Suite 用户指南:设计分析与收敛技巧. v2019.2 /2019.p20.
[10] https://en.wikipedia.org/wiki/Ross_Freeman.
[11] Xilinx FPGA 权威设计指南 基于 Vivado 2018 集成开发环境.v2018.10.
[12] FPGA 设计技巧与案例开发详解.v2016.1.
36 基于 FPGA 的网络处理器设计与实现

[13] Verilog HDL 数字集成电路设计原理与应用.v2016


[14] https://zh.wikipedia.org/wiki/Verilog.
[15] 李 诚 , 李 华 伟 . 网 络 处 理 器 中 处 理 单 元 的 设 计 与 实 现 [J]. 计 算 机 工
程,2007(02):252-254.
[16] Michael Attig , Gordon Brebner. 400 Gb/s Programmable Packet Parsing on a Single
FPGA. ACM/IEEE Symposium on Architectures for Networking and
Communications Systems (ANCS),2011.
[17] V. Puš, L. Kekely and J. Kořenek, "Low-latency modular packet header parser for
FPGA," 2012 ACM/IEEE Symposium on Architectures for Networking and
Communications Systems (ANCS), 2012, pp. 77-78.
[18] Cao Z, Zhang H, Li J, et al. A fast approach for generating efficient parsers on
FPGAs[J]. Symmetry, 2019, 11(10): 1265.
[19] G. Sutter, M. Ruiz, S. Lopez-Buedo and G. Alonso, "FPGA-based TCP/IP Checksum
Offloading Engine for 100 Gbps Networks," 2018 International Conference on
ReConFigurable Computing and FPGAs (ReConFig), 2018, pp. 1-6, doi:
10.1109/RECONFIG.2018.8641729.
[20] D. E. Taylor, “Survey and Taxonomy of Packet ClassificationTechniques,” ACM
Computing Surveys, vol. 37, no. 3, pp.238–275, 2005.
[21] P. Gupta and N. McKeown, “Algorithms for packet classification,” IEEE Network,
vol. 15, no. 2, pp. 24–32, 2001.
[22] B. Vamanan and T. N. Vijaykumar, “TreeCAM: DecouplingUpdates and Lookups in
Packet Classification,” in Proc. ofthe 7th COnference on emerging Networking
EXperimentsand Technologies(CoNEXT), 2011, pp. 27:1–27:12.
[23] W. Jiang and V. K. Prasanna, “A FPGA-based Parallel Architecture for Scalable
High-Speed Packet Classification,” in 20th IEEE Intl. Conference on Application-
Specific Systems,Architectures and Processors (ASAP), 2009, pp. 24–31.
[24] W. Jiang and V. K. Prasanna, “Field-split Parallel Architecture for High Performance
Multi-match Packet Classification using FPGAs,” in Proc. of the 21st Annual Symp.
on Parallelism in Algorithms and Arch. (SPAA), 2009, pp. 188–196.
[25] Y. R. Qu and V. K. Prasanna, "Fast dynamically updatable packet classifier on
参考文献 37

FPGA," 2013 23rd International Conference on Field programmable Logic and


Applications, 2013, pp. 1-4, doi: 10.1109/FPL.2013.6645588.
[26] R. I. Khatami and M. Ahmadi, "High throughput multi pipeline packet classifier on
FPGA," The 17th CSI International Symposium on Computer Architecture & Digital
Systems (CADS 2013), 2013, pp. 137-138, doi: 10.1109/CADS.2013.6714253.
[27] Luinaud T, Santiago da Silva J, Langlois J M P, et al. Design Principles for Packet
Deparsers on FPGAs[C]//The 2021 ACM/SIGDA International Symposium on
Field-Programmable Gate Arrays. 2021: 280-286.

You might also like