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); }
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); } }
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; }
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); }
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(); } }
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; }
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"); } }
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 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); }
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; }
public FrameInputSimulator(String dir, TrueDualPortMemory <byte> .IControlA controlA) { this.dir = dir; this.controlA = controlA; }