arbiter.cpp

来自「systemc源码」· C++ 代码 · 共 138 行

CPP
138
字号
/************************************************************************
 * file name: 
 * description:  
 *
 * modification history
 * --------------------
 * 2004-1-13 16:48:17, created by zhuwei
 */

/* includes----------------------------------------------------------- */
#include "arbiter.h"

/* defines------------------------------------------------------------ */
/* typedefs----------------------------------------------------------- */
/* externs------------------------------------------------------------ */
/* globals------------------------------------------------------------ */
/* forward declarations----------------------------------------------- */

void arbiter::reg_fun()
{
	if(!rst_n.read())
	{
		state = STATE_0;
		sel = 0;
	}
	else
	{
		state = new_state;
		sel = new_sel;
	}
}

void arbiter::comb_fun()
{
	int	v_req0 = req[0].read();
	int	v_req1 = req[1].read();
	int	v_req2 = req[2].read();

	new_sel = 0;

	switch(state)
	{
	case(STATE_0):
		if(v_req0)
		{
			new_sel = 1;
			new_state = STATE_1;
		}
		else if(v_req1)
		{
			new_sel = 2;
			new_state = STATE_2;
		}
		else if(v_req2)
		{
			new_sel = 3;
			new_state = STATE_3;
		}
		else
		{
			new_sel = 0;
			new_state = STATE_0;
		}
		break;
	case(STATE_1):
		if(v_req1)
		{
			new_sel = 2;
			new_state = STATE_2;
		}
		else if(v_req2)
		{
			new_sel = 3;
			new_state = STATE_3;
		}
		else if(v_req0)
		{
			new_sel = 1;
			new_state = STATE_1;
		}
		else
		{
			new_sel = 0;
			new_state = STATE_0;
		}
		break;
	case(STATE_2):
		if(v_req2)
		{
			new_sel = 3;
			new_state = STATE_3;
		}
		else if(v_req0)
		{
			new_sel = 1;
			new_state = STATE_1;
		}
		else
		if(v_req1)
		{
			new_sel = 2;
			new_state = STATE_2;
		}
		else 
		{
			new_sel = 0;
			new_state = STATE_0;
		}
			break;
	case(STATE_3):
		if(v_req0)
		{
			new_sel = 1;
			new_state = STATE_1;
		}
		else
		if(v_req1)
		{
			new_sel = 2;
			new_state = STATE_2;
		}
		else
		if(v_req2)
		{
			new_sel = 3;
			new_state = STATE_3;
		}
		else 
		{
			new_sel = 0;
			new_state = STATE_0;
		}
		break;
	default:
		new_sel = 0;
		new_state = STATE_0;
	}
}

⌨️ 快捷键说明

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