Esempio n. 1
0
 public DataOut(TrueDualPortMemory <byte> memory, int memory_size)
 {
     // Set up the header information
     this.memory      = memory;
     this.memory_size = memory_size;
     this.controlB    = memory.ControlB;
     this.controlA    = memory.ControlA;
     this.readResultA = memory.ReadResultA;
     this.readResultB = memory.ReadResultB;
     this.mem_calc    = new SingleMemorySegmentsRingBufferFIFO <TempData>(mem_calc_num_segments, memory_size);
     this.buffer_calc = new SingleMemorySegmentsRingBufferFIFO <TempData>(send_buffer_size, send_buffer_size);
 }
Esempio n. 2
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);
            }
        }
Esempio n. 3
0
        public Round8()
        {
            bramT0_1  = new TrueDualPortMemory <uint>(TBOX_SIZE, T0);
            m_conT0a1 = bramT0_1.ControlA;
            m_rrT0a1  = bramT0_1.ReadResultA;
            m_conT0b1 = bramT0_1.ControlB;
            m_rrT0b1  = bramT0_1.ReadResultB;

            bramT0_2  = new TrueDualPortMemory <uint>(TBOX_SIZE, T0);
            m_conT0a2 = bramT0_2.ControlA;
            m_rrT0a2  = bramT0_2.ReadResultA;
            m_conT0b2 = bramT0_2.ControlB;
            m_rrT0b2  = bramT0_2.ReadResultB;

            bramT1_1  = new TrueDualPortMemory <uint>(TBOX_SIZE, T1);
            m_conT1a1 = bramT1_1.ControlA;
            m_rrT1a1  = bramT1_1.ReadResultA;
            m_conT1b1 = bramT1_1.ControlB;
            m_rrT1b1  = bramT1_1.ReadResultB;

            bramT1_2  = new TrueDualPortMemory <uint>(TBOX_SIZE, T1);
            m_conT1a2 = bramT1_2.ControlA;
            m_rrT1a2  = bramT1_2.ReadResultA;
            m_conT1b2 = bramT1_2.ControlB;
            m_rrT1b2  = bramT1_2.ReadResultB;

            bramT2_1  = new TrueDualPortMemory <uint>(TBOX_SIZE, T2);
            m_conT2a1 = bramT2_1.ControlA;
            m_rrT2a1  = bramT2_1.ReadResultA;
            m_conT2b1 = bramT2_1.ControlB;
            m_rrT2b1  = bramT2_1.ReadResultB;

            bramT2_2  = new TrueDualPortMemory <uint>(TBOX_SIZE, T2);
            m_conT2a2 = bramT2_2.ControlA;
            m_rrT2a2  = bramT2_2.ReadResultA;
            m_conT2b2 = bramT2_2.ControlB;
            m_rrT2b2  = bramT2_2.ReadResultB;

            bramT3_1  = new TrueDualPortMemory <uint>(TBOX_SIZE, T3);
            m_conT3a1 = bramT3_1.ControlA;
            m_rrT3a1  = bramT3_1.ReadResultA;
            m_conT3b1 = bramT3_1.ControlB;
            m_rrT3b1  = bramT3_1.ReadResultB;

            bramT3_2  = new TrueDualPortMemory <uint>(TBOX_SIZE, T3);
            m_conT3a2 = bramT3_2.ControlA;
            m_rrT3a2  = bramT3_2.ReadResultA;
            m_conT3b2 = bramT3_2.ControlB;
            m_rrT3b2  = bramT3_2.ReadResultB;
        }
Esempio n. 4
0
 public DataIn(TrueDualPortMemory <byte> memory, int memory_size)
 {
     // Set up the header information
     this.memory      = memory;
     this.memory_size = memory_size;
     this.controlB    = memory.ControlB;
     this.controlA    = memory.ControlA;
     this.readResultA = memory.ReadResultA;
     this.readResultB = memory.ReadResultB;
     this.mem_calc    = new MultiMemorySegmentsRingBufferFIFO <InputData>(mem_calc_num_segments, memory_size);
     // XXX better magic numbers
     this.sequence_dict = new DictionaryListSparseLinked <SequenceInfo>(10, 100);
     // Define the little ring buffer for the outgoing packets
     this.buffer_calc = new SingleMemorySegmentsRingBufferFIFO <InputData>(send_buffer_size, send_buffer_size);
 }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            using (var sim = new Simulation())
            {
                int mem_size = 4;

                var adder             = new Adder();
                var bram              = new TrueDualPortMemory <uint>(mem_size);
                var bram_porta        = new BRAMPortAPacker();
                var bram_portb        = new BRAMPortBPacker();
                var forward           = new Forwarder();
                var mux               = new AdderMux();
                var idle              = new IdleChecker();
                var input_pipe        = new Pipe();
                var intermediate_pipe = new Pipe();
                var tester            = new Tester(false, mem_size);

                adder.stored            = mux.output;
                adder.input             = input_pipe.output;
                bram_porta.input        = tester.output;
                bram_porta.output       = bram.ControlA;
                bram_portb.adderout     = adder.output;
                bram_portb.dtct         = intermediate_pipe.output;
                bram_portb.external     = tester.bram_ctrl;
                bram_portb.output       = bram.ControlB;
                forward.adder           = adder.output;
                forward.input           = input_pipe.output;
                forward.intermediate    = intermediate_pipe.output;
                mux.brama               = bram.ReadResultA;
                mux.adder               = adder.output;
                mux.forward             = forward.forward;
                mux.input_pipe          = input_pipe.output;
                mux.last                = forward.last;
                idle.input              = intermediate_pipe.output;
                input_pipe.input        = tester.output;
                intermediate_pipe.input = input_pipe.output;
                tester.bram_result      = bram.ReadResultB;
                tester.idle             = idle.output;

                sim
                .AddTopLevelInputs(input_pipe.input, tester.bram_ctrl)
                .AddTopLevelOutputs(tester.bram_result, idle.output)
                .BuildCSVFile()
                .BuildVHDL()
                .Run();
            }
        }
Esempio n. 6
0
        public MatrixMultiplication(int N, int K, int M)
        {
            // Make the processes
            matrix_A = new TrueDualPortMemory <int>(N * K);
            matrix_B = new TrueDualPortMemory <int>(K * M);
            matrix_C = new TrueDualPortMemory <int>(N * M);
            var access      = new AccessGenerator();
            var data_reg_a  = new DataReg();
            var data_reg_b  = new DataReg();
            var multiplier  = new Multiplier();
            var ctrl_reg_0  = new CtrlReg();
            var ctrl_reg_1  = new CtrlReg();
            var ctrl_reg_2  = new CtrlReg();
            var accumulator = new Accumulator();
            var meta_reg_0  = new MetaReg();
            var meta_reg_1  = new MetaReg();
            var meta_reg_2  = new MetaReg();
            var meta_reg_3  = new MetaReg();

            // Connect the processes
            access.matrix_ctrl_A = matrix_A.ControlB;
            access.matrix_ctrl_B = matrix_B.ControlB;
            access.matrix_ctrl_C = ctrl_reg_0.input;
            data_reg_a.input     = matrix_A.ReadResultB;
            data_reg_b.input     = matrix_B.ReadResultB;
            ctrl_reg_0.output    = ctrl_reg_1.input;
            multiplier.input_a   = data_reg_a.output;
            multiplier.input_b   = data_reg_b.output;
            ctrl_reg_1.output    = ctrl_reg_2.input;
            accumulator.input    = multiplier.output;
            //ctrl_reg_1.output = accumulator.addr;
            ctrl_reg_2.output = accumulator.addr;
            //accumulator.addr = ctrl_reg_1.output;
            accumulator.output = matrix_C.ControlB;
            meta_reg_0.input   = access.matrix_meta_C;
            meta_reg_1.input   = meta_reg_0.output;
            meta_reg_2.input   = meta_reg_1.output;
            meta_reg_3.input   = meta_reg_2.output;

            // Connect the top-level busses
            matrix_A_meta = access.matrix_meta_A;
            matrix_B_meta = access.matrix_meta_B;
            matrix_C_meta = meta_reg_3.output;
        }
Esempio n. 7
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");
            }
        }
Esempio n. 8
0
        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");
            }
        }
Esempio n. 9
0
        public static bool Run()
        {
            using (var sim = new Simulation())
            {
                // Notes:
                // * InternetIn should signal if the packet is fragmented

                // Graph simulator
                //var simulator = new GraphFileSimulator("data/graphsimulation/udp_out_test/",450,true);
                //var simulator = new GraphFileSimulator("data/graphsimulation/advanced_udp_test/",1000000,true);
                //var simulator = new GraphFileSimulator("data/graphsimulation/big_advanced_udp_test/",1000000000,true);
                var simulator = new GraphFileSimulator("data/graphsimulation/small_advanced_udp_test/", 1000000000, true);

                // Allocate memory blocks
                int packet_out_mem_size = 8192;
                var packet_out_mem      = new TrueDualPortMemory <byte>(packet_out_mem_size);
                var packet_out          = new PacketOut(packet_out_mem, packet_out_mem_size);

                int frame_out_mem_size = 8192;
                var frame_out_mem      = new TrueDualPortMemory <byte>(frame_out_mem_size);
                var frame_out          = new FrameOut(frame_out_mem, frame_out_mem_size);

                int packet_in_mem_size = 8192;
                var packet_in_mem      = new TrueDualPortMemory <byte>(packet_in_mem_size);
                var packet_in          = new PacketIn(packet_in_mem, packet_in_mem_size);

                int data_out_mem_size = 8192;
                var data_out_mem      = new TrueDualPortMemory <byte>(data_out_mem_size);
                var data_out          = new DataOut(data_out_mem, data_out_mem_size);

                int data_in_mem_size = 8192;
                var data_in_mem      = new TrueDualPortMemory <byte>(data_in_mem_size);
                var data_in          = new DataIn(data_in_mem, data_in_mem_size);

                var internet_in = new InternetIn();
                //simulator.AddBlock(GraphFileSimulator.BlockInfo.INTERNET_IN,internet_in);
                var internet_out = new InternetOut();
                var transport    = new Transport(128);
                //var interface = new Interface();

                // Add debug information for the system blocks
                simulator.AddSystem(SystemGraph.SystemName.INTERNET_IN, internet_in);
                simulator.AddSystem(SystemGraph.SystemName.INTERNET_OUT, internet_out);
                simulator.AddSystem(SystemGraph.SystemName.DATA_IN, data_in);
                simulator.AddSystem(SystemGraph.SystemName.DATA_OUT, data_out);
                simulator.AddSystem(SystemGraph.SystemName.FRAME_OUT, frame_out);
                simulator.AddSystem(SystemGraph.SystemName.SEGMENT_IN, packet_in);
                simulator.AddSystem(SystemGraph.SystemName.SEGMENT_OUT, packet_out);
                simulator.AddSystem(SystemGraph.SystemName.TRANSPORT, transport);
                simulator.AddSystem(SystemGraph.SystemName.LINK_INTERFACE, simulator);
                simulator.AddSystem(SystemGraph.SystemName.INTERFACE, simulator);

                // Wire L(Simulator) to Internet_in
                simulator.datagramBusInBufferConsumerControlBusIn   = internet_in.datagramBusInBufferConsumerControlBusOut;
                internet_in.datagramBusInBufferProducerControlBusIn = simulator.datagramBusInBufferProducerControlBusOut;
                internet_in.datagramInBus = simulator.datagramBusIn;
                simulator.AddConnection(SystemGraph.SystemName.INTERNET_IN,
                                        SystemGraph.SystemName.LINK_INTERFACE,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        internet_in.datagramBusInBufferConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.LINK_INTERFACE,
                                        SystemGraph.SystemName.INTERNET_IN,
                                        SystemGraph.ConnectionType.CONTROL_BUFFER_PRODUCER,
                                        simulator.datagramBusInBufferProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.LINK_INTERFACE,
                                        SystemGraph.SystemName.INTERNET_IN,
                                        SystemGraph.ConnectionType.DATA,
                                        simulator.datagramBusIn);



                // Wire Internet_in to packet_in
                internet_in.packetInComputeConsumerControlBusIn = packet_in.packetInComputeConsumerControlBusOut;
                packet_in.packetInComputeProducerControlBusIn   = internet_in.packetInComputeProducerControlBusOut;
                packet_in.packetInBus = internet_in.packetInBus;
                simulator.AddConnection(SystemGraph.SystemName.SEGMENT_IN,
                                        SystemGraph.SystemName.INTERNET_IN,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        packet_in.packetInComputeConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.INTERNET_IN,
                                        SystemGraph.SystemName.SEGMENT_IN,
                                        SystemGraph.ConnectionType.CONTROL_COMPUTE_PRODUCER,
                                        internet_in.packetInComputeProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.INTERNET_IN,
                                        SystemGraph.SystemName.SEGMENT_IN,
                                        SystemGraph.ConnectionType.DATA,
                                        internet_in.packetInBus);

                // Wire packet_in to Transport
                packet_in.packetOutBufferConsumerControlBusIn = transport.packetInBufferConsumerControlBusOut;
                transport.packetInBufferProducerControlBusIn  = packet_in.packetOutBufferProducerControlBusOut;
                transport.packetInBus = packet_in.packetOutBus;
                simulator.AddConnection(SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.SystemName.SEGMENT_IN,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        transport.packetInBufferConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.SEGMENT_IN,
                                        SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.ConnectionType.CONTROL_BUFFER_PRODUCER,
                                        packet_in.packetOutBufferProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.SEGMENT_IN,
                                        SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.ConnectionType.DATA,
                                        packet_in.packetOutBus);

                // Wire Data_out to Transport
                data_out.dataOutBufferConsumerControlBusIn  = transport.dataOutBufferConsumerControlBusOut;
                transport.dataOutBufferProducerControlBusIn = data_out.dataOutBufferProducerControlBusOut;
                transport.dataOutReadBus = data_out.dataOut;
                simulator.AddConnection(SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.SystemName.DATA_OUT,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        transport.dataOutBufferConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.DATA_OUT,
                                        SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.ConnectionType.CONTROL_BUFFER_PRODUCER,
                                        data_out.dataOutBufferProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.DATA_OUT,
                                        SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.ConnectionType.DATA,
                                        data_out.dataOut);

                // Wire Transport to Data_in
                transport.dataInComputeConsumerControlBusIn = data_in.dataInComputeConsumerControlBusOut;
                data_in.dataInComputeProducerControlBusIn   = transport.dataInComputeProducerControlBusOut;
                data_in.dataIn = transport.dataInWriteBus;
                simulator.AddConnection(SystemGraph.SystemName.DATA_IN,
                                        SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        data_in.dataInComputeConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.SystemName.DATA_IN,
                                        SystemGraph.ConnectionType.CONTROL_COMPUTE_PRODUCER,
                                        transport.dataInComputeProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.SystemName.DATA_IN,
                                        SystemGraph.ConnectionType.DATA,
                                        transport.dataInWriteBus);

                // Wire Transport to Packet_out
                transport.packetOutComputeConsumerControlBusIn = packet_out.packetInComputeConsumerControlBusOut;
                packet_out.packetInComputeProducerControlBusIn = transport.packetOutComputeProducerControlBusOut;
                packet_out.packetIn = transport.packetOutWriteBus;
                simulator.AddConnection(SystemGraph.SystemName.SEGMENT_OUT,
                                        SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        packet_out.packetInComputeConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.SystemName.SEGMENT_OUT,
                                        SystemGraph.ConnectionType.CONTROL_COMPUTE_PRODUCER,
                                        transport.packetOutComputeProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.TRANSPORT,
                                        SystemGraph.SystemName.SEGMENT_OUT,
                                        SystemGraph.ConnectionType.DATA,
                                        transport.packetOutWriteBus);

                // Wire packet_out to internet_out
                packet_out.packetOutBufferConsumerControlBusIn   = internet_out.packetOutBufferConsumerControlBusOut;
                internet_out.packetOutBufferProducerControlBusIn = packet_out.packetOutBufferProducerControlBusOut;
                internet_out.packetOutWriteBus = packet_out.packetOut;
                simulator.AddConnection(SystemGraph.SystemName.INTERNET_OUT,
                                        SystemGraph.SystemName.SEGMENT_OUT,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        internet_out.packetOutBufferConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.SEGMENT_OUT,
                                        SystemGraph.SystemName.INTERNET_OUT,
                                        SystemGraph.ConnectionType.CONTROL_BUFFER_PRODUCER,
                                        packet_out.packetOutBufferProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.SEGMENT_OUT,
                                        SystemGraph.SystemName.INTERNET_OUT,
                                        SystemGraph.ConnectionType.DATA,
                                        packet_out.packetOut);

                // Wire internet_out to frame_out
                internet_out.frameOutComputeConsumerControlBusIn = frame_out.packetInComputeConsumerControlBusOut;
                frame_out.packetInComputeProducerControlBusIn    = internet_out.frameOutComputeProducerControlBusOut;
                frame_out.packetIn = internet_out.frameOutWriteBus;
                simulator.AddConnection(SystemGraph.SystemName.FRAME_OUT,
                                        SystemGraph.SystemName.INTERNET_OUT,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        frame_out.packetInComputeConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.INTERNET_OUT,
                                        SystemGraph.SystemName.FRAME_OUT,
                                        SystemGraph.ConnectionType.CONTROL_COMPUTE_PRODUCER,
                                        internet_out.frameOutComputeProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.INTERNET_OUT,
                                        SystemGraph.SystemName.FRAME_OUT,
                                        SystemGraph.ConnectionType.DATA,
                                        internet_out.frameOutWriteBus);

                // Wire frame_out to L(Simulator)
                frame_out.datagramBusOutBufferConsumerControlBusIn = simulator.datagramBusOutBufferConsumerControlBusOut;
                simulator.datagramBusOutBufferProducerControlBusIn = frame_out.datagramBusOutBufferProducerControlBusOut;
                simulator.datagramBusOut = frame_out.datagramBusOut;
                simulator.AddConnection(SystemGraph.SystemName.LINK_INTERFACE,
                                        SystemGraph.SystemName.FRAME_OUT,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        simulator.datagramBusOutBufferConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.FRAME_OUT,
                                        SystemGraph.SystemName.LINK_INTERFACE,
                                        SystemGraph.ConnectionType.CONTROL_BUFFER_PRODUCER,
                                        frame_out.datagramBusOutBufferProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.FRAME_OUT,
                                        SystemGraph.SystemName.LINK_INTERFACE,
                                        SystemGraph.ConnectionType.DATA,
                                        frame_out.datagramBusOut);

                // Wire DataIn to L(Simulator)
                data_in.dataOutBufferConsumerControlBusIn  = simulator.dataInBufferConsumerControlBusOut;
                simulator.dataInBufferProducerControlBusIn = data_in.dataOutBufferProducerControlBusOut;
                simulator.dataIn = data_in.dataOut;
                simulator.AddConnection(SystemGraph.SystemName.INTERFACE,
                                        SystemGraph.SystemName.DATA_IN,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        simulator.dataInBufferConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.DATA_IN,
                                        SystemGraph.SystemName.INTERFACE,
                                        SystemGraph.ConnectionType.CONTROL_BUFFER_PRODUCER,
                                        data_in.dataOutBufferProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.DATA_IN,
                                        SystemGraph.SystemName.INTERFACE,
                                        SystemGraph.ConnectionType.DATA,
                                        data_in.dataOut);

                // Wire DataOut to L(Simulator)
                simulator.dataOutComputeConsumerControlBusIn = data_out.dataInComputeConsumerControlBusOut;
                data_out.dataInComputeProducerControlBusIn   = simulator.dataOutComputeProducerControlBusOut;
                data_out.dataIn = simulator.dataOut;
                simulator.AddConnection(SystemGraph.SystemName.DATA_OUT,
                                        SystemGraph.SystemName.INTERFACE,
                                        SystemGraph.ConnectionType.CONTROL_CONSUMER,
                                        data_out.dataInComputeConsumerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.INTERFACE,
                                        SystemGraph.SystemName.DATA_OUT,
                                        SystemGraph.ConnectionType.CONTROL_COMPUTE_PRODUCER,
                                        simulator.dataOutComputeProducerControlBusOut);
                simulator.AddConnection(SystemGraph.SystemName.INTERFACE,
                                        SystemGraph.SystemName.DATA_OUT,
                                        SystemGraph.ConnectionType.DATA,
                                        simulator.dataOut);

                // Use fluent syntax to configure the simulator.
                // The order does not matter, but `Run()` must be
                // the last method called.

                // The top-level input and outputs are exposed
                // for interfacing with other VHDL code or board pins

                sim.AddTopLevelInputs(simulator.datagramBusIn)
                //.BuildCSVFile()
                //.BuildVHDL()
                .Run();

                // After `Run()` has been invoked the folder
                // `output/vhdl` contains a Makefile that can
                // be used for testing the generated design
            }
            return(true);
        }
Esempio n. 10
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. 11
0
 public FrameInputSimulator(String dir, TrueDualPortMemory <byte> .IControlA controlA)
 {
     this.dir      = dir;
     this.controlA = controlA;
 }