systemverilog 过程控制语句

unique if

unique if 语句是并行的检查所有的条件,当超过一个条件满足、没有一个条件满足和没有与if像配对的else时,就会报错。
如下面的例子,有超过1个条件满足:
在这里插入图片描述
其输出结果为
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

priority if

与verilog中理解差不多,在没有条件满足和没有与if相配对的else语句会报错。

module priority_if;
  //variables declaration
  int a,b,c;
   
  initial begin
     //initialization
     a=50;
     b=20;
     c=40;
   
     priority if ( a < b ) $display("\t a is less than b");
     else     if ( a < c ) $display("\t a is less than c");
  end
 endmodule

其输出结果为:

RT Warning: No condition matches in 'priority if' statement.

do while

    do begin
        // statement -1      
        ...
        // statement -n
    end
    while(condition);

在这里插入图片描述

while

while(condition) begin
        // statement -1      
        ...
        // statement -n
    end

在这里插入图片描述

foreach

systemverilog使用它来遍历数组。

foreach(<variable>[<iterator>]]) begin
  //statement - 1
  ...
  //statement - n
end
module for_loop;
  int a[4];
  initial begin
    $display("-----------------------------------------------------------------");
    foreach(a[i]) a[i] = i;
    foreach(a[i]) $display("\tValue of a[%0d]=%0d",i,a[i]);
  
    $display("-----------------------------------------------------------------");
  end  
endmodule

输出结果为:

-----------------------------------------------------------------
Value of a[0]=0
Value of a[1]=1
Value of a[2]=2
Value of a[3]=3

for

与verilog相比,systemverilog允许在for循环内部进行循环变量的声明,而且可以多个初始化声明或者赋值。结构如下:
在这里插入图片描述
initialization:首先执行,并且只执行一次。可以用来声明和初始化循环控制变量。
Condition:用来评价。如果是真,整体的循环将会被执行。
modifier:在每次循环的最后将会被执行。

module for_loop;

initial begin
    $display("---------------------------------------------------------");

    for(int j=0, i=7; j<8; j++,i--) begin
        $display("\t Value j = %0d Value of i = %0d", j, i);
    end

    $display("---------------------------------------------------------");

end

endmodule

输出结果为:
在这里插入图片描述

repeat

repeat语句会执行一些语句若干次。结构如下所示:

repeat(<variable>) begin
  //statement - 1
  ...
  //statement - n
end
module repeat_loop;
  int a;
  initial begin
    $display("-----------------------------------------------------------------");
 
    repeat(4) begin
        $display("\tValue of a=%0d",a);
        a++;
     end
    $display("-----------------------------------------------------------------");
  end  
endmodule

其输出结果为:

-----------------------------------------------------------------
Value of a=0
Value of a=1
Value of a=2
Value of a=3
-----------------------------------------------------------------

forever

会执行一些语句无限次。结构如下:

forever begin
  //statement - 1
  ...
  //statement - n
end

下面是一个例子:

module forever_loop;
  int a;
  initial begin
    $display("-----------------------------------------------------------------");
  
    forever begin
      $display("\tValue of a=%0d",a);
      a++;
      #5;
    end
  
    $display("-----------------------------------------------------------------");
  end
  initial begin
    #20 $finish;
  end  
endmodule

输出结果为:

-----------------------------------------------------------------
           Value of a=0
           Value of a=1
           Value of a=2
           Value of a=3
$finish called from file "testbench.sv", line 27.
$finish at simulation time   20
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值