⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tan_noc_worm_mesh_fifo_in_30.pr.c

📁 片上网络
💻 C
📖 第 1 页 / 共 2 页
字号:
				
				
				
				
				/* server is idle again. 					*/
				server_busy = 0;
				
				
				op_stat_write (fifo_full, (op_subq_stat (0,OPC_QSTAT_FREE_PKSIZE) == 0));
				}
				FSM_PROFILE_SECTION_OUT (state4_enter_exec)

			/** state (svc_compl) exit executives **/
			FSM_STATE_EXIT_FORCED (4, "svc_compl", "tan_noc_worm_mesh_FIFO_in_30 [svc_compl exit execs]")


			/** state (svc_compl) transition processing **/
			FSM_PROFILE_SECTION_IN ("tan_noc_worm_mesh_FIFO_in_30 [svc_compl trans conditions]", state4_trans_conds)
			FSM_INIT_COND (QUEUE_EMPTY)
			FSM_TEST_COND (!QUEUE_EMPTY)
			FSM_TEST_LOGIC ("svc_compl")
			FSM_PROFILE_SECTION_OUT (state4_trans_conds)

			FSM_TRANSIT_SWITCH
				{
				FSM_CASE_TRANSIT (0, 2, state2_enter_exec, ;, "QUEUE_EMPTY", "", "svc_compl", "idle")
				FSM_CASE_TRANSIT (1, 7, state7_enter_exec, ;, "!QUEUE_EMPTY", "", "svc_compl", "req_get")
				}
				/*---------------------------------------------------------*/



			/** state (wait) enter executives **/
			FSM_STATE_ENTER_UNFORCED (5, "wait", state5_enter_exec, "tan_noc_worm_mesh_FIFO_in_30 [wait enter execs]")

			/** blocking after enter executives of unforced state. **/
			FSM_EXIT (11,"tan_noc_worm_mesh_FIFO_in_30")


			/** state (wait) exit executives **/
			FSM_STATE_EXIT_UNFORCED (5, "wait", "tan_noc_worm_mesh_FIFO_in_30 [wait exit execs]")


			/** state (wait) transition processing **/
			FSM_PROFILE_SECTION_IN ("tan_noc_worm_mesh_FIFO_in_30 [wait trans conditions]", state5_trans_conds)
			FSM_INIT_COND (FLOW_CONTROL)
			FSM_TEST_COND (ARRIVAL)
			FSM_TEST_LOGIC ("wait")
			FSM_PROFILE_SECTION_OUT (state5_trans_conds)

			FSM_TRANSIT_SWITCH
				{
				FSM_CASE_TRANSIT (0, 3, state3_enter_exec, ;, "FLOW_CONTROL", "", "wait", "svc_start")
				FSM_CASE_TRANSIT (1, 1, state1_enter_exec, ;, "ARRIVAL", "", "wait", "arrival")
				}
				/*---------------------------------------------------------*/



			/** state (FLOW_CON) enter executives **/
			FSM_STATE_ENTER_FORCED (6, "FLOW_CON", state6_enter_exec, "tan_noc_worm_mesh_FIFO_in_30 [FLOW_CON enter execs]")
				FSM_PROFILE_SECTION_IN ("tan_noc_worm_mesh_FIFO_in_30 [FLOW_CON enter execs]", state6_enter_exec)
				{
				if(op_intrpt_type () == OPC_INTRPT_STAT)
					{
					if(op_intrpt_stat ()==NEXT_FIFO_FULL_0)
						if(op_stat_local_read (NEXT_FIFO_FULL_0) == 1)
				            next_0=1;
				        else
					        next_0=0;
					if(op_intrpt_stat ()==NEXT_FIFO_FULL_1)
						if(op_stat_local_read (NEXT_FIFO_FULL_1) == 1)
				            next_1=1;
				        else
					        next_1=0;	
					if(op_intrpt_stat ()==NEXT_FIFO_FULL_2)
						if(op_stat_local_read (NEXT_FIFO_FULL_2) == 1)
				            next_2=1;
				        else
					        next_2=0;	
					if(op_intrpt_stat ()==NEXT_FIFO_FULL_3)
						if(op_stat_local_read (NEXT_FIFO_FULL_3) == 1)
				            next_3=1;
				        else
					        next_3=0;	
					if(op_intrpt_stat ()==NEXT_FIFO_FULL_4)
						if(op_stat_local_read (NEXT_FIFO_FULL_4) == 1)
				            next_4=1;
				        else
					        next_4=0;	
					}
				}
				FSM_PROFILE_SECTION_OUT (state6_enter_exec)

			/** state (FLOW_CON) exit executives **/
			FSM_STATE_EXIT_FORCED (6, "FLOW_CON", "tan_noc_worm_mesh_FIFO_in_30 [FLOW_CON exit execs]")


			/** state (FLOW_CON) transition processing **/
			FSM_TRANSIT_FORCE (2, state2_enter_exec, ;, "default", "", "FLOW_CON", "idle")
				/*---------------------------------------------------------*/



			/** state (req_get) enter executives **/
			FSM_STATE_ENTER_FORCED (7, "req_get", state7_enter_exec, "tan_noc_worm_mesh_FIFO_in_30 [req_get enter execs]")
				FSM_PROFILE_SECTION_IN ("tan_noc_worm_mesh_FIFO_in_30 [req_get enter execs]", state7_enter_exec)
				{
				pkptr = op_subq_pk_access (0, OPC_QPOS_HEAD);
				//op_pk_nfd_get (pkptr, "dest_address", &dest_address);
				op_pk_nfd_get(pkptr, "flag", &flag);
				
				//op_stat_write(req,dest_address);  
				
				// 判断是不是包头。
				if(flag == 1) {
					op_pk_nfd_get (pkptr, "dest_address", &dest_address);
					flag = 3 + dest_address;
				}
				
				
				if(dest_address == 0)
					{
					X = 0;
					Y = 0;
					}
				if(dest_address == 1)
					{
					X = 1;
					Y = 0;
					}
				if(dest_address == 2)
					{
					X = 2;
					Y = 0;
					}
				if(dest_address == 3)
					{
					X = 3;
					Y = 0;
					}
				if(dest_address == 4)
					{
					X = 0;
					Y = 1;
					}
				if(dest_address == 5)
					{
					X = 1;
					Y = 1;
					}
				if(dest_address == 6)
					{
					X = 2;
					Y = 1;
					}
				if(dest_address == 7)
					{
					X = 3;
					Y = 1;
					}
				if(dest_address == 8)
					{
					X = 0;
					Y = 2;
					}
				if(dest_address == 9)
					{
					X = 1;
					Y = 2;
					}
				if(dest_address == 10)
					{
					X = 2;
					Y = 2;
					}
				if(dest_address == 11)
					{
					X = 3;
					Y = 2;
					}
				if(dest_address == 12)
					{
					X = 0;
					Y = 3;
					}
				if(dest_address == 13)
					{
					X = 1;
					Y = 3;
					}
				if(dest_address == 14)
					{
					X = 2;
					Y = 3;
					}
				if(dest_address == 15)
					{
					X = 3;
					Y = 3;
					}
				
				
				
				
				if(X > Local_X)
					{
					//op_pk_send (pkptr, 1); //send to east
					dir = 1;
					op_stat_write(req_east, flag); 
					}
				if(X == Local_X)
					{
					if(Y > Local_Y)
						{
						//op_pk_send (pkptr, 2); //send to south
						dir = 2;
						op_stat_write(req_south, flag); 
						}
					if(Y == Local_Y)
						{
						//op_pk_send (pkptr, 0); //send to mid
						dir = 0;
						op_stat_write(req_mid, flag); 
						}
					if(Y < Local_Y)
						{
						//op_pk_send (pkptr, 4); //send to north
						dir = 4;
						op_stat_write(req_north, flag); 
						}
					}
				if(X < Local_X)
					{
					//op_pk_send (pkptr, 3); //send to west
					dir = 3;
					op_stat_write(req_west, flag); 
					}
				}
				FSM_PROFILE_SECTION_OUT (state7_enter_exec)

			/** state (req_get) exit executives **/
			FSM_STATE_EXIT_FORCED (7, "req_get", "tan_noc_worm_mesh_FIFO_in_30 [req_get exit execs]")


			/** state (req_get) transition processing **/
			FSM_TRANSIT_FORCE (5, state5_enter_exec, ;, "default", "", "req_get", "wait")
				/*---------------------------------------------------------*/



			}


		FSM_EXIT (0,"tan_noc_worm_mesh_FIFO_in_30")
		}
	}




void
tan_noc_worm_mesh_FIFO_in_30_diag (OP_SIM_CONTEXT_ARG_OPT)
	{
	/* No Diagnostic Block */
	}




void
tan_noc_worm_mesh_FIFO_in_30_terminate (OP_SIM_CONTEXT_ARG_OPT)
	{

#if !defined (VOSD_NO_FIN)
	int _op_block_origin = __LINE__;
#endif

	FIN_MT (tan_noc_worm_mesh_FIFO_in_30_terminate ())


	/* No Termination Block */

	Vos_Poolmem_Dealloc_MT (OP_SIM_CONTEXT_THREAD_INDEX_COMMA pr_state_ptr);

	FOUT
	}


/* Undefine shortcuts to state variables to avoid */
/* syntax error in direct access to fields of */
/* local variable prs_ptr in tan_noc_worm_mesh_FIFO_in_30_svar function. */
#undef server_busy
#undef service_rate
#undef own_id
#undef fifo_full
#undef pk_destroy
#undef next_0
#undef next_1
#undef next_2
#undef next_3
#undef next_4
#undef crossbar_busy_mid
#undef crossbar_busy_east
#undef crossbar_busy_south
#undef crossbar_busy_west
#undef crossbar_busy_north
#undef req_mid
#undef dir
#undef req_east
#undef req_south
#undef req_west
#undef req_north
#undef dest_address

#undef FIN_PREAMBLE_DEC
#undef FIN_PREAMBLE_CODE

#define FIN_PREAMBLE_DEC
#define FIN_PREAMBLE_CODE

VosT_Obtype
tan_noc_worm_mesh_FIFO_in_30_init (int * init_block_ptr)
	{

#if !defined (VOSD_NO_FIN)
	int _op_block_origin = 0;
#endif
	VosT_Obtype obtype = OPC_NIL;
	FIN_MT (tan_noc_worm_mesh_FIFO_in_30_init (init_block_ptr))

	obtype = Vos_Define_Object_Prstate ("proc state vars (tan_noc_worm_mesh_FIFO_in_30)",
		sizeof (tan_noc_worm_mesh_FIFO_in_30_state));
	*init_block_ptr = 0;

	FRET (obtype)
	}

VosT_Address
tan_noc_worm_mesh_FIFO_in_30_alloc (VOS_THREAD_INDEX_ARG_COMMA VosT_Obtype obtype, int init_block)
	{

#if !defined (VOSD_NO_FIN)
	int _op_block_origin = 0;
#endif
	tan_noc_worm_mesh_FIFO_in_30_state * ptr;
	FIN_MT (tan_noc_worm_mesh_FIFO_in_30_alloc (obtype))

	ptr = (tan_noc_worm_mesh_FIFO_in_30_state *)Vos_Alloc_Object_MT (VOS_THREAD_INDEX_COMMA obtype);
	if (ptr != OPC_NIL)
		ptr->_op_current_block = init_block;
	FRET ((VosT_Address)ptr)
	}



void
tan_noc_worm_mesh_FIFO_in_30_svar (void * gen_ptr, const char * var_name, void ** var_p_ptr)
	{
	tan_noc_worm_mesh_FIFO_in_30_state		*prs_ptr;

	FIN_MT (tan_noc_worm_mesh_FIFO_in_30_svar (gen_ptr, var_name, var_p_ptr))

	if (var_name == OPC_NIL)
		{
		*var_p_ptr = (void *)OPC_NIL;
		FOUT
		}
	prs_ptr = (tan_noc_worm_mesh_FIFO_in_30_state *)gen_ptr;

	if (strcmp ("server_busy" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->server_busy);
		FOUT
		}
	if (strcmp ("service_rate" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->service_rate);
		FOUT
		}
	if (strcmp ("own_id" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->own_id);
		FOUT
		}
	if (strcmp ("fifo_full" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->fifo_full);
		FOUT
		}
	if (strcmp ("pk_destroy" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->pk_destroy);
		FOUT
		}
	if (strcmp ("next_0" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->next_0);
		FOUT
		}
	if (strcmp ("next_1" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->next_1);
		FOUT
		}
	if (strcmp ("next_2" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->next_2);
		FOUT
		}
	if (strcmp ("next_3" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->next_3);
		FOUT
		}
	if (strcmp ("next_4" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->next_4);
		FOUT
		}
	if (strcmp ("crossbar_busy_mid" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->crossbar_busy_mid);
		FOUT
		}
	if (strcmp ("crossbar_busy_east" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->crossbar_busy_east);
		FOUT
		}
	if (strcmp ("crossbar_busy_south" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->crossbar_busy_south);
		FOUT
		}
	if (strcmp ("crossbar_busy_west" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->crossbar_busy_west);
		FOUT
		}
	if (strcmp ("crossbar_busy_north" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->crossbar_busy_north);
		FOUT
		}
	if (strcmp ("req_mid" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->req_mid);
		FOUT
		}
	if (strcmp ("dir" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->dir);
		FOUT
		}
	if (strcmp ("req_east" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->req_east);
		FOUT
		}
	if (strcmp ("req_south" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->req_south);
		FOUT
		}
	if (strcmp ("req_west" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->req_west);
		FOUT
		}
	if (strcmp ("req_north" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->req_north);
		FOUT
		}
	if (strcmp ("dest_address" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->dest_address);
		FOUT
		}
	*var_p_ptr = (void *)OPC_NIL;

	FOUT
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -