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

system verilog 队列赋值_赋值


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

system verilog 队列赋值_fpga开发_02


3、跳转语句

System Verilog增加跳转语句:break、continue和return。

break:跳出本次循环体

continue:跳转到本次循环体的尾部

return(条件):退出一个函数并返回函数值

return:退出一个任务或空函数