Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
yaniv ben itzhak
committed
Dec 3, 2018
1 parent
b0e22e1
commit a64a22d
Showing
82 changed files
with
5,971 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
HNOCS Simulation Framework for OMNEST/OMNeT++ | ||
============================================== | ||
|
||
The HNOCS framework is an open-source network-on-chip networks simulation | ||
package, written for the OMNEST/OMNeT++ simulation system. The HNOCS framework | ||
contains models for several architectures of network on chip implementation. | ||
Its main difference from other NoC simulation platforms is that it support | ||
heretogeneous NoC implementations. | ||
|
||
Visit our website (http://hnocs.eew.technion.ac.il/) for latest release, forum, and mailiing list. | ||
Look into the NEWS file to find out about new features added. | ||
|
||
GETTING STARTED | ||
--------------- | ||
If you read this file you must have downloaded and unzip/untar'ed the HNOCS | ||
package. To prepare the models you will just need to make sure you have | ||
installed OMNEST/OMNeT++ include <omnet-home-dir>/bin in your PATH and run: | ||
make makefiles | ||
make | ||
|
||
It is advisible to take the OMNeT++ tutorial from: | ||
http://www.omnetpp.org/doc/omnetpp40/tictoc-tutorial/index.html. | ||
|
||
Then you can gather initial experience by running some of the simulations in | ||
the examples directory by running: | ||
./examples/run_nocs | ||
|
||
After that, you can learn the NED language from the OMNeT++ manual & sample | ||
simulations, read the OMNeT++ user manual and start coding your own modules. | ||
|
||
Directory structure | ||
------------------- | ||
The directories included in this model are following the basic structure of a NoC: | ||
src/ all modules of the projects | ||
cores/ the netork interfaces | ||
sources/ packet generators injecting into the network | ||
sinks/ packet collectors | ||
|
||
topologies/ collection of common topologies | ||
|
||
routers/ the packet switching logic within the network | ||
flat/ routers that are built with no internal hierarchy | ||
hier/ hierarchical routers built from a set of "ports" | ||
sched/ schedulers=arbiters responsible for selecting which | ||
packet will win the out port | ||
wormhole/ schedulers that are enforcing wormhole packet switching | ||
inPort/ input port logic including the queues and request for | ||
arbitration | ||
opCalc/ output port claculators - the routing function - | ||
selecting packet out port | ||
static/ deterministic = static routing | ||
vcCalc/ VC allocators | ||
free/ VC allocators that are allocating from the set of free | ||
VCs | ||
|
||
Using NED Interfaces | ||
===================== | ||
To facilitate a flexible simulation environment we use the OMNeT++ "Module | ||
Interface"feature. This allows us to declare the exect implementation to be | ||
used for each of the modules as a paremeter during simulation. Each interface | ||
is included in its own NED file. | ||
|
||
The following interfaces are defined: | ||
NI_Ifc - Network interface; ports: in, out; params: id (its address) | ||
Source_Ifc - Source of traffic; ports: out; params: srcId | ||
Sink_Ifc - Sink of traffic; ports: in; params: numVCs | ||
Port_Ifc - Hierarchical router port; ports: in, out, sw_in, sw_out, | ||
sw_ctrl_in, sw_ctrl_out; params: numPorts | ||
Router_Ifc - NoC router; ports in[], out[]; params: id, numPorts | ||
Sched_Ifc - Scheduler/Arbiter; ports: ctrl[], in[], out[]; params: numVCs | ||
InPort_Ifc - Router input port; ports: in, out[], ctrl[], calcVC, calcOp; | ||
params: numVCs | ||
OPCalc_Ifc - Routing calculation; ports: calc | ||
VCCalc_Ifc - VC Allocator; ports: calc | ||
|
||
|
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
all: checkmakefiles | ||
cd src && $(MAKE) | ||
|
||
clean: checkmakefiles | ||
cd src && $(MAKE) clean | ||
|
||
cleanall: checkmakefiles | ||
cd src && $(MAKE) MODE=release clean | ||
cd src && $(MAKE) MODE=debug clean | ||
rm -f src/Makefile | ||
|
||
makefiles: | ||
cd src && opp_makemake -f --deep | ||
|
||
checkmakefiles: | ||
@if [ ! -f src/Makefile ]; then \ | ||
echo; \ | ||
echo '======================================================================='; \ | ||
echo 'src/Makefile does not exist. Please use "make makefiles" to generate it!'; \ | ||
echo '======================================================================='; \ | ||
echo; \ | ||
exit 1; \ | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
all: checkmakefiles | ||
cd src && $(MAKE) -f Makefile.vc | ||
|
||
clean: checkmakefiles | ||
cd src && $(MAKE) -f Makefile.vc clean | ||
|
||
cleanall: checkmakefiles | ||
cd src && $(MAKE) -f Makefile.vc MODE=release clean | ||
cd src && $(MAKE) -f Makefile.vc MODE=debug clean | ||
|
||
makefiles: | ||
cd src && call opp_nmakemake -f --deep | ||
|
||
checkmakefiles: | ||
@if not exist src\Makefile.vc ( \ | ||
echo. && \ | ||
echo ============================================================================ && \ | ||
echo src/Makefile.vc does not exist. Please use the following command to generate it: && \ | ||
echo nmake -f Makefile.vc makefiles && \ | ||
echo ============================================================================ && \ | ||
echo. && \ | ||
exit 1 ) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
1.1.2013 - New release version: | ||
* Fixed memory leakage bug. | ||
* Fixed Sync router bug for heterogeneous NoC. | ||
* Add link utilization statistics. | ||
* Add option to define SchedSync`s tClk whether from the ini parameter or by its egress link BW. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
HNOCS Simulation Framework for OMNEST/OMNeT++ | ||
============================================== | ||
|
||
The HNOCS framework is an open-source network-on-chip networks simulation | ||
package, written for the OMNEST/OMNeT++ simulation system. The HNOCS | ||
framework contains models for several architectures of network on chip | ||
implementation. | ||
|
||
The set of example runs provided by this demo is: | ||
|
||
Mesh 4x4 | ||
Async - an asynchronous router design - simplest model assuming no latency | ||
within the router and no clock that synchronizes the circuit. | ||
Sync - a synchronous router with single FIFO per VC on the input buffer | ||
|
||
|
||
Mesh 8x8 | ||
Async - an asynchronous router design - simplest model assuming ... | ||
Sync - a synchronous router with single FIFO per VC on the input buffer | ||
|
||
|
||
An experiment named unifor_eval - available under each one of the router types - | ||
may be used to produce latency and throughput versus offered load plots. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Partial Tkenv config file -- see $HOME/.tkenvrc as well | ||
inspector "Mesh.router[6].port[0]" "Port" "2" "299x342+874+25:normal" | ||
inspector "Mesh.router[6]" "idealRouter" "2" "320x342+421+24:normal" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
This demo show a 4x4 Mesh that is using an asynchrounous | ||
router. This router is hierarchical and built out of input | ||
ports, output ports and VC and XY routing output port selectors. | ||
The modules used are: | ||
**.routerType = "nocs.routers.hier.idealRouter" | ||
**.coreType = "nocs.cores.NI" | ||
**.sourceType = "nocs.cores.sources.PktFifoSrc" | ||
**.sinkType = "nocs.cores.sinks.InfiniteBWMultiVCSink" | ||
**.portType = "nocs.routers.hier.Port" | ||
**.inPortType = "nocs.routers.hier.inPort.InPortAsync" | ||
**.OPCalcType = "nocs.routers.hier.opCalc.static.XYOPCalc" | ||
**.VCCalcType = "nocs.routers.hier.vcCalc.free.FLUVCCalc" | ||
**.schedType = "nocs.routers.hier.sched.wormhole.SchedAsync" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
[General] | ||
record-eventlog = false | ||
**.vector-recording=false | ||
network = hnocs.topologies.Mesh | ||
|
||
# Select Component Types | ||
**.routerType = "hnocs.routers.hier.idealRouter" | ||
**.coreType = "hnocs.cores.NI" | ||
**.sourceType = "hnocs.cores.sources.PktFifoSrc" | ||
**.sinkType = "hnocs.cores.sinks.InfiniteBWMultiVCSink" | ||
**.portType = "hnocs.routers.hier.Port" | ||
**.inPortType = "hnocs.routers.hier.inPort.InPortAsync" | ||
**.OPCalcType = "hnocs.routers.hier.opCalc.static.XYOPCalc" | ||
**.VCCalcType = "hnocs.routers.hier.vcCalc.free.FLUVCCalc" | ||
**.schedType = "hnocs.routers.hier.sched.wormhole.SchedAsync" | ||
|
||
sim-time-limit = 2ms | ||
|
||
# Global Parameters | ||
**.numVCs = 2 | ||
**.flitSize = 4B | ||
**.rows = 4 | ||
**.columns = 4 | ||
**.statStartTime = 1us # when to start | ||
|
||
# Source Parameters | ||
**.source.pktVC = 0 # the VC injecting the packet on from the NI | ||
**.source.msgLen = 4 # packets per message | ||
**.source.pktLen = 8 # in flits | ||
**.source.isSynchronous = false # inject flits without any synchronization to clock | ||
**.source.isTrace = false # do not inject based on trace file | ||
**.source.fileName = "" # no trace file given | ||
**.source.flitArrivalDelay = 2ns # 1 flit / Cycle | ||
**.source.maxQueuedPkts = 16 | ||
**.source.dstId = (id + intuniform(1, 15)) % 16 # Uniform random thar prevent self dst | ||
|
||
# Sink Parameters | ||
# all params are global | ||
|
||
# In Port Parameters | ||
**.inPort.collectPerHopWait = false # Controls per hop wait time collection | ||
**.inPort.flitsPerVC = 1 | ||
**.inPort.sendReqInAdvance = true | ||
|
||
# OPCalc | ||
# No parameters | ||
|
||
# VCCalc | ||
# No parameters | ||
|
||
# Sched Parameters | ||
**.sched.arbitration_type = 0 # if 1 allow sending Gnt on next Req while waiting for complted Req Acks | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/bin/sh | ||
../../../src/run_nocs $* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Partial Tkenv config file -- see $HOME/.tkenvrc as well | ||
inspector "Mesh" "Mesh" "2" "651x607+691+127:normal" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
This demo show a 8x8 Mesh that is using an asynchrounous | ||
router. This router is hierarchical and built out of input | ||
ports, output ports and VC and XY routing output port selectors. | ||
The modules used are: | ||
**.routerType = "nocs.routers.hier.idealRouter" | ||
**.coreType = "nocs.cores.NI" | ||
**.sourceType = "nocs.cores.sources.PktFifoSrc" | ||
**.sinkType = "nocs.cores.sinks.InfiniteBWMultiVCSink" | ||
**.portType = "nocs.routers.hier.Port" | ||
**.inPortType = "nocs.routers.hier.inPort.InPortAsync" | ||
**.OPCalcType = "nocs.routers.hier.opCalc.static.XYOPCalc" | ||
**.VCCalcType = "nocs.routers.hier.vcCalc.free.FLUVCCalc" | ||
**.schedType = "nocs.routers.hier.sched.wormhole.SchedAsync" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
[General] | ||
record-eventlog = false | ||
**.vector-recording=false | ||
network = hnocs.topologies.Mesh | ||
|
||
# Select Component Types | ||
**.routerType = "hnocs.routers.hier.idealRouter" | ||
**.coreType = "hnocs.cores.NI" | ||
**.sourceType = "hnocs.cores.sources.PktFifoSrc" | ||
**.sinkType = "hnocs.cores.sinks.InfiniteBWMultiVCSink" | ||
**.portType = "hnocs.routers.hier.Port" | ||
**.inPortType = "hnocs.routers.hier.inPort.InPortAsync" | ||
**.OPCalcType = "hnocs.routers.hier.opCalc.static.XYOPCalc" | ||
**.VCCalcType = "hnocs.routers.hier.vcCalc.free.FLUVCCalc" | ||
**.schedType = "hnocs.routers.hier.sched.wormhole.SchedAsync" | ||
|
||
sim-time-limit = 2ms | ||
|
||
# Global Parameters | ||
**.numVCs = 2 | ||
**.flitSize = 4B | ||
**.rows = 8 | ||
**.columns = 8 | ||
**.statStartTime = 1us # when to start | ||
|
||
# Source Parameters | ||
**.source.pktVC = 0 # the VC injecting the packet on from the NI | ||
**.source.msgLen = 4 # packets per message | ||
**.source.pktLen = 8 # in flits | ||
**.source.isSynchronous = false # inject flits without any synchronization to clock | ||
**.source.isTrace = false # do not inject based on trace file | ||
**.source.fileName = "" # no trace file given | ||
**.source.flitArrivalDelay = 2ns # 1 flit / Cycle | ||
**.source.maxQueuedPkts = 16 | ||
**.source.dstId = (id + intuniform(1, 63)) % 64 # Uniform random thar prevent self dst | ||
|
||
# Sink Parameters | ||
# all params are global | ||
|
||
# In Port Parameters | ||
**.inPort.collectPerHopWait = false # Controls per hop wait time collection | ||
**.inPort.flitsPerVC = 1 | ||
**.inPort.sendReqInAdvance = true | ||
|
||
# OPCalc | ||
# No parameters | ||
|
||
# VCCalc | ||
# No parameters | ||
|
||
# Sched Parameters | ||
**.sched.arbitration_type = 0 # if 1 allow sending Gnt on next Req while waiting for complted Req Acks | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/bin/sh | ||
../../../src/run_nocs $* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Partial Tkenv config file -- see $HOME/.tkenvrc as well | ||
inspector "Mesh" "Mesh" "2" "607x342+697+127:normal" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
This demo show how many simulation can be run to evaluate a 4x4 Mesh | ||
that is using a asynchrounous router under uniform random destination traffic. | ||
|
||
The experiment uses a single packet size of 16flits and performs 10 | ||
simulations on each offerred load. The average and maximal latency | ||
as well as the average and minimal throughput (over all sinks) are measured. | ||
|
||
NOTE: To produce the plots we simulate 100 cases (10 offered loads 10 random seeds each). | ||
|
||
The asynchronous router is hierarchical and built out of input | ||
ports, output ports and VC and XY routing output port selectors. | ||
The modules used are: | ||
**.routerType = "nocs.routers.hier.idealRouter" | ||
**.coreType = "nocs.cores.NI" | ||
**.sourceType = "nocs.cores.sources.PktFifoSrc" | ||
**.sinkType = "nocs.cores.sinks.InfiniteBWMultiVCSink" | ||
**.portType = "nocs.routers.hier.Port" | ||
**.inPortType = "nocs.routers.hier.inPort.InPortAsync" | ||
**.OPCalcType = "nocs.routers.hier.opCalc.static.XYOPCalc" | ||
**.VCCalcType = "nocs.routers.hier.vcCalc.free.FLUVCCalc" | ||
**.schedType = "nocs.routers.hier.sched.wormhole.SchedAsync" | ||
|
||
THIS SIMULATION IS RUNNING ONLY ON LINUX |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
[General] | ||
record-eventlog = false | ||
**.vector-recording=false | ||
network = hnocs.topologies.Mesh | ||
|
||
#repeat | ||
repeat=10 | ||
|
||
# Select Component Types | ||
**.routerType = "hnocs.routers.hier.idealRouter" | ||
**.coreType = "hnocs.cores.NI" | ||
**.sourceType = "hnocs.cores.sources.PktFifoSrc" | ||
**.sinkType = "hnocs.cores.sinks.InfiniteBWMultiVCSink" | ||
**.portType = "hnocs.routers.hier.Port" | ||
**.inPortType = "hnocs.routers.hier.inPort.InPortAsync" | ||
**.OPCalcType = "hnocs.routers.hier.opCalc.static.XYOPCalc" | ||
**.VCCalcType = "hnocs.routers.hier.vcCalc.free.FLUVCCalc" | ||
**.schedType = "hnocs.routers.hier.sched.wormhole.SchedAsync" | ||
|
||
sim-time-limit = 1ms | ||
|
||
# Global Parameters | ||
**.numVCs = 2 | ||
**.flitSize = 4B | ||
**.rows = 4 | ||
**.columns = 4 | ||
**.statStartTime = 1us # when to start | ||
|
||
# Source Parameters | ||
**.source.pktVC = 0 # the VC injecting the packet on from the NI | ||
**.source.msgLen = 2 # packets per message | ||
**.source.pktLen = 8 # in flits | ||
**.source.isSynchronous = false # inject flits without any synchronization to clock | ||
**.source.isTrace = false # do not inject based on trace file | ||
**.source.fileName = "" # no trace file given | ||
**.source.flitArrivalDelay = exponential(${D=3,3.5,3.75,4,4.25,4.5,5,6,7,8}ns) | ||
**.source.maxQueuedPkts = 256 | ||
**.source.dstId = (id + intuniform(1, 15)) % 16 # Uniform random thar prevent self dst | ||
|
||
# Sink Parameters | ||
# all params are global | ||
|
||
# In Port Parameters | ||
**.inPort.collectPerHopWait = false # Controls per hop wait time collection | ||
**.inPort.flitsPerVC = 5 | ||
**.inPort.sendReqInAdvance = true | ||
|
||
# OPCalc | ||
# No parameters | ||
|
||
# VCCalc | ||
# No parameters | ||
|
||
# Sched Parameters | ||
**.sched.arbitration_type = 0 # if 1 allow sending Gnt on next Req while waiting for complted Req Acks | ||
|
Oops, something went wrong.