图书前言

前言

本书根据作者长期教学科研实践,围绕路由器的典型结构,重点介绍基于Trie的IP路由查找电路、SDN流表电路、空分交换单元、共享存储交换单元和复杂队列管理器等5类典型电路,涵盖了计算机网络中常用的典型电路。所有电路均给出典型应用场景、算法原理、电路框图、接口定义和工作流程,以及经过实际验证的RTL级设计代码并进行详细的注释,可采用FPGA或专用集成电路加以实现。主要电路都给出仿真代码和典型仿真结果,便于读者对电路进行理解和分析。

目前,Verilog HDL类书籍普遍偏重基本语法教学和基本电路设计,或者讲授FPGA设计流程,本书则重在帮助具有初步语法基础的读者通过对各类典型工程案例的学习,成体系地熟悉计算机网络领域典型电路的设计与实现,有效积累大规模数字系统设计知识和实际的工程技术经验,为进一步进行本领域的创新实践打下坚实基础。

本书具有以下主要特点: ①所选择的案例均具有一定代表性,并且在现有书籍中涉及较少; ②每个案例均给出电路的应用场景、算法原理、电路设计代码和仿真验证代码,完备性较高,易于学习; ③所有代码都经过工程实践验证,可以直接应用于计算机网络类数字系统的设计,可以采用FPGA或者专用集成电路实现; ④注重将数字系统设计方法学知识融入不同类型的设计案例中,有助于增加读者对复杂数字系统设计工程学知识的了解,可对其他电路设计起到指导作用。

本书包括6章。

第1章为概述。简单介绍计算机网络的分层模型及路由器在计算机网络中的基本功能。在此基础上介绍路由器的典型结构、关键电路和部分基础知识,为后面章节的阅读与学习提供支撑。

第2章重点介绍全硬件最长前缀匹配电路的算法原理与电路实现。本章对应用于路由器等网络设备中的IP地址最长前缀匹配技术进行较为全面的介绍,对基本二进制Trie的构造、匹配、删除等操作的算法原理进行分析; 给出采用全硬件构造基本二进制Trie时的电路结构、电路工作原理、详细设计代码并进行仿真分析。针对基本二进制Trie在查找速度和存储空间利用率上的不足,分析路径压缩二进制Trie查找电路的结构、算法原理、典型代码和仿真分析结果。

第3章对基于哈希的查找技术进行较为系统的分析与设计实现。基于哈希的查找技术可被应用于以太网交换机和软件定义网络(Software Defined Network,SDN)中多级流表的实现。SDN是近年来高速发展并被逐渐接受的网络技术,流表是其实现路由查找的关键技术。本章重点分析多桶哈希查找电路的算法原理与电路实现,同时,以此为基础,设计典型多级流表电路并进行仿真分析。

第4章给出支持虚拟输出队列的多端口空分交换单元的完整设计。Crossbar是典型的空分交换单元,可广泛应用于各种网络设备中,包括以太网交换机和路由器等,也可作为IP核用于各种分布式处理系统中,进行不同处理单元之间的信息交互。本章给出包括虚拟输入队列、输入仲裁器、输出仲裁器在内的典型Crossbar电路,对设计代码进行仿真分析。

第5章给出典型共享存储交换结构的工作机制和电路实现。共享存储交换结构由自由指针队列管理器、基于链表的8优先级队列控制器以及顶层电路构成。本章对其电路结构、内部接口关系和工作流程进行说明,对其涉及的算法原理进行详细分析,给出完整的设计代码并进行仿真分析。

第6章重点设计支持资源预留的多用户队列管理器和基于DDR的多用户队列管理器。队列管理器是路由器和各类协议处理器等网络设备中的典型电路,可以根据需要同时建立和维护大量的逻辑队列。本章设计的支持资源预留的队列管理器可以为不同的逻辑队列分配私有缓冲区,保证缓冲区使用的公平性,同时,这些逻辑队列还可以按需使用共享缓冲区,提高缓冲区利用率,从而形成灵活的缓冲区分配与使用机制。支持资源预留的队列管理器可以为不同的逻辑队列,基于预先配置的信用值分配输出带宽,实现灵活的带宽分配和多队列输出调度机制。基于DDR的多用户队列管理器采用数据块与数据分段相结合的缓冲区划分与使用机制,可以兼顾缓冲资源按需动态分配和较低的硬件资源消耗,同时支持数据重传,满足特定的数据转发与协议处理需求。

需要说明的是,路由器历经多代发展,可根据应用场景、转发能力、设备结构、部署位置、链路类别等进行分类,形成复杂的设备型谱,涉及庞大的知识体系,无论哪本书都很难全面详尽地加以介绍。本书围绕路由器的基本功能,较为全面地介绍计算机网络中常用的基本电路,给出典型设计代码,旨在帮助学习者快速理解和掌握复杂数字系统设计技术,提升设计能力。

阅读本书时,需要注意以下几点: 

(1) 本书的设计代码均采用可综合风格的Verilog HDL实现,仿真验证代码主要基于task高效实现。

(2) 在代码中主要使用FIFO和RAM两类IP核。本书的IP核主要基于Xilinx的ISE或Vivado集成开发环境生成,如果使用其他开发环境,只需略作调整即可。本书的所有代码都可以直接在Xilinx的ISE或Vivado集成开发环境下进行实际验证和仿真分析,也可方便地移植到其他开发环境下。

(3) 本书中所有状态机均采用混合类型而非传统的米里型和摩尔型,更适合设计复杂状态机,使代码可读性更强。

(4) 为了更好地分析仿真结果,模拟真实电路中的门延迟,在代码的赋值语句中加入了延迟,有利于分析信号跳变与时钟上升沿之间的关系。

本书由陆军工程大学乔庐峰教授、陈庆华副教授、晋军副教授和续欣副教授编著。鲁铭洋、张栋、李荣健、王金旭等硕士研究生参与了部分代码调试、仿真验证和内容编写工作,在此表示感谢。

乔庐峰2025年3月