Handel-C中的prialt

原创 2013年12月05日 22:15:35
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;
}


内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Handel-C中的prialt
举报原因:
原因补充:

(最多只允许输入30个字)