SystemVerilog——控制结构

1.条件选择语句

(1)if...else语句

if...else语句根据不同的条件执行不同的分支

if(expression)

begin...end

else 

begin...end

(2)case 语句

case语句为程序提供了分支选择控制的功能。case要求分之表达式和case条件表达式做全等比较(===)而不是逻辑比较(==)。一个分支只有在其表达式完全匹配case条件语句表达式时,才会被选中执行。

case(expression)

constant_expression:statement_block;

constant_expression:statement_block;

...

default:statement_block

endcase

2.循环语句

(1)for循环

基本格式:

for(initializing_expression;terminating_expression;loop_increment_expression)

  begin

...

end

在Verilog中,用来控制for循环的变量必须在循环体之前声明。如果两个或多个并行程序中的循环使用相同的循环控制变量,那么就有可能出现一个循环修改其他循环还在使用的循环控制变量的情况。在for循环中,SystemVerilog添加了声明for循环控制变量的能力。这种方式会在循环内产生一个本地变量,其他并行循环不会偶然地影响这个循环控制变量。

(2)while循环

while(expression)

 begin

...

end

例子:

module while_example();

intial

begin:counts

logic [7:0] tempreg;

count = 0;

tempreg = 8'b11110000;

while(tempreg) begin

if(tempreg[0]) 

  counts++;

tempreg>>=1;

end

end

endmodule

 

(3)do...while循环语句

do…while循环语句和while循环语句有一点区别,也就是do…while循环语句在循环体的结束处评估循环条件,也就是do…while循环至少执行一次循环体。

do

 begin

...

end

while(expression)

(4)repeat循环语句

repeat循环对循环体执行固定的次数。如果表达式被评估为未知或者高阻,那么应该认为是零次,不应执行循环体。

repeat(expression)

begin

...

end

(5)forever循环语句

forever循环语句持续执行一个循环体

forever

 begin

 ...

 end

为了防止循环体在delta时间内产生无限循环,导致仿真挂起,forever循环体内部必须带有时序控制或者disable语句。下例是一个利用forever循环生成周期性时钟的例子,时钟clock周期为20ns,时钟clock2周期为10ns。

module forever_example();

logic clock1,clock2;

intiial begin

clock1<=0;

clock2<=0;

fork

  forever  #10ns clock1 = ~clock1;

#5  forever  #5ns clock2 = ~clock2

join

end

endmodule

(6)foreach循环语句

foreach循环语句中指定数组后,程序会逐个遍历数组成员。

foreach(array_name) [< loop_varables>] <statement>

它的自变量可以是一个指定的任意类型数组(固定尺寸的、动态的及联合数组),然后紧跟着一个包围在方括号内的循环变量的列表。每一个循环变量对应于数组的某一维。foreach结构类似于一个repeat循环,它使用数组范围替代一个表达式来指定重复次数。foreach循环语句实例下例如源代码所示。

module foreach_example();

string words[2] = '{"hello world"};

int prod [1:8][1:3];

initial begin

 foreach(words[j])

  $display(j,words[j]);

prod[k][m] = k*m;

end

endmodule

循环变量的数目必须匹配数组变量的维数。空循环变量可以用来表示在对应的数组维数上没有迭代,并且处于尾部的连续空循环变量可以被忽略。循环变量是自动的、只读的,

并且它们的作用范围对于循环来讲是本地的。每一个循环变量的类型被隐含地声明成与数组索引的类型一致。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值