prialt statements are used with multiple channels, to select the first one that is ready for a read or
write.
prialt
{
case CommsStatement:
Statement
break;
......
default:
Statement
break;
}
prialt类似于Switch语句,只是它判断的条件是通道通信,而不是某个变量。它可以用来选择某个通道通信。
而选择的条件是:1、
哪个case后边的通道通信先准备好,就执行该通道通信,并且执行通道通信和break之间的语句
Statement
。2、通道同时准备好的时候,写在前边的case有优先权。3、如果所有通道都没准备好通信,就执行default后边的语句。
限制条件:同一个通道通信不能出现在两个case中。
例1:
程序中的chan1,chan2和chan3通道都可以改变变量y的值,只要其中任意一个通道准备好传送数据,y的值就会被改变。可以通过改变通道中的值,而达到间接改变变量y的值。
while(1)
prialt
{
case chan1 ? y: //从通道读取数据
break;
case chan2 ? y:
break;
case chan3 ? y:
break;
}
例2:
在如下程序中,prialt中的向通道写会被阻塞,直到第二个clk,z从second通道中读取完数据。
int 4 x, y, z;
chan <int 4> first, second;
par
{
prialt
{
case first ! x:
break;
case second ! y:
break;
}
seq
{
delay;
second ? z;
}
}
例3:
prialt
{
case a ? x:
x++;
break;
case b ! y:
y++;
break;
}