Data Acquisition System

Simple data acquisition system to select between DMA vs processor driven

Sensor_Model

Browsable image of the model.

  • 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.
Sensor_Modelmodel <h2>PowerTable2</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>This is the Excel spreadsheet import.  The power <br/>information is maintained here.</td><td>This is the Excel spreadsheet import.  The power <br/>information is maintained here.</td></tr><tr><td>Manager_Name</td><td>&quot;Manager_1&quot;</td><td>&quot;Manager_1&quot;</td></tr><tr><td>fileOrURL</td><td>&nbsp;</td><td>&quot;&quot;</td></tr><tr><td>Manager_Setup</td><td>/* Power_Table.  First row contains Column Names, expressions valid for entries except Device Name.                                                 <br/>                                                                                                                                                    <br/>--------Device Name-------  ---------Power States------  -----Operating States------  -----------State Transitions---------  --Speed--  --Exist-- */<br/>    Architecture_Block      Standby  Active    Wait     Idle  Existing  OffState  OnState  t_OnOff      Mhz       Volts   ; <br/>Scheduler_uPROC\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; <br/>Scheduler_BUS\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; <br/>Scheduler_RAM\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; <br/>Scheduler_Cache\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; </td><td>/* Power_Table.  First row contains Column Names, expressions valid for entries except Device Name.                                                 <br/>                                                                                                                                                    <br/>--------Device Name-------  ---------Power States------  -----Operating States------  -----------State Transitions---------  --Speed--  --Exist-- */<br/>    Architecture_Block      Standby  Active    Wait     Idle  Existing  OffState  OnState  t_OnOff      Mhz       Volts   ; <br/>Scheduler_uPROC\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; <br/>Scheduler_BUS\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; <br/>Scheduler_RAM\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; <br/>Scheduler_Cache\t             70.0     350.0    0.0      0.0    Standby   Standby   Active   0.0        1000.0     1.0     ; </td></tr><tr><td>Delay_to_Change_State</td><td>/* Async_State_Change.  First row contains Column Names, expressions valid for entries except Device Name.                                                 <br/>                                                                                                                                                    <br/>--------Device Name-------  ------------Time State--------- */<br/>    Architecture_Block      State     Time_or_Express  Next ; <br/></td><td>/* Async_State_Change.  First row contains Column Names, expressions valid for entries except Device Name.                                                 <br/>                                                                                                                                                    <br/>--------Device Name-------  ------------Time State--------- */<br/>    Architecture_Block      State     Time_or_Express  Next ; <br/></td></tr><tr><td>Expression_List</td><td>/* First row contains Column Names.                                                                                                                 <br/>                                                                                                                                                    <br/>---------Reference--------  ------------------------------------Expression----------------------------------------------------------------------- */<br/>           Name                                                   Value                                                                           ; <br/></td><td>/* First row contains Column Names.                                                                                                                 <br/>                                                                                                                                                    <br/>---------Reference--------  ------------------------------------Expression----------------------------------------------------------------------- */<br/>           Name                                                   Value                                                                           ; <br/></td></tr><tr><td>Battery_Units</td><td>Milli_Watts</td><td>Milli_Watts</td></tr><tr><td>State_Plot_Enable</td><td>false</td><td>false</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>input.Task_Size = irand (1, 2)<br/>input.Task_Time = input.Task_Size<br/>input.Task_Number = 10 /* Internal */<br/>inputTask_Modifier = 5</td><td>input.Task_Size = irand (1, 2)<br/>input.Task_Time = input.Task_Size<br/>input.Task_Number = 10 /* Internal */<br/>inputTask_Modifier = 5</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;Task_Class&quot;</td><td>&quot;Task_Class&quot;</td></tr><tr><td>fileOrURL</td><td>&nbsp;</td><td>&quot;&quot;</td></tr><tr><td>Start_Time</td><td>100.0 / (Sensor_Speed_Mhz * 1000000.0)</td><td>5.0E-6</td></tr><tr><td>Value_1</td><td>10.0 / (Sensor_Speed_Mhz * 1000000.0)</td><td>5.0E-7</td></tr><tr><td>Value_2</td><td>2.0 / (Sensor_Speed_Mhz * 1000000.0)</td><td>1.0E-7</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><tr><td>Number_of_Transactions</td><td>MaxInt</td><td>&quot;MaxInt&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;Task_Class&quot;</td><td>&quot;Task_Class&quot;</td></tr><tr><td>fileOrURL</td><td>&nbsp;</td><td>&quot;&quot;</td></tr><tr><td>Start_Time</td><td>1.0 / (Sensor_Speed_Mhz * 1000000.0)</td><td>5.0E-8</td></tr><tr><td>Value_1</td><td>1.0 / (Sensor_Speed_Mhz * 1000000.0)</td><td>5.0E-8</td></tr><tr><td>Value_2</td><td>0.05 / (Sensor_Speed_Mhz * 1000000.0)</td><td>2.5E-9</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><tr><td>Number_of_Transactions</td><td>MaxInt</td><td>&quot;MaxInt&quot;</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>input.Task_Size = Sensor_Data_Bytes / Word_Size_Bytes<br/>input.Task_Time = input.Task_Size<br/>Path_Prob = rand (0.0, 100.0)<br/>input.Task_Deadline = rand (0.0, 100.0)<br/>input.Task_Number = (Path_Prob &lt; Percent_DMA_Traffic)?irand (0, 2):irand (8, 9)<br/>input.Task_Priority = (Path_Prob &lt; Percent_DMA_Traffic)?1:0<br/>input.Task_Modifier = (input.Task_Deadline &lt; 95.0)?5:6</td><td>input.Task_Size = Sensor_Data_Bytes / Word_Size_Bytes<br/>input.Task_Time = input.Task_Size<br/>Path_Prob = rand (0.0, 100.0)<br/>input.Task_Deadline = rand (0.0, 100.0)<br/>input.Task_Number = (Path_Prob &lt; Percent_DMA_Traffic)?irand (0, 2):irand (8, 9)<br/>input.Task_Priority = (Path_Prob &lt; Percent_DMA_Traffic)?1:0<br/>input.Task_Modifier = (input.Task_Deadline &lt; 95.0)?5:6</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>VariableList</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>Memory_Init_Text</td><td>/* Memory Initialize Template          <br/>Name          Type          Value     */<br/>Unique_Id     local         0       ;  /* Mem1 */<br/>Path_Prob     local         0.0  ;  /* DS2  */<br/></td><td>/* Memory Initialize Template          <br/>Name          Type          Value     */<br/>Unique_Id     local         0       ;  /* Mem1 */<br/>Path_Prob     local         0.0  ;  /* DS2  */<br/></td></tr></table> <h2>Power</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>Average,Instant</td><td>Average,Instant</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>Plotting</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></table> <h2>Statistics_and_Plotting</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></table> <h2>Bus</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></table> <h2>RAM</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></table> <h2>Cache</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></table> <h2>CPU</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></table> <h2>Mapper7</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>Target_Resource</td><td>&quot;RAM&quot;</td><td>&quot;&quot;RAM&quot;&quot;</td></tr><tr><td>Task_Number</td><td>7</td><td>&quot;7&quot;</td></tr><tr><td>Task_Priority</td><td>&quot;Task_Priority&quot;</td><td>&quot;&quot;Task_Priority&quot;&quot;</td></tr><tr><td>Task_Time</td><td>&quot;Task_Time&quot;</td><td>&quot;&quot;Task_Time&quot;&quot;</td></tr><tr><td>Task_Plot_ID</td><td>1</td><td>1</td></tr></table> <h2>Mapper6</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>Target_Resource</td><td>&quot;BUS&quot;</td><td>&quot;&quot;BUS&quot;&quot;</td></tr><tr><td>Task_Number</td><td>4</td><td>&quot;4&quot;</td></tr><tr><td>Task_Priority</td><td>&quot;Task_Priority&quot;</td><td>&quot;&quot;Task_Priority&quot;&quot;</td></tr><tr><td>Task_Time</td><td>&quot;Task_Time&quot;</td><td>&quot;&quot;Task_Time&quot;&quot;</td></tr><tr><td>Task_Plot_ID</td><td>1</td><td>1</td></tr></table> <h2>Mapper</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>Target_Resource</td><td>&quot;uPROC&quot;</td><td>&quot;&quot;uPROC&quot;&quot;</td></tr><tr><td>Task_Number</td><td>&quot;Task_Number&quot;</td><td>&quot;&quot;Task_Number&quot;&quot;</td></tr><tr><td>Task_Priority</td><td>&quot;Task_Priority&quot;</td><td>&quot;&quot;Task_Priority&quot;&quot;</td></tr><tr><td>Task_Time</td><td>0.0</td><td>&quot;0.0&quot;</td></tr><tr><td>Task_Plot_ID</td><td>1</td><td>1</td></tr></table> <h2>CPU_or_DMA?</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>Field_Select</td><td>&quot;Task_Number&quot;</td><td>&quot;&quot;Task_Number&quot;&quot;</td></tr><tr><td>Destination_Names</td><td>&quot;B, B, B, B, A, A&quot;</td><td>&quot;&quot;B, B, B, B, A, A&quot;&quot;</td></tr><tr><td>Destination_Name_Integers</td><td>&quot;0, 1, 2, 3, 8, 9&quot;</td><td>&quot;&quot;0, 1, 2, 3, 8, 9&quot;&quot;</td></tr><tr><td>Destination_Type</td><td>Local</td><td>Local</td></tr></table> <h2>OUT45</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>&quot;A&quot;</td><td>&quot;&quot;A&quot;&quot;</td></tr><tr><td>Destination_Type</td><td>Local</td><td>Local</td></tr></table> <h2>DMA_Channel</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>Channel_Name</td><td>&quot;DMA&quot;</td><td>&quot;DMA&quot;</td></tr><tr><td>Channel_Rate_Mhz</td><td>500.0</td><td>500.0</td></tr><tr><td>Number_of_Channels</td><td>DMA_Channels</td><td>4</td></tr><tr><td>Channel_Width_Bytes</td><td>1</td><td>1</td></tr><tr><td>Packet_Size_Bytes</td><td>&quot;Task_Size&quot;</td><td>&quot;&quot;Task_Size&quot;&quot;</td></tr><tr><td>Max_Channel_Packets</td><td>3000</td><td>3000</td></tr><tr><td>Channel_Id_Name</td><td>&quot;Task_Number&quot;</td><td>&quot;Task_Number&quot;</td></tr></table> <h2>IN21</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>&quot;B&quot;</td><td>&quot;&quot;B&quot;&quot;</td></tr><tr><td>Destination_Type</td><td>Local</td><td>Local</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>&quot;A&quot;</td><td>&quot;&quot;A&quot;&quot;</td></tr><tr><td>Destination_Type</td><td>Local</td><td>Local</td></tr></table> <h2>Channel_Release</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>Channel_Name</td><td>&quot;DMA&quot;</td><td>&quot;DMA&quot;</td></tr></table>

SNS RF Hardware Control System

The modeling and simulation described below was performed for the SNS project under the guidance of Lawrence Berkeley Labs.
Mirabilis design has modeled, simulated and analyzed the RF Hardware Control Block using VisualSim. The starting assumptions, simulation models and the live simulations are all included in this document. Please feel free to modify the simulation parameters and redraw the simulation results.

Conclusion

The Control system is more latency dependent than resource limited. There is occasional queue overflows with queues set to length of 100. There were scenarios when the latency exceeded the maximum limit of 120 ns.  The system is not resource limited as presently configured, as several system elements must be accessed sequentially, which does impact overall latency of incoming samples. This seems to be the direction of the investigation. The timing plots in the model could be used to study the latency issue with just a few samples to see the relationships more closely.
The intent of this experiment was to build a quick model and show the type of results the Control System Model would generate. A more detailed analysis of the internal timing, and gaining a better picture of the FPGA portion, which may be critical to addressing the latency issue

Model Assumptions

The Sensor Model has the following parameters:
  • Bus Speed    66.0 Mhz
  • SDRAM Speed  50.0 Mhz
  • CPU Speed   200.0 Mhz
  • Cache Speed 200.0 Mhz
  • Sensor Speed  N.N Mhz
  • Sensor Size     M Bytes
The provided states that the input rate of 40.0 MS/sec @ 16 bits of analog sample. Internally, the Sensor Model uses 32 bits for each Word, so translated 40.0 MS/sec @ 16 bits to 20.0 MS/sec @ 32 bits. This parameter setting overflowed the internal queues.

Sensor Model Description

The Sensor Model demonstration model accepts an incoming stream of data and directs a propotion to a DMA channel mechanism that the user can
select. The maximum number of DMA channels is three. The input rate is using a fixed distribution, however, the user could use an exponential interarrival, normal, or uniform random distribution. The processing rates (Mhz) for the internal elements are user settable. The model can also set background processing to the CPU element, similar to an OS, or RTOS loading. The model also contains a detailed Cache model, which shows statistically generated addresses.
Block Diagarm of Architecture
Figure 1: Visualsim Simulation Model of the Control System

The Sensor Model generates a time line of CPU, SDRAM, Cache, Bus, and DMA activity. It also generates utilization rates for the CPU, SDRAM, Cache, and Bus. The last figure shows Cache Activity, where cache misses occur when the 'Cur' pointer exceeds the 'Max' pointer, or is less than the Min Cache Address Pointer.

The Sensor Model below is a live simulation. Click on any block and modify the provided parameters. The model will be simulated and the results will be redrawn.
 


Figure 2: Interactive Simulation of the Control System. Change the parameter values and click on GO. The simulation will be executed and the plots will be updated.

Notes:

The model was built in a few hours and analyzed over a couple of days.
The model was built based on the provided block diagram and the datasheet information.