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 + -
显示快捷键?