static void Main(string[] args) { using (var sim = new Simulation()) { long data_size = 24; double timestep_size = 10.1; var position_ram = new TrueDualPortMemory <ulong>((int)data_size); var velocity_ram = new TrueDualPortMemory <ulong>((int)data_size); var testing_simulator = new Testing_Simulation((ulong)data_size, timestep_size); var position_manager = new Pos_manager((ulong)data_size, timestep_size); Update_position update_position = new Update_position(position_manager.prev_position, position_manager.velocity_data_point, timestep_size); var multiplexer = new Multiplexer_ControlB(); position_manager.reset = testing_simulator.sim_ready; position_manager.data_ready = testing_simulator.data_ready; position_manager.updated_position = update_position.updated_data_point; testing_simulator.finished = position_manager.finished; position_manager.position_ramctrl = position_ram.ControlA; position_manager.position_ramresult = position_ram.ReadResultA; position_manager.velocity_data_point_ramctrl = velocity_ram.ControlB; position_manager.velocity_data_point_ramresult = velocity_ram.ReadResultB; position_manager.updated_position_ramctrl = multiplexer.second_input; testing_simulator.data_point_ramctrl = multiplexer.first_input; multiplexer.output = position_ram.ControlB; testing_simulator.velocity_data_point_ramctrl = velocity_ram.ControlA; testing_simulator.data_point_ramresult = position_ram.ReadResultB; sim.Run(); Console.WriteLine("Simulation completed"); } }
public MD(ulong data_size, double timestep_size, ValBus mag_output) { // RAM var position_ram = new TrueDualPortMemory <ulong>((int)data_size); var velocity_ram = new TrueDualPortMemory <ulong>((int)data_size); var acceleration_ram = new AccelerationDataRam(data_size); //External simulation process var external_simulator = new External_MD_Sim(data_size, timestep_size, (ulong)Cache_size.n); // Connect External_MD_Simulation field with simulation proccess sim = external_simulator; // Managers var acceleration_manager = new Acceleration.Acc_manager(); var velocity_manager = new Velocity_Update.Vel_manager(data_size, timestep_size); var position_manager = new Position_Update.Pos_manager(data_size, timestep_size); // Multiplexers var init_pos_data_multiplexer = new Multiplexer_ControlA(); var pos_data_multiplexer = new Multiplexer_ControlA(); var velocity_data_multiplexer = new Multiplexer_ControlB(); var position_update_multiplexer = new Multiplexer_ControlB(); var velocity_update_multiplexer = new Multiplexer_ControlA(); // Cache var acceleration_cache = new Cache.AccelerationCache((ulong)Cache_size.n); // Acceleration class Acceleration.Acceleration acceleration = new Acceleration.Acceleration(acceleration_manager.pos1_output, acceleration_manager.pos2_output, mag_output); // Connect Acceleration field with acceleration process acc = acceleration; // Velocity class Velocity_Update.Update_velocity velocity = new Velocity_Update.Update_velocity(velocity_manager.prev_velocity, velocity_manager.acceleration_data_point, timestep_size); // Position class Position_Update.Update_position position = new Position_Update.Update_position(position_manager.prev_position, position_manager.velocity_data_point, timestep_size); // Connections external_simulator.position_ramctrl = init_pos_data_multiplexer.first_input; acceleration_manager.pos1_ramctrl = init_pos_data_multiplexer.second_input; init_pos_data_multiplexer.output = pos_data_multiplexer.first_input; position_manager.position_ramctrl = pos_data_multiplexer.second_input; pos_data_multiplexer.output = position_ram.ControlA; acceleration_manager.pos2_ramctrl = position_update_multiplexer.first_input; position_manager.updated_position_ramctrl = position_update_multiplexer.second_input; position_update_multiplexer.output = position_ram.ControlB; acceleration_manager.pos1_ramresult = position_ram.ReadResultA; external_simulator.position_ramresult = position_ram.ReadResultA; position_manager.position_ramresult = position_ram.ReadResultA; acceleration_manager.pos2_ramresult = position_ram.ReadResultB; acceleration_manager.ready = external_simulator.acc_ready; acceleration_cache.acceleration_input = acceleration.output; acceleration_cache.ready = acceleration_manager.acceleration_ready_output; acceleration_cache.acc_ramctrl = acceleration_ram.ControlA; acceleration_cache.acc_ramresult = acceleration_ram.ReadResultA; velocity_manager.acceleration_data_point_ramctrl = acceleration_ram.ControlB; velocity_manager.acceleration_data_point_ramresult = acceleration_ram.ReadResultB; velocity_manager.data_ready = acceleration_cache.output; velocity_manager.updated_velocity = velocity.updated_data_point; velocity_manager.velocity_ramctrl = velocity_data_multiplexer.first_input; position_manager.velocity_data_point_ramctrl = velocity_data_multiplexer.second_input; velocity_data_multiplexer.output = velocity_ram.ControlB; velocity_manager.velocity_ramresult = velocity_ram.ReadResultB; velocity_manager.updated_velocity_ramctrl = velocity_update_multiplexer.second_input; external_simulator.init_velocity_ramctrl = velocity_update_multiplexer.first_input; velocity_update_multiplexer.output = velocity_ram.ControlA; position_manager.velocity_data_point_ramresult = velocity_ram.ReadResultB; velocity_manager.reset = external_simulator.velocity_reset; position_manager.data_ready = velocity_manager.finished; position_manager.reset = external_simulator.position_reset; position_manager.updated_position = position.updated_data_point; position.prev_data_point = position_manager.prev_position; position.velocity_data_point = position_manager.velocity_data_point; external_simulator.finished = position_manager.finished; }