Introduction

Demonstrates the Rotuing Table construction and dynamic link analysis

Network_Basic

Browsable image of the model.

  • To download OpenWebStart click on the links -
    Windows- Compatibility:Windows 10 or higher (*)
    macOS - Compatibility:macOS 10.15 (Catalina) or higher (*)
    Linux - Compatibility:Ubuntu 18.04 LTS or higher (*)
  • For an executable version,
  • Mouse over the icons to view parameters. Click on hierarchy and plotters to reveal content (if provided).
  • To simulate, click on Launch button, open downloaded file and click Run on the Java Security Page.
Network_Basicmodel <h2>ExpressionList4</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Expression_List</td><td>/* Template to enter multiple RegEx lines*/\\ninput.Task_Destination = (irand(1,10)&lt;5 &amp;&amp; Number_of_CPUs == 2)?&quot;uP1&quot;:&quot;uP2&quot;\\ninput.Task_Size   = 100\\ninput.Task_Source = &quot;Node_1&quot;</td><td>/* Template to enter multiple RegEx lines*/\\ninput.Task_Destination = (irand(1,10)&lt;5 &amp;&amp; Number_of_CPUs == 2)?&quot;uP1&quot;:&quot;uP2&quot;\\ninput.Task_Size   = 100\\ninput.Task_Source = &quot;Node_1&quot;</td></tr><tr><td>Output_Ports</td><td>output</td><td>&quot;output&quot;</td></tr><tr><td>Output_Values</td><td>input</td><td>&quot;input&quot;</td></tr><tr><td>Output_Conditions</td><td>true</td><td>&quot;true&quot;</td></tr></table> <h2>Traffic3</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Name</td><td>&quot;Header&quot;</td><td>&quot;Header&quot;</td></tr><tr><td>Start_Time</td><td>60.0</td><td>60.0</td></tr><tr><td>Value_1</td><td>Task_Rate</td><td>0.5</td></tr><tr><td>Value_2</td><td>2.0</td><td>2.0</td></tr><tr><td>Random_Seed</td><td>123457L</td><td>123457L</td></tr><tr><td>Time_Distribution</td><td>Fixed (Value_1)</td><td>Fixed (Value_1)</td></tr></table> <h2>SingleEvent2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>_explanation</td><td>Source-&gt;Event-&gt;SingleEvent\t</td><td>Source-&gt;Event-&gt;SingleEvent\t</td></tr><tr><td>time</td><td>185.0</td><td>185.0</td></tr><tr><td>value</td><td>1</td><td>1</td></tr></table> <h2>ExpressionList3</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Expression_List</td><td>/* Template to enter multiple RegEx lines*/\\ninput.Task_Destination = (irand(1,10)&lt;5 &amp;&amp; Number_of_CPUs == 2)?&quot;uP1&quot;:&quot;uP2&quot;\\ninput.Task_Size   = 100\\ninput.Task_Source = &quot;Node_2&quot;</td><td>/* Template to enter multiple RegEx lines*/\\ninput.Task_Destination = (irand(1,10)&lt;5 &amp;&amp; Number_of_CPUs == 2)?&quot;uP1&quot;:&quot;uP2&quot;\\ninput.Task_Size   = 100\\ninput.Task_Source = &quot;Node_2&quot;</td></tr><tr><td>Output_Ports</td><td>output</td><td>&quot;output&quot;</td></tr><tr><td>Output_Values</td><td>input</td><td>&quot;input&quot;</td></tr><tr><td>Output_Conditions</td><td>true</td><td>&quot;true&quot;</td></tr></table> <h2>Traffic2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Name</td><td>&quot;Header&quot;</td><td>&quot;Header&quot;</td></tr><tr><td>Start_Time</td><td>1.0e-7</td><td>1.0E-7</td></tr><tr><td>Value_1</td><td>Task_Rate</td><td>0.5</td></tr><tr><td>Value_2</td><td>2.0</td><td>2.0</td></tr><tr><td>Random_Seed</td><td>123457L</td><td>123457L</td></tr><tr><td>Time_Distribution</td><td>Fixed (Value_1)</td><td>Fixed (Value_1)</td></tr></table> <h2>ExpressionList2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Expression_List</td><td>/* Template to enter multiple RegEx lines*/\\ninput.Task_Destination = (irand(1,10)&lt;5 &amp;&amp; Number_of_CPUs == 2)?&quot;uP1&quot;:&quot;uP2&quot;\\ninput.Task_Size   = 100\\ninput.Task_Source = &quot;Node_1&quot;</td><td>/* Template to enter multiple RegEx lines*/\\ninput.Task_Destination = (irand(1,10)&lt;5 &amp;&amp; Number_of_CPUs == 2)?&quot;uP1&quot;:&quot;uP2&quot;\\ninput.Task_Size   = 100\\ninput.Task_Source = &quot;Node_1&quot;</td></tr><tr><td>Output_Ports</td><td>output</td><td>&quot;output&quot;</td></tr><tr><td>Output_Values</td><td>input</td><td>&quot;input&quot;</td></tr><tr><td>Output_Conditions</td><td>true</td><td>&quot;true&quot;</td></tr></table> <h2>Traffic</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Name</td><td>&quot;Header&quot;</td><td>&quot;Header&quot;</td></tr><tr><td>Start_Time</td><td>1.0e-7</td><td>1.0E-7</td></tr><tr><td>Value_1</td><td>Task_Rate</td><td>0.5</td></tr><tr><td>Value_2</td><td>2.0</td><td>2.0</td></tr><tr><td>Random_Seed</td><td>123457L</td><td>123457L</td></tr><tr><td>Time_Distribution</td><td>Fixed (Value_1)</td><td>Fixed (Value_1)</td></tr></table> <h2>TextDisplay2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>rowsDisplayed</td><td>10</td><td>10</td></tr><tr><td>columnsDisplayed</td><td>40</td><td>40</td></tr><tr><td>suppressBlankLines</td><td>false</td><td>false</td></tr><tr><td>title</td><td>&quot;Routing_Table&quot;</td><td>&quot;Routing_Table&quot;</td></tr><tr><td>ViewText</td><td>true</td><td>true</td></tr><tr><td>saveText</td><td>false</td><td>false</td></tr><tr><td>fileName</td><td>Enter Filename to save text</td><td>&quot;Enter Filename to save text&quot;</td></tr><tr><td>Append_Time</td><td>true</td><td>true</td></tr></table> <h2>ExpressionList</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Expression_List</td><td>/* No Expressions. */</td><td>/* No Expressions. */</td></tr><tr><td>Output_Ports</td><td>output</td><td>&quot;output&quot;</td></tr><tr><td>Output_Values</td><td>TNow-input.TIME</td><td>&quot;TNow-input.TIME&quot;</td></tr><tr><td>Output_Conditions</td><td>true</td><td>&quot;true&quot;</td></tr></table> <h2>TextDisplay</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>rowsDisplayed</td><td>10</td><td>10</td></tr><tr><td>columnsDisplayed</td><td>40</td><td>40</td></tr><tr><td>suppressBlankLines</td><td>false</td><td>false</td></tr><tr><td>title</td><td>&quot;Transactions&quot;</td><td>&quot;Transactions&quot;</td></tr><tr><td>ViewText</td><td>true</td><td>true</td></tr><tr><td>saveText</td><td>false</td><td>false</td></tr><tr><td>fileName</td><td>Enter Filename to save text</td><td>&quot;Enter Filename to save text&quot;</td></tr><tr><td>Append_Time</td><td>true</td><td>true</td></tr></table> <h2>uP2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;uP2&quot;</td><td>&quot;uP2&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>NODE_2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;Node_2&quot;</td><td>&quot;Node_2&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>NODE_4</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;Node_4&quot;</td><td>&quot;Node_4&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>NODE_5</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;Node_5&quot;</td><td>&quot;Node_5&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>uP1</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;uP1&quot;</td><td>&quot;uP1&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>NODE_3</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;Node_3&quot;</td><td>&quot;Node_3&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>NODE_1</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Node_Name</td><td>&quot;Node_1&quot;</td><td>&quot;Node_1&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr></table> <h2>Database</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>*.xml, *.csv files abs or rel (./) path\\n  -- *.csv real columns set to number\\nInput_Fields == Lookup_Fields (num, type)\\nOutput_Expr: match, match_last, match_all\\n  -- match_all.field not allowed</td><td>*.xml, *.csv files abs or rel (./) path\\n  -- *.csv real columns set to number\\nInput_Fields == Lookup_Fields (num, type)\\nOutput_Expr: match, match_last, match_all\\n  -- match_all.field not allowed</td></tr><tr><td>Linking_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr><tr><td>fileOrURL</td><td>&nbsp;</td><td>&quot;&quot;</td></tr><tr><td>Data_Structure_Text</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\nID Source_Node  Destination_Node  Distance  Speed_Mbps\tDuplex ;       \\n 0 Node_1       Node_3            10.0      100.0  \ttrue   ; \\n 1 Node_1       Node_4            10.0      100.0   \ttrue   ;      \\n 2 Node_2       Node_3            10.0      100.0  \ttrue   ; \\n 3 Node_2       Node_4            10.0      100.0 \ttrue   ;\\n 4 Node_3       Node_5            10.0      100.0  \ttrue   ;      \\n 5 Node_4       Node_5            10.0      100.0  \ttrue   ;      \\n 6 Node_5       uP1               10.0      100.0   \ttrue   ;\\n 7 Node_5       uP2               10.0      100.0   \ttrue   ;</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\nID Source_Node  Destination_Node  Distance  Speed_Mbps\tDuplex ;       \\n 0 Node_1       Node_3            10.0      100.0  \ttrue   ; \\n 1 Node_1       Node_4            10.0      100.0   \ttrue   ;      \\n 2 Node_2       Node_3            10.0      100.0  \ttrue   ; \\n 3 Node_2       Node_4            10.0      100.0 \ttrue   ;\\n 4 Node_3       Node_5            10.0      100.0  \ttrue   ;      \\n 5 Node_4       Node_5            10.0      100.0  \ttrue   ;      \\n 6 Node_5       uP1               10.0      100.0   \ttrue   ;\\n 7 Node_5       uP2               10.0      100.0   \ttrue   ;</td></tr><tr><td>Input_Fields</td><td>&quot;Source_Node&quot;</td><td>&quot;Source_Node&quot;</td></tr><tr><td>Lookup_Fields</td><td>&quot;Source_Node&quot;</td><td>&quot;Source_Node&quot;</td></tr><tr><td>Output_Expression</td><td>&quot;output = match&quot; /* FORMAT output = match.fieldb */</td><td>&quot;output = match&quot;</td></tr><tr><td>Mode</td><td>Read</td><td>Read</td></tr></table> <h2>SingleEvent</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>_explanation</td><td>Source-&gt;Event-&gt;SingleEvent\t</td><td>Source-&gt;Event-&gt;SingleEvent\t</td></tr><tr><td>time</td><td>0.0</td><td>0.0</td></tr><tr><td>value</td><td>1</td><td>1</td></tr></table> <h2>End-to-end Latency</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>fillOnWrapup</td><td>true</td><td>true</td></tr><tr><td>legend</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>startingDataset</td><td>0</td><td>0</td></tr><tr><td>fileName</td><td>Enter Filename to save plot</td><td>&quot;Enter Filename to save plot&quot;</td></tr><tr><td>viewPlot</td><td>true</td><td>true</td></tr><tr><td>savePlot</td><td>false</td><td>false</td></tr></table> <h2>Const2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>value</td><td>&quot;Add_Link&quot;</td><td>&quot;Add_Link&quot;</td></tr></table> <h2>NODE_Master2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr><tr><td>Link_Src_Des_Dist_BW</td><td>&quot;Node_3, Node_5, 10.0, 100.0&quot;</td><td>&quot;Node_3, Node_5, 10.0, 100.0&quot;</td></tr><tr><td>Dynamic_Routing</td><td>New_Routing_Table</td><td>New_Routing_Table</td></tr></table> <h2>Const</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>value</td><td>&quot;Remove_Link&quot;</td><td>&quot;Remove_Link&quot;</td></tr></table> <h2>Pipeline_Basic</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Delay_to_Port_1</td><td>51.0</td><td>51.0</td></tr><tr><td>Delay_to_Port_2</td><td>50.0</td><td>50.0</td></tr><tr><td>Delay_to_Port_3</td><td>180.0</td><td>180.0</td></tr><tr><td>Delay_to_Port_4</td><td>100.0</td><td>100.0</td></tr></table> <h2>NODE_Master</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;RT&quot;</td></tr><tr><td>Link_Src_Des_Dist_BW</td><td>&quot;Node_3, Node_5, 10.0, 100.0&quot;</td><td>&quot;Node_3, Node_5, 10.0, 100.0&quot;</td></tr><tr><td>Dynamic_Routing</td><td>New_Routing_Table</td><td>New_Routing_Table</td></tr></table> <h2>Routing_Table</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Routing_Table_DB</td><td>&quot;Routing_Table_DB&quot;</td><td>&quot;Routing_Table_DB&quot;</td></tr><tr><td>Routing_Table_Name</td><td>&quot;RT&quot;</td><td>&quot;&quot;RT&quot;&quot;</td></tr><tr><td>Propagation_Constant_C</td><td>1.0</td><td>1.0</td></tr><tr><td>Message_Names</td><td>{&quot;Retry&quot;, &quot;Request&quot;, &quot;Acknowledge&quot;}</td><td>{&quot;Retry&quot;, &quot;Request&quot;, &quot;Acknowledge&quot;}</td></tr><tr><td>Message_Bytes</td><td>{16, 16, 16}</td><td>{16, 16, 16}</td></tr><tr><td>NODEs_in_Model</td><td>true</td><td>true</td></tr><tr><td>Routing_Algorithm</td><td>Dijkstra</td><td>Dijkstra</td></tr><tr><td>Routing_Algorithm_Cost</td><td>Link_Load</td><td>Link_Load</td></tr><tr><td>Routing_Latencies</td><td>Length_in_feet</td><td>Length_in_feet</td></tr></table>

Route Optimization using Network SmartBlocks

Any collection of nodes that are connected together is considered a network in VisualSim terminology. This could be devices on a board or a set of SOC components on an ASIC. The routing bertween these nodes require detailed analysis to determine the optimum routing paths and reliability of the routing protocol. The networking blocks in VisualSim provide the ability to setup these types of network nodes and their links. In addition, the ability to generate a variety of workloads and create a variety of operating scenarios is provided.

The Workloads can be characterized using

The network scenarios can be charcterized using the Node Master, Pipeline, Layer Table and the Routing Table blocks. Example of these scenarios include

Project Objective

This project evaluates the utilization at each node of a network of devices when a link is removed and later added. The model also captures the optimum path between the devices based on different workloads.

Capabilities Demonstrated

This demo model demonstrates the networking capability of VisualSim and focuses on the NODE, Routing_Table, and NODE_Master blocks. The NODE blocks provide either "connected" or "connectionless" modeling capability. This model is using the more advanced "Virtual Connection" modeling style, which provides for easy model layout, irregardless of physical connections, and provides a simulation speed advantage, as fewer input-output port actions are taken by the model.

The Routing_Table is another modeling innovation, in that all of the NODE blocks can access this common Routing Table, where common network parameters can be set for the entire network. Multiple networks, and routing tables are also supported. The NODE_Master is another modeling innovation that allows the user to do one of three actions: add a link, remove a link, or simply update the routing table (dynamic routing capability). Currently, the network routing blocks support the shortest path first Dykstra routing alogorithm (N^2). As there are many new routing algorithms, VisualSim provides for user routing algorithms. This is performed by simply manipulate the existing Routing Table via the Model_List block, or create a code based version of the routing algorithm.

Model Development Statistics

Number of uniques blocks required to create the model = 10

Time to do the initial model construction = 3 hours

Model analysis and refinement = 2 days

Documentation = 1.5 day

Model Construction Details

This is a model of a simple network comprising of 7 nodes. A node is a device on the network that accepts data, analyzes the data, modifies and sends it out to the next node in the chain. The traffic can originate at either Node 1 or Node 2. Each transaction will terminate at either µP1 or µP2. The model consists of:

Simulations

The model demonstrates packets being sent through the model, a link being removed between Node_3 and Node_5 at time t = 100.0, a routing table generated at t= 110.0, adding back the same link between Node_3 and Node _5 at t = 150.0, and finally a routing table generated at t= 160.0.

Results

When you click on GO, VisualSim executes a Discrete-Event simulation of the model. For this example, there are two results that are displayed

Some of the analysis that can be performed on this model without changing any of the conenctions: