Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
yaniv ben itzhak committed Dec 3, 2018
1 parent b0e22e1 commit a64a22d
Show file tree
Hide file tree
Showing 82 changed files with 5,971 additions and 0 deletions.
Binary file added FAQ.pdf
Binary file not shown.
76 changes: 76 additions & 0 deletions GETTING STARTED
@@ -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 added How to Add HNOCS to OMNeT Workspace.pdf
Binary file not shown.
23 changes: 23 additions & 0 deletions Makefile
@@ -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
22 changes: 22 additions & 0 deletions Makefile.vc
@@ -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 )
6 changes: 6 additions & 0 deletions NEWS
@@ -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.

23 changes: 23 additions & 0 deletions examples/README
@@ -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.
4 changes: 4 additions & 0 deletions examples/async/4x4/.tkenvrc
@@ -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"

13 changes: 13 additions & 0 deletions examples/async/4x4/README
@@ -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"
53 changes: 53 additions & 0 deletions examples/async/4x4/omnetpp.ini
@@ -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

2 changes: 2 additions & 0 deletions examples/async/4x4/run
@@ -0,0 +1,2 @@
#!/bin/sh
../../../src/run_nocs $*
3 changes: 3 additions & 0 deletions examples/async/8x8/.tkenvrc
@@ -0,0 +1,3 @@
# Partial Tkenv config file -- see $HOME/.tkenvrc as well
inspector "Mesh" "Mesh" "2" "651x607+691+127:normal"

13 changes: 13 additions & 0 deletions examples/async/8x8/README
@@ -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"
53 changes: 53 additions & 0 deletions examples/async/8x8/omnetpp.ini
@@ -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

2 changes: 2 additions & 0 deletions examples/async/8x8/run
@@ -0,0 +1,2 @@
#!/bin/sh
../../../src/run_nocs $*
3 changes: 3 additions & 0 deletions examples/async/uniform_eval/.tkenvrc
@@ -0,0 +1,3 @@
# Partial Tkenv config file -- see $HOME/.tkenvrc as well
inspector "Mesh" "Mesh" "2" "607x342+697+127:normal"

23 changes: 23 additions & 0 deletions examples/async/uniform_eval/README
@@ -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
56 changes: 56 additions & 0 deletions examples/async/uniform_eval/omnetpp.ini
@@ -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

0 comments on commit a64a22d

Please sign in to comment.