03-SV过程语句和子程序

1、过程语句

  for语句、do-while语句、while语句

 1 initial begin
 2         string cmd;
 3         int file,c;
 4         $display("=========== continue break ==========");
 5         //bit [127:0] cmd;
 6         file=$fopen("command.txt","r");
 7 while(!$feof(file)) begin
 8         c = $fscanf(file,"%s",cmd);
 9         case(cmd)
10                 "continue":
11                 begin
12                         continue;
13                 end
14 
15                 "done":
16                 begin
17                         $display("done row");
18                         break;
19                 end
20 
21                 default:
22                 begin
23                         $display(cmd);
24                 end
25         endcase
26 end
27 $fclose(file);
28 end

2、任务、函数以及void函数

  Verilog:任务可以耗时,函数不能;任务可以调用函数,函数不能调用任务;函数必须有返回值,且返回值必须被使用

  SystemVerilog:允许函数调用任务,不消耗时间的SV任务应该定义成void函数

  (1)使用ref和const传递数组

    好处:ref声明在进行参数传递时无需复制到堆栈区,const声明则使得子程序不能修改数组的值,避免误修改。ref的第2个好处是在任务里可以修改变量而且修改结果对调用它的函数随时可见。

        这为并发执行线程之间的信息传递提供了机会。

 1 // ref const
 2 function automatic void print_checksum(const ref bit [31:0] a[]);
 3         bit [31:0] checksum;
 4         for(int i=0;i<a.size();i++) begin
 5             checksum^=a[i];
 6         end
 7         $display("The array checksum is %b",checksum);
 8 
 9 endfunction
10 
11 bit [31:0] a[];
12 initial begin
13         a = new[3];
14         a[0] = 32'd0;
15         a[1] = 32'd1;
16         a[2] = 32'd3;
17         //bit [31:0] a[2] = '{'{32'd0},'{32'd1}};
18         $display("========== automatic ref const ==========="); // # The array checksum is 00000000000000000000000000000010
19         print_checksum(a);
20 end

  (2)从函数中返回一个数组

 1 // 从函数中返回一个数组
 2 function automatic void init(ref int f[5], input int start);
 3         foreach(f[i])
 4                 f[i] = i + start;
 5 endfunction
 6 
 7 int fa[5];
 8 initial begin
 9     init(fa,5);
10     foreach(fa[i])
11             $display("fa[%0d]=%0d",i,fa[i]);
12 end

 

    

 

上一篇:算法学习(10):乘法逆元


下一篇:nmap***测试--版本探测