微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 如何用questasim进行systemverilog仿真

如何用questasim进行systemverilog仿真

时间:10-02 整理:3721RD 点击:
刚接触systemverilog,最近在采用questasim10.1版本进行仿真时,发现貌似questasim不支持扩展类的操作?
代码如下:
`timescale 1ns/1ns
module sv_practice() ;
    class Tr;
        int c ;
        
        virtual function Tr copy();
            copy=new();
            copy_data(copy);
        endfunction
        
        virtual function void copy_data (input Tr t);
            t.c=c;
        endfunction
        
    endclass
   
    class BadTr extends Tr;
        int d ;
        
        virtual function Tr copy();
            BadTr bad;
            bad=new();
            copy_data(bad);
            return bad;
        endfunction
        
        virtual function void copy_data (input Tr t);
            BadTr bad;
            super.copy_data(t);
            $cast(bad,t);
            bad.d=d;
        endfunction
    endclass:BadTr
   
    initial
        begin
            Tr t1 ;
            Tr t2 ;
            t1 = new();
            t1.c = 11 ;
            t2 = t1.copy();
            $display ("t1.c=%0d",t1.c);
            $display ("t2.c=%0d",t2.c);
            
            BadTr t3 ;
            BadTr t4 ;
            t3 = new();
            t3.d = 55 ;
            t4 = t3.copy();
            $display ("t3.d=%0d",t3.d);
            $display ("t4.d=%0d",t4.d);
        end
endmodule
这段代码在用questasim进行编译的时候,在“BadTr t3”附近报错,报告如下:
** Error: D:/Project/self-study/SV/copy/sv_practice.sv(47): Illegal declaration after the statement near line '43'.  Declarations must precede statements.  Look for stray semicolons.
这是什么意思?我quesasim用的是破解版的。

自答一下吧,终于知道在一个块中,一定要先声名,也就是说要把initial块改为
initial
        begin
            Tr t1 ;
            Tr t2 ;
            BadTr t3 ;
            BadTr t4 ;
            ...
这样就过啦!希望有一样问题的兄弟可以参考!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top