7、noxsim相关知识点

1、Noxsim是一种在 SystemC 中开发的开放、可配置、可扩展、周期精确的 NoC(片上网络) 模拟器,它允许分析传统有线 NoC 和新兴 WiNoC 架构的性能和功率数据。

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

3、

Total received packets: 1355: #接收到的数据包总数:1355

Total received flits: 10834  #已接收的数据量:10834片

Received/Ideal flits Ratio: 0.940451  #?

Average wireless utilization: 0  #均通信延迟:从产生包的时间到目的节点消耗掉包尾的平均时钟周期数

Global average delay (cycles): 11.2716  #平均延迟(周期):11.2716

Max delay (cycles): 86  #最大延迟(周期):86

Network throughput (flits/cycle): 1.20378 #全局吞吐量:接收到的总flit与仿真时钟周期数之间的比率

Average IP throughput (flits/cycle/IP): 0.0752361 #每通信吞吐量:对于每个源/目的对,目的节点从源节点接收到的flit数与时钟周期数之间的比率

Total energy (J): 2.10831e-06  #总能耗

Dynamic energy (J): 1.33058e-07  #动能?

Static energy (J): 1.97525e-06   #静能?

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

5、主要看Router.h/Router.cpp , Tile.h , NoC.h/Noc.cpp,其他架构模块Buffer.h、Router.h、LocalRoutingTable.h、Tile.h、NoC.h、GlobalRoutingTable.h、Power.h、ProcessingElement.h。

监测和统计模块: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

算法模块:routingAlgorithms

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

NoC.h: 此文件代表顶级测试平台,即NoC的声明。可以根据配置生成不同架构的NoC:Mesh型,蝶形等。将每个Tile相连接。其中包含了带无线(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:此文件包含Tile的声明。包含了Router和PE(数据包生成模块)

Tile中有Tile模块之间的数据包Flit输入输出信号,req输入输出信号,ack输入输出信号,同样带hub的信号可以不看。有router与PE相连接的数据包Flit输入输出信号,req输入输出信号,ack输入输出信号。

包含了2个模块,router模块和PE模块。将模块端口的信号相互连接。   

ProcessingElement.h:该文件包含ProcessingElement的声明。主要是数据包的产生,接收和发送。

处理元件 (PE) 是实际执行计算/存储操作的核心组件。它通常映射到整个计算已经被分区的任务之一(例如,解码器或小内存的硬件实现)。PE负责生成和使用数据包,其运行时的行为严格取决于工作负载参数

Router.h:该文件包含Router的声明。包含了数据包的接收和发送,仲裁等功能。这是整个设计最重要的部分,

是负责分发数据包、实现流量控制和网络中大多数与通信相关的机制的架构元素。它基本上由实现路由算法所需的组件 “动态行为”部分中指定的选择策略组成。当从给定的输入连接接收到数据包的报头迁移时,路由器应用路由功能并选择合适的输出连接。如果选择的输出尚未被另一个输入保留,则路由器进行保留并设置内部交叉开关 这样所有后续的flit(直到尾部flit)都将遵循虫洞切换的相同路径。

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

Router中成员函数的介绍

process()函数中包含txProcess()和rxProcess()。就是输入输出模块。

rxProcess()接受新的flit

txProcess()发送flit

getCurrentNoPData()监测模块

perCycleUpdate()检测模块

configure()用于配置router信息

routingFunction(无线函数不需要看

getNeighborId()得到相邻Tile的id编号

inCongestion()查看是否拥塞

ShowBuffersStats()查看buffer状态

connectedHubs()无线函数不需要看      

Power.h

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

在Noc.cpp中

无线模式:将tile的发送和接收信号端口和noc中的signal绑定。

有线模式:将tile的发送和接收信号端口和hub中的signal绑定。

为什么不用router的端口直接连接Noc的信号呢?而是用router连接tile,再用tile连接noc?

6、路由算法:

1) 坐标定位法:

源x<目标x,则向东移动。

源x>目标x,则向西移动。

源y<目标y,则向南移动。

源y>目标y,则向北移动。

2)奇偶路由算法

Abs(目标x-源x)如果为偶数,则优先x方向移动。

Abs(目标x-源x)如果为奇数,则优先y方向移动。

Abs(目标y-源y)如果为偶数,则优先y方向移动。

Abs(目标y-源y)如果为奇数,则优先x方向移动。

如果都为奇数或偶数,则根据上一步移动情况交替移动。

3)优先某方向:优先某个方向移动,只有某个方向无法移动后才选择其他方向。

4)查路由表:根据输入方向和目标节点id获取路径链表。

5)Delta算法原理:根据每个阶段节点所处阶段获取目标节点id相应位数,得到当前阶段传输方向。

                                        bufferfly网络拓扑结构

7、将某些端口连接到一个“闲置”或“虚拟”信号上。所有的端口通常都需要被连接,即使某些端口在当前的配置或模拟中不会被使用。不连接这些端口可能会导致编译或运行时错误,因为系统期望所有的端口都被正确地连接。某些模拟框架或工具(如SystemC)要求所有的端口都必须被连接。即使这些端口不会被实际使用,也需要通过连接到“虚拟”信号来满足框架的要求。

8、通过main中的configure函数从.yaml中读配置参数。

9、FLIT_TYPE_HEAD:初始化新消息,当路由器接收到 FLIT_TYPE_HEAD 时,它知道这是一个新消息的开始。它会初始化一个新的消息处理上下文,包括消息的源地址、目的地址、消息类型等。路由决策,路由器根据头部 flit 中的信息(如源地址和目的地址)做出路由决策。它会确定消息的下一跳路由器,并开始将消息传递到下一跳。资源分配,路由器会为这个新消息分配必要的资源,如虚拟通道(VC)、缓冲区空间等,以确保消息能够正确传输。 FLIT_TYPE_BODY(主体 flit):数据传输,一旦路由器接收到 FLIT_TYPE_BODY,它知道这是消息的实际数据部分。它会继续将这些数据 flit 传递到下一跳,直到所有数据 flit 都被处理完毕。维持现有消息上下文:在处理主体 flit 时,路由器会维持现有的消息上下文,继续使用之前为该消息分配的资源(如虚拟通道、缓冲区等)。错误检测与恢复:如果主体 flit 在传输过程中丢失或损坏,路由器可能会触发错误检测和恢复机制,以确保数据的完整性。

FLIT_TYPE_TAIL(尾部 flit)消息结束标识:当路由器接收到 FLIT_TYPE_TAIL 时,它知道这是消息的最后一个 flit。这个尾部 flit 标志着消息的结束。资源释放:路由器会释放为该消息分配的资源,如虚拟通道和缓冲区空间,以便为新的消息做好准备。状态更新:接收端的路由器或处理器会更新其状态,表明已经成功接收到了完整的消息。如果需要,它还会向发送端发送确认消息,以确认消息的接收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值