Example #1
0
        static void Main(string[] args)
        {
            for (long i = 0; i < 1; i++)
            {
                using (var sim = new Simulation()){
                    // TODO: This fails when data is 1 in size.
                    ulong data_size = 20;


                    // RAM
                    var position_ram = new TrueDualPortMemory <ulong>((int)data_size);

                    // Multiplexer
                    var multiplexer = new Multiplexer_ControlA();

                    // TODO: Give the data_size to manager as an argument
                    var manager = new Acc_manager();

                    var testing_simulator = new Testing_Simulation(data_size);

                    var testing_magnitude = new Testing_Magnitude(data_size);

                    // TODO: Make the manager handle the result from acceleration and sent to test/cache
                    Acceleration acceleration =
                        new Acceleration(manager.pos1_output, manager.pos2_output,
                                         testing_magnitude.output);

                    testing_magnitude.x_coord = acceleration.mag_input;

                    // throw new Exception();

                    manager.ready = testing_simulator.ready_signal;
                    testing_simulator.position_ramctrl = multiplexer.first_input;
                    manager.pos1_ramctrl   = multiplexer.second_input;
                    multiplexer.output     = position_ram.ControlA;
                    manager.pos2_ramctrl   = position_ram.ControlB;
                    manager.pos1_ramresult = position_ram.ReadResultA;
                    manager.pos2_ramresult = position_ram.ReadResultB;
                    testing_simulator.testing_result_input = acceleration.output;
                    testing_magnitude.finished             = testing_simulator.mag_sim_finished;

                    sim
                    // // .AddTopLevelInputs(acceleration_cache.acceleration_input, acceleration_cache.ready, testing_simulator.acc_ramctrl)
                    // // .AddTopLevelOutputs(testing_simulator.acc_ramresult, acceleration_cache.output)
                    // // .BuildCSVFile()
                    // // .BuildVHDL()
                    .Run()
                    ;
                }
                Console.WriteLine("Simulation number {0}", i);
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            using (var sim = new Simulation())
            {
                // TODO: Fix to handle data_size not divisable with cache_size
                long   data_size     = 20;
                double timestep_size = 10.1;

                var velocity_ram     = new TrueDualPortMemory <ulong>((int)data_size);
                var acceleration_ram = new Deflib.AccelerationDataRam((ulong)data_size);

                var testing_simulator = new Testing_Simulation((ulong)data_size, timestep_size, (ulong)Cache_size.n);
                var velocity_manager  = new Vel_manager((ulong)data_size, timestep_size);



                Update_velocity velocity =
                    new Update_velocity(velocity_manager.prev_velocity,
                                        velocity_manager.acceleration_data_point, timestep_size);

                var multiplexer = new Multiplexer_ControlA();

                velocity_manager.reset            = testing_simulator.sim_ready;
                velocity_manager.data_ready       = testing_simulator.data_ready;
                velocity_manager.updated_velocity = velocity.updated_data_point;
                testing_simulator.finished        = velocity_manager.finished;

                velocity_manager.velocity_ramctrl   = velocity_ram.ControlB;
                velocity_manager.velocity_ramresult = velocity_ram.ReadResultB;

                velocity_manager.acceleration_data_point_ramctrl   = acceleration_ram.ControlB;
                velocity_manager.acceleration_data_point_ramresult = acceleration_ram.ReadResultB;

                velocity_manager.updated_velocity_ramctrl = multiplexer.second_input;
                testing_simulator.velocity_ramctrl        = multiplexer.first_input;
                multiplexer.output = velocity_ram.ControlA;

                testing_simulator.acceleration_ramctrl = acceleration_ram.ControlA;
                testing_simulator.velocity_ramresult   = velocity_ram.ReadResultA;

                sim.Run();
                Console.WriteLine("Simulation completed");
            }
        }
Example #3
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;
        }