zoukankan      html  css  js  c++  java
  • 求解决!!!SystemVerilog于ModelSim在编译和执行

    我们正在学习SV流程,样品执行书。。


    功能:函数返回数组。



    Code1:
    /*书上提供的样例。存在错误,不可执行
    function void init(ref int f[5], int start);//主要是函数定义时没有声明automatic属性
      foreach(f)
        f = i + start;
    endfunction

    initial begin
      int fa[5];
      fa = init(fa,5);
      foreach(fa)
        $display("fa[%0d] = %0d", i, fa);
    end
    */


    #-----------------------------------------------------------------------------------
    Code2:
    //下面这段代码在modelsim下可成功执行。

    (在定义function时加上了automatic)
    module enum_name;
      int fa[5];
      initial begin
    //  fa = init(fa, 5);
      init(fa, 5);
        foreach(fa)
          $display("fa[%0d] = %0d", i, fa);  
    end

      function automatic void init(ref int f[5], input int start);
        foreach(f)//初始化数组
          f = i + start;
      endfunction
    endmodule
    #-----------------------------------------------------------------------------------

    Question:
    在LRM中第16章,解说program结果时有例如以下结构:
    Code3:
    module test(...)
    int shared; // variable shared by programs p1 and p1
    program p1;
    ...
    endprogram
    program p2;
    ...
    endprogram // p1 and p2 are implicitly instantiated once in module test
    endmodule


    想问一下,Code2中的function怎么能够包在program...endprogram里面,形成Code3形式的代码结构。
    当中,Code4是我尝试改的,但在ModelSim中编译能够通过,但执行时报错。



    Code4:
    module enum_name;
      int fa[5];
      initial begin

    //  fa = init(fa, 5);
        test.init(fa, 5); //相应报错信息中提示的第61行内容
        foreach(fa)
           $display("fa[%0d] = %0d", i, fa);  
      end
    //------------------------------------------------------------;
      program automatic test;
        function automatic void init(ref int f[5], input int start);
          foreach(f)//初始化数组
            f = i + start;
       endfunction
      endprogram
    endmodule


    执行时报错内容:
    # Compile of enum_name.sv was successful with warnings.
    vsim -gui work.enum_name
    # vsim -gui work.enum_name 
    # Loading sv_std.std
    # Loading work.enum_name
    # ** Error: (vsim-3927) D:/ModelSim/SysVerilog/enum/enum_name.sv(61) Accessing program item '/enum_name/test/init' from a non-program design unit enum_name is illegal.

    #         Region: /enum_name
    # ** Error: (vsim-3927) D:/ModelSim/SysVerilog/enum/enum_name.sv(61) Accessing program item '/enum_name/test/init' from a non-program design unit enum_name is illegal.

    #         Region: /enum_name
    # ** Error: (vsim-3927) D:/ModelSim/SysVerilog/enum/enum_name.sv(61) Accessing program item '/enum_name/test/init' from a non-program design unit enum_name is illegal.

    #         Region: /enum_name
    Error loading design



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    CCF认证201809-2买菜
    git删除本地保存的账号和密码
    mysql表分区
    使用java代码将时间戳和时间互相转换
    Mysql数据库表被锁定处理
    mysql查询某个数据库表的数量
    编译nginx错误:make[1]: *** [/pcre//Makefile] Error 127
    LINUX下安装pcre出现WARNING: 'aclocal-1.15' is missing on your system错误的解决办法
    linux下安装perl
    [剑指Offer]26-树的子结构
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4868212.html
Copyright © 2011-2022 走看看