Drive

Host computer with SATA interface to a local disk drive

Disk_Sub_System

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.
Disk_Sub_Systemmodel <h2>DRAM</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>Architecture_Name</td><td>&quot;Architecture_1&quot;</td><td>&quot;Architecture_1&quot;</td></tr><tr><td>Memory_Name</td><td>&quot;DRAM&quot;</td><td>&quot;DRAM&quot;</td></tr><tr><td>Memory_Speed_Mhz</td><td>Bus_Speed</td><td>160.0</td></tr><tr><td>Memory_Size_MBytes</td><td>64.0</td><td>64.0</td></tr><tr><td>Access_Time</td><td>&quot;Read 5.0, Prefetch 6.0, Write 7.0, ReadWrite 8.0, Erase 9.0&quot;</td><td>&quot;Read 5.0, Prefetch 6.0, Write 7.0, ReadWrite 8.0, Erase 9.0&quot;</td></tr><tr><td>FIFO_Buffers</td><td>32</td><td>32</td></tr><tr><td>Refresh_Rate_Cycles</td><td>16384</td><td>16384</td></tr><tr><td>Refresh_Cycles</td><td>32</td><td>32</td></tr><tr><td>Memory_Address</td><td>&quot;/* Format: Min_Address,Max_Address. Example:201,300 */&quot;</td><td>&quot;/* Format: Min_Address,Max_Address. Example:201,300 */&quot;</td></tr><tr><td>Controller_Time</td><td>&quot;Cycle_Time * 1.0&quot;</td><td>&quot;Cycle_Time * 1.0&quot;</td></tr><tr><td>Enable_Hello_Messages</td><td>true</td><td>true</td></tr><tr><td>Width_Bytes</td><td>4</td><td>4</td></tr><tr><td>Memory_Type</td><td>DDR2</td><td>DDR2</td></tr></table> <h2>BusInterface2</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>Architecture_Name</td><td>&quot;Architecture_1&quot;</td><td>&quot;Architecture_1&quot;</td></tr><tr><td>Bus_Name</td><td>&quot;Bus_1&quot;</td><td>&quot;Bus_1&quot;</td></tr><tr><td>Port_Name_1</td><td>&quot;Port_Name_3&quot;</td><td>&quot;Port_Name_3&quot;</td></tr><tr><td>Port_Name_2</td><td>&quot;Port_Name_4&quot;</td><td>&quot;Port_Name_4&quot;</td></tr><tr><td>FIFO_Buffers</td><td>8</td><td>8</td></tr><tr><td>Enable_Hello_Messages</td><td>true</td><td>true</td></tr></table> <h2>SATA_FIFO</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>_flipPortsHorizontal</td><td>true</td><td>true</td></tr></table> <h2>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>_flipPortsHorizontal</td><td>true</td><td>true</td></tr></table> <h2>VM_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>Block_Name</td><td>&quot;SATA&quot;</td><td>&quot;SATA&quot;</td></tr><tr><td>Optional_Parameters</td><td>/* First row contains Column Names.              */\\nParameter_Name                 Parameter_Value  \\nPath                           none             \\nRead_File                      none             \\nSelf_Start                     false            \\nParam_Script                   none             \\nListen_to_File                 none             \\nDuplicate_Input                true             \\nProfile                        0                \\nProfile_File                   none             \\nMaximum_Loops                  1000000          \\nBlock_Reference                Block_Name       \\nPort_Order_Array               {&quot;input&quot;}      \\n</td><td>/* First row contains Column Names.              */\\nParameter_Name                 Parameter_Value  \\nPath                           none             \\nRead_File                      none             \\nSelf_Start                     false            \\nParam_Script                   none             \\nListen_to_File                 none             \\nDuplicate_Input                true             \\nProfile                        0                \\nProfile_File                   none             \\nMaximum_Loops                  1000000          \\nBlock_Reference                Block_Name       \\nPort_Order_Array               {&quot;input&quot;}      \\n</td></tr><tr><td>Single_Cycle</td><td>false</td><td>false</td></tr><tr><td>Start_Time</td><td>0.0</td><td>0.0</td></tr><tr><td>Mean_Time</td><td>1.0E-03</td><td>1.0E-3</td></tr><tr><td>Self_Start</td><td>true</td><td>true</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>&nbsp;</td><td>&nbsp;</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>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>Result_A = addDeviceToBus(&quot;Architecture_1&quot;, &quot;Disk&quot;, &quot;Disk&quot;, &quot;Port_Name_2&quot;, &quot;output2&quot;)\\nResult_A = addDeviceToBus(&quot;Architecture_1&quot;, &quot;SATA&quot;, &quot;SATA&quot;, &quot;Port_Name_1&quot;, &quot;output1&quot;)\\nResult_A = addDeviceToBus(&quot;Architecture_1&quot;, &quot;Processor&quot;, &quot;Processor&quot;, &quot;Port_Name_3&quot;, &quot;output1&quot;)</td><td>Result_A = addDeviceToBus(&quot;Architecture_1&quot;, &quot;Disk&quot;, &quot;Disk&quot;, &quot;Port_Name_2&quot;, &quot;output2&quot;)\\nResult_A = addDeviceToBus(&quot;Architecture_1&quot;, &quot;SATA&quot;, &quot;SATA&quot;, &quot;Port_Name_1&quot;, &quot;output1&quot;)\\nResult_A = addDeviceToBus(&quot;Architecture_1&quot;, &quot;Processor&quot;, &quot;Processor&quot;, &quot;Port_Name_3&quot;, &quot;output1&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>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;Zone_Speed&quot;</td><td>&quot;Zone_Speed&quot;</td></tr><tr><td>fileOrURL</td><td>&nbsp;</td><td>&quot;&quot;</td></tr><tr><td>Data_Structure_Text</td><td>Zone_ID         Rate ;\\n1               50.0 ;\\n2               49.9 ;\\n3\t\t49.5 ;\\n4\t\t48.9 ;\\n5\t\t48.1 ;\\n6\t\t47.0 ;\\n7\t\t45.7 ;\\n8\t\t44.1 ;\\n9\t\t42.4 ;\\n10\t\t40.5 ;\\n11\t\t38.3 ;\\n12\t\t36.0 ;\\n13\t\t33.5 ;\\n14\t\t30.8 ;\\n15\t\t28.0 ;\\n16\t\t25.0 ;</td><td>Zone_ID         Rate ;\\n1               50.0 ;\\n2               49.9 ;\\n3\t\t49.5 ;\\n4\t\t48.9 ;\\n5\t\t48.1 ;\\n6\t\t47.0 ;\\n7\t\t45.7 ;\\n8\t\t44.1 ;\\n9\t\t42.4 ;\\n10\t\t40.5 ;\\n11\t\t38.3 ;\\n12\t\t36.0 ;\\n13\t\t33.5 ;\\n14\t\t30.8 ;\\n15\t\t28.0 ;\\n16\t\t25.0 ;</td></tr><tr><td>Input_Fields</td><td>&quot;INDEX&quot;</td><td>&quot;INDEX&quot;</td></tr><tr><td>Lookup_Fields</td><td>&quot;Zone_ID&quot;</td><td>&quot;Zone_ID&quot;</td></tr><tr><td>Output_Expression</td><td>&quot;output = match.Rate&quot; /* FORMAT output = match.fieldb */</td><td>&quot;output = match.Rate&quot;</td></tr><tr><td>Mode</td><td>Read</td><td>Read</td></tr><tr><td>_flipPortsHorizontal</td><td>false</td><td>false</td></tr></table> <h2>Initialize</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>Initial_Value</td><td>0</td><td>0</td></tr><tr><td>Initial_Order</td><td>0</td><td>0</td></tr></table> <h2>BusArbiter</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>Architecture_Name</td><td>&quot;Architecture_1&quot;</td><td>&quot;Architecture_1&quot;</td></tr><tr><td>_explanation</td><td>HardwareDevices-&gt;BusArbiter</td><td>HardwareDevices-&gt;BusArbiter</td></tr><tr><td>Bus_Name</td><td>&quot;Bus_1&quot;</td><td>&quot;Bus_1&quot;</td></tr><tr><td>Bus_Speed_Mhz</td><td>50.0</td><td>50.0</td></tr><tr><td>Burst_Size_Bytes</td><td>32</td><td>32</td></tr><tr><td>Round_Robin_Port_Array</td><td>{&quot;Port_1&quot;, &quot;Port_2&quot;}</td><td>{&quot;Port_1&quot;, &quot;Port_2&quot;}</td></tr><tr><td>Devices_Attached_to_Slave_by_Port</td><td>{{&quot;SATA&quot;}, {&quot;Disk&quot;}, {&quot;Device_3&quot;}, {&quot;Device_4&quot;}, {&quot;Device_5&quot;}, {&quot;Device_6&quot;}, {&quot;Device_7&quot;}, {&quot;Device_8&quot;}}</td><td>{{&quot;SATA&quot;}, {&quot;Disk&quot;}, {&quot;Device_3&quot;}, {&quot;Device_4&quot;}, {&quot;Device_5&quot;}, {&quot;Device_6&quot;}, {&quot;Device_7&quot;}, {&quot;Device_8&quot;}}</td></tr><tr><td>Width_Bytes</td><td>4</td><td>4</td></tr><tr><td>Arbiter_Mode</td><td>FCFS</td><td>FCFS</td></tr><tr><td>Split_Retry_Flag</td><td>true</td><td>true</td></tr></table> <h2>BusInterface</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>Architecture_Name</td><td>&quot;Architecture_1&quot;</td><td>&quot;Architecture_1&quot;</td></tr><tr><td>Bus_Name</td><td>&quot;Bus_1&quot;</td><td>&quot;Bus_1&quot;</td></tr><tr><td>Port_Name_1</td><td>&quot;Port_1&quot;</td><td>&quot;Port_1&quot;</td></tr><tr><td>Port_Name_2</td><td>&quot;Port_2&quot;</td><td>&quot;Port_2&quot;</td></tr><tr><td>FIFO_Buffers</td><td>8</td><td>8</td></tr><tr><td>Enable_Hello_Messages</td><td>true</td><td>true</td></tr></table> <h2>ArchitectureSetup</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>Architecture_Name</td><td>&quot;Architecture_1&quot;</td><td>&quot;Architecture_1&quot;</td></tr><tr><td>Field_Name_Mapping</td><td>/* First row contains Column Names.                */\\nExternal_Field_Name          Internal_Field_Name   ; \\nA_Address                    A_Address             ; \\nA_Bytes                      A_Bytes               ; \\nA_Data                       A_Data                ; \\nA_IDX                        A_IDX                 ; \\nA_Instruction                A_Instruction         ; \\nA_Priority                   A_Priority            ; \\nA_Source                     A_Source              ; \\nA_Destination                A_Destination         ; \\nA_Task_ID                    A_Task_ID             ; \\nA_Time                       A_Time                ; \\n</td><td>/* First row contains Column Names.                */\\nExternal_Field_Name          Internal_Field_Name   ; \\nA_Address                    A_Address             ; \\nA_Bytes                      A_Bytes               ; \\nA_Data                       A_Data                ; \\nA_IDX                        A_IDX                 ; \\nA_Instruction                A_Instruction         ; \\nA_Priority                   A_Priority            ; \\nA_Source                     A_Source              ; \\nA_Destination                A_Destination         ; \\nA_Task_ID                    A_Task_ID             ; \\nA_Time                       A_Time                ; \\n</td></tr><tr><td>Routing_Table</td><td>/* First row contains Column Names.                */</td><td>/* First row contains Column Names.                */</td></tr><tr><td>Number_of_Samples</td><td>2</td><td>2</td></tr><tr><td>Statistics_to_Plot</td><td>&quot;Processor_1_PROC_Utilization_Min, Processor_1_PROC_Utilization_Mean, Processor_1_PROC_Utilization_Max&quot;</td><td>&quot;Processor_1_PROC_Utilization_Min, Processor_1_PROC_Utilization_Mean, Processor_1_PROC_Utilization_Max&quot;</td></tr><tr><td>Internal_Plot_Trace_Offset</td><td>2</td><td>2</td></tr><tr><td>Listen_to_Architecture_Options</td><td>None</td><td>None</td></tr></table> <h2>DS_xTime_yData_Plotter</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>Field_Trace_Name</td><td>Plot_Name</td><td>&quot;Plot_Name&quot;</td></tr><tr><td>Field_Y_Value</td><td>input.Plot_Value</td><td>&quot;input.Plot_Value&quot;</td></tr><tr><td>Field_Color</td><td>Plot_Color</td><td>&quot;Plot_Color&quot;</td></tr><tr><td>Field_Offset</td><td>Plot_Offset</td><td>&quot;Plot_Offset&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>IN2</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>Destination_Name</td><td>MyPlot</td><td>&quot;MyPlot&quot;</td></tr><tr><td>Destination_Type</td><td>Global</td><td>Global</td></tr></table> <h2>IN</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>Destination_Name</td><td>MyMessages</td><td>&quot;MyMessages&quot;</td></tr><tr><td>Destination_Type</td><td>Global</td><td>Global</td></tr></table> <h2>Disk</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>Block_Name</td><td>&quot;Disk&quot;</td><td>&quot;Disk&quot;</td></tr><tr><td>Optional_Parameters</td><td>/* First row contains Column Names.              */\\nParameter_Name                 Parameter_Value  \\nPath                           none             \\nRead_File                      none             \\nSelf_Start                     false            \\nParam_Script                   none             \\nListen_to_File                 none             \\nDuplicate_Input                true             \\nProfile                        0                \\nProfile_File                   none             \\nMaximum_Loops                  1000000          \\nBlock_Reference                Block_Name       \\nPort_Order_Array               {&quot;input&quot;}      \\n</td><td>/* First row contains Column Names.              */\\nParameter_Name                 Parameter_Value  \\nPath                           none             \\nRead_File                      none             \\nSelf_Start                     false            \\nParam_Script                   none             \\nListen_to_File                 none             \\nDuplicate_Input                true             \\nProfile                        0                \\nProfile_File                   none             \\nMaximum_Loops                  1000000          \\nBlock_Reference                Block_Name       \\nPort_Order_Array               {&quot;input&quot;}      \\n</td></tr><tr><td>Single_Cycle</td><td>false</td><td>false</td></tr><tr><td>Breakpoint</td><td>&quot;none&quot;</td><td>&quot;none&quot;</td></tr><tr><td>Self_Start</td><td>true</td><td>true</td></tr><tr><td>Speed_RPM</td><td>Disk_Speed_RPM</td><td>7200.0</td></tr><tr><td>Buffer_MBytes</td><td>8</td><td>8</td></tr><tr><td>Interface_Width_Bytes</td><td>4</td><td>4</td></tr><tr><td>Sequential_Read_Latency</td><td>1.0E-05</td><td>1.0E-5</td></tr><tr><td>Sequential_Write_Latency</td><td>1.0E-05</td><td>1.0E-5</td></tr><tr><td>Number_of_Zones</td><td>Disk_Number_of_Zones</td><td>16</td></tr><tr><td>Sectors_per_Track_Min</td><td>122</td><td>122</td></tr><tr><td>Sectors_per_Track_Max</td><td>232</td><td>232</td></tr><tr><td>Tracks_in_Zone_Min</td><td>100</td><td>100</td></tr><tr><td>Tracks_in_Zone_Max</td><td>200</td><td>200</td></tr><tr><td>Max_Queue_Length</td><td>128</td><td>128</td></tr></table>

"This model makes requests to a moving disk with ""Read"" or ""Write"" commands in a field of the incoming data structure. Each request address associates a disk zone (A_Address_Min), disk sector (A_Address_Max) with fields of the DS. Commands alternate ""Read"", ""Write"". The zone and sector are randomized, so the head movement, latency is noticible.

The Disk has a Cache with a user settable threshold for accumulating transactions in the model. When this threshold is reached, then it begins to send transactions to the disk, looking for sequential reads and writes in shortening the head latency. There is a latency for the cache currently in the model, and assumes the cache is within the disk. There is provision for sequential read and write commands in the Traffic Generator. Zone is the classic zoning nomenclature, Sector is for purposes of segmenting the disk, there are Disk parameters that also mention sector, more related to disk tracks where a sector is typically 512 bytes. The Disk does not fragment incoming data structures, assumes they are fragmented and ready for the disk."