因为写论文需要所以用到了这个NoC仿真器,可惜网上只有教怎么安装。正好写一个介绍文档方便使用这个仿真器,以下内容不带无线通信部分。

Noxim仿真器介绍文档

1. 介绍noxim

2. 工程文件

3. 工程的UML图


1. 介绍noxim

Noxim是一种在 SystemC 中开发的开放、可配置、可扩展、周期精确的 NoC 模拟器,它允许分析传统有线 NoC 和新兴 WiNoC 架构的性能和功率数据。Noxim 还提供了一组有关功耗(动态和泄漏)的细粒度统计数据。

Noxim 模拟器是使用 SystemC 开发的,SystemC 是一个用 C++ 编写的系统描述库。 这一选择的动机是 Noxim 项目背后的基本要求:允许可扩展性和可扩展性能,同时仍支持周期精确模拟。它可以收集不同的评估指标,包括接收的数据包/flits 的总数、全局平均吞吐量、最大/最小全局延迟、总能耗、每次通信延迟/吞吐量/能量等。

如图1所示,对于节点,Noxim 将它们分为两类,即 tile 节点和 radio-hub 节点。 第一组tile 节点包括 NoC 的计算/存储节点,而第二组radio-hub 节点包括网关节点,用于分组区块和缩短网络的远距离区域。

Amesim 液压原件 I型_systemc


图1.NoC的Mesh结构(Tile包括路由Router以及处理单元PE)

Noxim 提供了几种常用的数据流量模型(参考书:Principles and Practices of Interconnection Networks),包括统一、转置、位反转、蝴蝶、热点,它们抽象了典型的通信模式。
Noxim 提供了一组与性能和功耗指标相关的统计数据。关于性能指标,模拟器的周期精确性可获得以下参数的无错误估计:

—注入/接收的flit/包总数:注入网络的flit和包的总数以及在目的地传递的flit和包的数量。此类信息在全局级别(即,针对整个网络)和本地级别(即,针对特定网络节点)提供。

—平均通信延迟:从产生包的时间到目的节点消耗掉包尾的平均时钟周期数。

—每次通信的平均/最小/最大/方差延迟:对于每个通信对,数据包延迟的平均值、最小值、最大值和方差如注入/接收的flit/包总数所定义。

—全局吞吐量:接收到的总flit与仿真时钟周期数之间的比率。

—每通信吞吐量:对于每个源/目的对,目的节点从源节点接收到的flit数与时钟周期数之间的比率。

—总能耗:网络的总能耗,包括路由器、链路、无线电集线器和网络接口。

—每通信能耗:每个源/目的地通信对的总能耗的比例。

—能量分解:网络不同主要元素及其子元素的能量贡献。这种能量贡献进一步分为静态和动态分量。

2. 工程文件

2.1目录结构

• config_examples:NoC 配置文件,如果你想尝试,只需复制一份 default_config.yaml
• 其他:已弃用的内容,正在进行中,跳过它
• bin:noxim 可执行文件、结果和日志
• doc:安装说明、许可证等。
• src:仅当需要修改 Noxim 时修改这里的文件

2.2 Src中的文件

架构元素:Buffer.h、Router.h、LocalRoutingTable.h、Tile.h、NoC.h、GlobalRoutingTable.h、Power.h、ProcessingElement.h //NoC模块部分,Router.h , Tile.h , NoC.h部分为最关键3部分

模拟器管理和实用程序:ConfigurationManager.h、DataStructs.h、GlobalStats.h、Stats.h、Utils.h、GlobalParams.h,GlobalTrafficTable.h ReservationTable.h //这些主要是用于监测和统计数据

无线通信:Initiator.h、Target.h、Hub.h、TokenRing.h, Channel.h //因为我们不需要无线通信,这部分不需要关注

可以在以下位置找到路由算法:src/routingAlgorithms //如果要修改算法,这部分需要重写

2.3文件对应的模块组成

Amesim 液压原件 I型_Amesim 液压原件 I型_02


图2 NoC内部组成模块如图2所示,NoC内部由Tile模块相互链接,组成Mesh结构,以完成数据的相互通信。从顶级角度来看,特定 NoC 架构的配置实例化了两个主要概念元素:一组节点和一个通信基础设施。每个节点执行一些计算/存储任务,通过通信基础设施与其他节点异步交换数据。架构的实际实例完全由 NoC 配置决定,允许自定义 NoC 的多个参数,每个参数不仅可能影响 NoC 的行为,还可能影响执行仿真所需的时间。

Amesim 液压原件 I型_输入输出_03


图3 Tile模块的内部结构

如图3所示,每个 Tile 包含一个路由器和一个处理元素,每个 Tile 连接到 4 个邻居,可选地,一些节点可以连接到无线电集线器,允许无线传输。

3.工程的UML图

Amesim 液压原件 I型_输入输出_04

3.1各文件简介介绍

Main.cpp: 该文件包含Noxim顶层的实现.主要作用:创建了一个NoC,将NoC中参数配置完成。

NoC.h: 此文件代表顶级测试平台,即NoC的声明。可以根据配置生成不同架构的NoC:Mesh型,蝶形等。将每个Tile相连接。

Tile.h:此文件包含Tile的声明。包含了Router和PE(数据包生成模块)

Tile 节点代表 Noxim 架构的主要组件。尽管它们可以在概念上与计算/存储元素相关联,但需要更多功能以支持基于 NoC 的方法典型的数据通信的分布式特性。具体而言,可以区分以下元素:处理元素、路由器和有线连接。

Router.h:该文件包含Router的声明。包含了数据包的接收和发送,仲裁等功能。这是整个设计最重要的部分,
是负责分发数据包、实现流量控制和网络中大多数与通信相关的机制的架构元素。它基本上由实现路由算法所需的组件 “动态行为”部分中指定的选择策略组成。当从给定的输入连接接收到数据包的报头迁移时,路由器应用路由功能并选择合适的输出连接。如果选择的输出尚未被另一个输入保留,则路由器进行保留并设置内部交叉开关 这样所有后续的flit(直到尾部flit)都将遵循虫洞切换的相同路径。
ProcessingElement.h:该文件包含ProcessingElement的声明。主要是数据包的产生,接收和发送。
处理元件 (PE) 是实际执行计算/存储操作的核心组件。它通常映射到整个计算已经被分区的任务之一(例如,解码器或小内存的硬件实现)。PE负责生成和使用数据包,其运行时的行为严格取决于工作负载参数

3.2各模块的信号以及细节

一 . NoC.h

其中包含了带无线(sc_signal_NSWEH)的和不带无线(sc_signal_NSWE)的sc_signal信号模板,只需要看不带无线的信号模板。
NoC中成员变量包含成员有些不用关注。带sc_signal_NSWEH的以及变量名后缀为_hub的变量,因为这说明是带Hub部分。这一部分主要是为了:1.生成Tile之间的req,ack信号,以及数据包Flit类型的信号。2.生成需要的Tile对象。将生成的Tile之间的端口进行连接以及配置。边界Tile节点的信号清除,因为是mesh结构。

二.Tile.h
  1. Tile中有Tile模块之间的数据包Flit输入输出信号,req输入输出信号,ack输入输出信号,同样带hub的信号可以不看。有router与PE相连接的数据包Flit输入输出信号,req输入输出信号,ack输入输出信号。
  2. 包含了2个模块,router模块和PE模块。将模块端口的信号相互连接。
三.Router.h

包含了2部分。第一部分,数据包Flit输入输出信号,req输入输出信号,ack输入输出信号。第二部分,router内部的寄存器(成员变量)和模块(成员函数)。
Router中成员函数的介绍

  1. process()函数中包含txProcess()和rxProcess()。就是输入输出模块。
  2. rxProcess()接受新的flit
  3. txProcess()发送flit
  4. getCurrentNoPData()监测模块
  5. perCycleUpdate()检测模块
  6. configure()用于配置router信息
  7. routingFunction(无线函数不需要看
  8. getNeighborId()得到相邻Tile的id编号
  9. inCongestion()查看是否拥塞
  10. ShowBuffersStats()查看buffer状态
  11. connectedHubs()无线函数不需要看
四.Power.h

主要统计的是数据包交换过程中的能量。因为对仿真器修改的时候不需要修改能量消耗部分所以这部分没注意。

使用总结

这是一个很优秀的NoC仿真器,并且可以进行修改。在使用过程中,我对其的描述可能是片面或错误的,这篇介绍文档只是我在使用过程中总结而来,如果出现错误,请直接指出。


2021.12.4更新

做毕设时,正好有看到一篇15年的毕设论文有用到NoXim。

高滔,片上网络路由算法的设计与性能评估[D].东南大学,2015.

因为是毕业论文介绍的相当详细。介绍了三个路由进程:rxProcess、txProcess、bufferMonitor。

首先介绍路由之间的连接关系,如图所示。

Amesim 液压原件 I型_systemc_05


NoximTile[0][0]与NoximTile[1][0]信号连接图,标号中前一维度代表x维,后一维度代表Y维,它们的节点标识号分别为0与3。它们之间联络信号线分为三组:free slot to east[1][0]与free slot to west[1][0]用于传递流控制信息,即各自缓冲区的利用情况。req_to east[1][0]、flit to east[1][0】、ack to west[1l[0]lN于NoximTile[O][0]向NoximTile[1][0]传送flit。req_to_west[1][0]、flit to west[1][0]、ack to east[1][0]用于NoximTile[1][0] NoximTile[0][0]传送flit。bufferMonitor工作流程如下图,依次向各个方向的free slots信号写入实时的缓冲区空闲空间数,告知上游路由器缓冲区空闲空间数。该进程只在需要根据缓冲区空闲空间数进行路由选择时才工作,即Noxim的路由选择策略设定为bufferlevel或者nop。

Amesim 液压原件 I型_systemc_06


rxProcess进程的详细工作流程如图所示,依次扫描各个方向的输入端口将nit读入输入缓冲区。

Amesim 液压原件 I型_systemc_07


txProcess进程的详细工作流程如图4—7所示,采用轮询的方式为各个输入缓冲区提供服务。主要分为保留(Reservation)与转发(Forwm’ding)两步:保留步骤根据路由与选择的结果修改保留表为输入端口分配输出端口仲裁冲突;转发步骤则查询分配好的保留表进行转发操作。图左侧为保留步骤,右侧为转发步骤。该进程最为复杂,也是Noxim路由器模型最为核心最为重要的进程。

Amesim 液压原件 I型_verilog_08