System Verilog与功能验证(三)

System Verilog过程语句
(1)赋值语句
(2)条件选择语句
(3)循环语句
(4)跳转语句
(5)子程序调用
(6)事件控制
1、赋值语句四类
阻塞赋值:使用 = ;
非阻塞赋值:使用 <= ;
自加/自减赋值:使用 ++/-- ;
过程连续赋值语句:使用 assign/deassign、force/release;
例子:

initial begin
 logic data;
 logic data_out;
 logic data_test;
 data_out <= 1'b1;  //阻塞赋值
 data_test = 1'b1; //阻塞赋值
 data_test ++ ; //变量自加
 data_test -- ; //变量自减
 assign data = data_test;   //连续赋值
 data = 1'b0;          //不会改变data的数值
 deassign data;          //去除连续赋值
 data = 1'b0;          //data数值生效
 force data = 1'b1;  //强制赋值
 release data;      //释放
end

2、控制结构
2.1、条件语句:if……else……和case
case要求分支表达式和case条件表达式做全等比较(===),而不是逻辑比较 。
System Verilog提供了casex和casez
casex:case条件表达式中所有的x值都不参与比较;
casez:case条件表达式中所有的x和z值都不参与比较。
2.2、循环语句
2.2.1、for循环
System Verilog条件了声明for循环控制变量的能力,在循环内产生一个本地变量,其他并行循环不会偶然地影响这个循环控制变量。
例子:两个for循环分别在循环内产生本地变量i

 initial begin
     loop1:
        for(int i=0,i<=10,i++)
        $display("loop1 i is %d\n",i);
        #1;  
    end
    initial begin
     loop2:
        for(int i=10,i>=0,i--)
        $display("loop2 i is %d\n",i);
        #1;
    end

System Verilog允许初始声明或赋值语句可以是一个或者多个用逗号分隔的语句。
例子:
for(int i=0,j=0;ij<=50;i++,j++)
$display("Value i
j is %d\n", i*j);
2.2.2、while循环语句
while循环语句执行循环结构,直至条件表达式为假。若一开始为假,循环语句永远不会执行。
例子:计算reg中1的个数

initial
begin
    logic    [07:00]        reg_test;
    logic     [07:00]        cnt    ;
    reg_test = 8'b1011_0100;
    cnt = 0;    
    while(reg_test)
    begin
        if(reg_test[0])
            cnt ++ ;
            $display("cnt value is %d",cnt);                    
            reg_test >>= 1;
            //reg_test = reg_test >> 1;
            $display("reg_test value is %b",reg_test);
    end
end

在这里插入图片描述
2.2.3、do……while循环语句
do……while语句在循环体的结束处评估循环语句,至少循环一次。
2.2.4、repeat循环语句
repeat循环对循环体执行固定的次数。表达式被评估为未知或者高阻,那么应该认为是零次,不应执行循环体。
2.2.5、forever循环语句
例子:forever生成时钟
forever #10ns
clk = ~clk;
2.2.6、foreach循环语句
foreach循环语句指定数组后,程序会逐个遍历数组成员。
例子:遍历字符数组

string    words[3] = '{"hello","world","moonin"};
initial begin
    foreach(words[i])
    $display("words %d is %s\n",i,words[i]);
end

在这里插入图片描述
3、跳转语句
System Verilog增加跳转语句:break、continue和return。
break:跳出本次循环体
continue:跳转到本次循环体的尾部
return(条件):退出一个函数并返回函数值
return:退出一个任务或空函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值