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

📄 arbiter.cpp

📁 SystemC可以由C语言直接开发硬件
💻 CPP
字号:
/************************************************************************
 * 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -