zoukankan      html  css  js  c++  java
  • 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

        

  • 相关阅读:
    所有网卡常用信息获取集中展示(CentOS6 &CentOS7)
    Centos下网络配置方法(网关、dns、ip地址配置)
    解决修改密码报错‘passwd:Authentication token’
    CPU相关知识---物理CPU数、物理核数、逻辑核数、逻辑CPU数 ?
    Linux sort 多字段分组排序
    Linux下查看所有CPU核心使用率的方法
    PAM禁止root用户登录,限制普通用户使用su切换到root
    python3爬虫初探(一)之urllib.request
    POJ2689——区间筛法——Prime Distance
    2次方表
  • 原文地址:https://www.cnblogs.com/wt-seu/p/12255051.html
Copyright © 2011-2022 走看看