Esempio n. 1
0
        public Acceleration(ValBus input_pos1, ValBus input_pos2,
                            ValBus magnitude_output)
        {
            this.input_pos1 = input_pos1;
            this.input_pos2 = input_pos2;
            this.mag_output = magnitude_output;

            // Constants
            double MASS_OF_ARGON = 39.948;

            // Constant processes
            var const_mass_of_argon = new Constants(MASS_OF_ARGON);

            // Calculation processes
            var sub = new Sub();

            // TODO: Add calculations for more dimensions
            Force force = new Force(mag_output);

            // Piping sub.difference through magnitude
            var magnitude_pipe = new nPipe((long)Deflib.Magnitude_depth.n);


            // Piping sub.difference through force
            var force_pipe = new nPipe((long)Deflib.Force_depth.n);

            var mul      = new Mul();
            var div_mass = new Div();


            sub.minuend    = input_pos2;
            sub.subtrahend = input_pos1;
            // magnitude calculation
            mag_input = sub.difference;
            // pipe sub.difference through magnitude
            magnitude_pipe.first.input = sub.difference;
            // pipe sub.difference through force
            force_pipe.first.input = magnitude_pipe.last.output;

            mul.multiplicant  = force.output;
            mul.multiplier    = force_pipe.last.output;
            div_mass.divident = mul.product;
            div_mass.divisor  = const_mass_of_argon.output;
            output            = div_mass.quotient;
        }
Esempio n. 2
0
        public Magnitude()
        {
            input_procs = new Mul[(int)Deflib.Dimensions.n];
            for (int i = 0; i < (int)Deflib.Dimensions.n; i++)
            {
                input_procs[i] = new Mul();
            }


            var add  = new Add();
            var sqrt = new Sqrt();

            add.addend = input_procs[0].product;
            add.augend = input_procs[1].product;

            sqrt.input = add.sum;
            output     = sqrt.output;
        }
Esempio n. 3
0
        public Update_position(ValBus prev_data_point, ValBus velocity_data_point, double timestep)
        {
            this.prev_data_point     = prev_data_point;
            this.velocity_data_point = velocity_data_point;

            // Constants
            var const_timestep = new Constants(timestep);

            // Calculation processes
            var mul  = new Mul();
            var add  = new Add();
            var pipe = new PipelineRegister();

            mul.multiplicant = velocity_data_point;
            mul.multiplier   = const_timestep.output;
            pipe.input       = prev_data_point;

            add.augend = mul.product;
            add.addend = pipe.output;

            updated_data_point = add.sum;
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
 public Testing_Simulation(ulong data_size, ValBus input)
 {
     this.data_size = (uint)data_size;
     this.input     = input;
 }
Esempio n. 6
0
        public Force(ValBus input)
        {
            this.input = input;


            // Constants
            double SIGMA       = 3.4;
            double EPSILON     = 0.0103;
            double TWELVE      = 12.0;
            double SIX         = 6.0;
            double FOURTEEN    = 14.0;
            double EIGHT       = 8.0;
            double FOURTYEIGHT = 48.0;
            double TWENTYFOUR  = 24.0;
            double FOUR        = 4.0;


            // Constant processes
            var const_sigma       = new Constants(SIGMA);
            var const_epsilon     = new Constants(EPSILON);
            var const_twelve      = new Constants(TWELVE);
            var const_six         = new Constants(SIX);
            var const_fourteen    = new Constants(FOURTEEN);
            var const_eight       = new Constants(EIGHT);
            var const_fourtyeight = new Constants(FOURTYEIGHT);
            var const_twentyfour  = new Constants(TWENTYFOUR);
            var const_four        = new Constants(FOUR);

            // Calculation processes
            // (48*eps*(sig^12/r^14)) - (24*eps*(sig^6/r^8))
            var abs_sigma     = new Abs();
            var ln_sigma      = new Ln();
            var abs_r         = new Abs();
            var ln_r          = new Ln();
            var mul12         = new Mul();
            var mul6          = new Mul();
            var mul14         = new Mul();
            var mul8          = new Mul();
            var exp12         = new Exp();
            var exp6          = new Exp();
            var exp14         = new Exp();
            var exp8          = new Exp();
            var div_12_14     = new Div();
            var div_6_8       = new Div();
            var mul_eps_12_14 = new Mul();
            var mul_eps_6_8   = new Mul();
            var mul_48        = new Mul();
            var mul_24        = new Mul();
            var sub           = new Sub();


            /* NOTE: e^{x*ln(b)} == b^x*/
            abs_r.input     = input;
            abs_sigma.input = const_sigma.output;
            ln_r.input      = abs_r.output;
            ln_sigma.input  = abs_sigma.output;

            mul12.multiplicant = const_twelve.output;
            mul12.multiplier   = ln_sigma.output;
            mul6.multiplicant  = const_six.output;
            mul6.multiplier    = ln_sigma.output;
            exp12.input        = mul12.product;
            exp6.input         = mul6.product;

            mul14.multiplicant = const_fourteen.output;
            mul14.multiplier   = ln_r.output;
            mul8.multiplicant  = const_eight.output;
            mul8.multiplier    = ln_r.output;
            exp14.input        = mul14.product;
            exp8.input         = mul8.product;

            div_12_14.divident = exp12.output;
            div_12_14.divisor  = exp14.output;

            div_6_8.divident = exp6.output;
            div_6_8.divisor  = exp8.output;

            mul_eps_12_14.multiplicant = const_epsilon.output;
            mul_eps_12_14.multiplier   = div_12_14.quotient;

            mul_eps_6_8.multiplicant = const_epsilon.output;
            mul_eps_6_8.multiplier   = div_6_8.quotient;

            mul_48.multiplicant = const_fourtyeight.output;
            mul_48.multiplier   = mul_eps_12_14.product;

            mul_24.multiplicant = const_twentyfour.output;
            mul_24.multiplier   = mul_eps_6_8.product;

            sub.minuend    = mul_48.product;
            sub.subtrahend = mul_24.product;

            output = sub.difference;
        }