关闭

Handel-C中的prialt

560人阅读 评论(0) 收藏 举报
分类:
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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55602次
    • 积分:751
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:21篇
    • 译文:0篇
    • 评论:2条
    最新评论