ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

03-SV过程语句和子程序

2020-02-03 12:02:35  阅读:264  来源: 互联网

标签:03 begin end 函数 int cmd SV ref 子程序


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

 

    

 

标签:03,begin,end,函数,int,cmd,SV,ref,子程序
来源: https://www.cnblogs.com/wt-seu/p/12255051.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有