跳转至

第四部分:软硬件接口设计

软件接收以太网帧

联合实验进展到此时,实验者应当已经基本完成 CPU 的设计与实现,CPU 应当可以运行代码并往串口打印一些内容了。本节中,实验者需要设计一套软硬件接口,使得运行在 CPU 上的软件能够接收转发引擎传递的需要软件处理的以太网帧。

软硬件接口常见的设计方案有如下几种:

  1. 普通MMIO(Memory-Mapped I/O):与《计算机组成原理》实验中的串口非常类似,软件通过统一的内存地址访问硬件接口,执行一次寄存器读操作就读取以太网帧的一个字(若干字节)。同时,硬件接口提供状态和长度等寄存器。
  2. DMA(Direct Memory Access):软件在内存中提供一块缓冲区,然后通过MMIO的方式将缓冲区地址和容量写入硬件接口提供的寄存器,硬件此时开始自动接收以太网帧,并将收到的内容写入上述缓冲区。当一个以太网帧接收完成后,硬件在状态寄存器中提供一个标志位或向 CPU 发送一个中断来通知这一事件,然后 CPU 轮询这一标志位或处理相应的中断。同时,硬件接口还可以提供一些寄存器,用于保存上次接收的以太网帧的长度。
  3. 共享内存:CPU 上的软件和硬件共享一块缓冲区,然后同时访问某种数据结构(如循环队列)。

转发引擎部分需要按照 IP 分组头部的目标 IP 地址决定是否将此 IP 分组传递给 CPU 上的软件进行处理。需要软件处理的 IP 分组主要包括 RIP 报文(本实验需要实验者使用软件实现 RIP 协议,并设计软硬件接口)。

软件部分需要不断地接收以太网帧并进行处理,还可以通过串口输出帧的信息。实现软件部分的过程中,实验者需要把 C 代码编译为可以直接在实验者的 CPU 上运行的机器码,这需要借助链接器脚本、若干编译选项以及一些工具来实现。

本节实验的过程中,实验者可能会发现其 CPU 实现存在若干问题,或者不支持某些新指令。前者一般可以通过仔细阅读代码找到并修复,而后者一般可以通过修改编译选项解决。

思考

  1. 哪种软硬件接口设计方案性能较好?
  2. 如何从 C 源代码生成可以直接在实验者的 CPU 上运行的机器码?
  3. 链接器脚本起到什么作用?为什么需要链接器脚本?

转发表软硬件接口

在介绍转发表的软硬件接口前,本节首先区分路由表以及转发表的概念。路由表(Routing Table,也称作 RIB,Routing Information Base)主要供(软件的)路由协议进行路由信息交换以及路由选择。软件处理路由信息并选择得到最佳路由后,会生成转发表(Forwarding Table,也称作 FIB,Forwarding Information Base)供(硬件的)转发引擎进行高效转发。此外,路由表相比转发表多了许多路由协议相关的字段,以 RIP 路由协议为例,其路由表比转发表多了 metric 等字段,硬件事实上不需要这些额外的字段即可进行转发。请注意,在本实验中,实验者可以不必严格区分这两个表,若在实现上方便且高效,它们可以实现为同一个表,但本节后文的描述仍然会对其进行概念上的区分。

本实验中,软件实现的 RIP 路由协议交换路由表信息,并在路由选择后生成转发表。为此,实验者需要设计并实现转发表的软硬件接口,使得软件能够读写硬件的转发表(事实上,最少只需要支持写操作)。例如,当路由表被 RIP 路由协议更新后,软件需要生成新的转发表并更新至硬件转发引擎的转发表中。若转发表的接口支持读操作,软件就可以读取并验证转发表是否正确。

如果转发表基于 FPGA 片内的 RAM 实现,实验者可以直接为 CPU 提供该 RAM 的访问接口(类似共享内存),这样软件即可较为简单地访问转发表并操作数据结构了。此外,实验者的设计方案中,软件路由协议和硬件转发引擎可能会同时对转发表进行写和读。此时,在软件结束写操作前,转发表中的某些数据可能不正确,转发可能出错。若实验者希望进行“无缝”的转发表更新,可以实现两份转发表:转发引擎使用一份,而软件进行写操作时使用另一份。当软件写操作结束后即可原子地交换这两个转发表(的指针)。相对简单地,实验者还可以确保查询转发表的状态机或流水线在转发表某些数据不正确时依然能够给出某些结果(garbage in, garbage out),在牺牲几个 IP 分组转发正确性的情况下绕过该问题。

RIP 路由协议实现

实验者首先需要按照与“软件接收以太网帧”类似的方法,实现软件发送以太网帧的功能。

然后,实验者可以开始实现 RIP 路由协议,同时通过设计好的软硬件接口来收发 RIP 报文、更新转发表以及操作 ARP 缓存。此时,建议实验者参考软件路由器实验文档(上面菜单的“网络原理实验”)中的相关内容。

另请参见:RFC 2453: RIP Version 2


最后更新: 2020年10月19日
作者: Harry Chen (40.0%), Wende Tan (60.0%)