微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 关于systemverilog仿真的一个奇怪问题

关于systemverilog仿真的一个奇怪问题

时间:10-02 整理:3721RD 点击:
今天在用questasim仿真systemverilog语言写的平台时,发现一个奇怪的问题如下:
class A ;
int i ;
endclass
class B ;
A a0 ;
int j ;
task run();
A a1 ;
a0=new ();
a1=new ();
endtask
endclass
这种写法是正常的。但是如果
把task中的头二句换一下,就会报错。即
class A ;
int i ;
endclass
class B ;
A a0 ;
int j ;
task run();
a0=new ();
A a1 ;
a1=new ();
endtask
endclass
这个时候综合就会报错,
** Error: D:/Project/self-study/SV/class_in_class/class_in_class.sv(11): near "a1": syntax error, unexpected IDENTIFIER, expecting #
** Error: D:/Project/self-study/SV/class_in_class/class_in_class.sv(12): (vlog-2730) Undefined variable: 'a1'.
请问这是什么原因?
是因为在第二种情况下,a1的new函数会和a0一起提前运行的原因吗?感觉好奇怪

A a1 ;声明必须在task头部,执行语句的前面。

多谢指导!

先声明变量,再执行其他运行语句,基本规则

如同前面的回覆,
宣告變數必須要在 begin ... end block 的開頭,
所以像是下列寫法也可以:
class A ;
int i ;
endclass
class B ;
A a0 ;
int j ;
task run();
begin
a0=new ();
begin : use_a1
A a1 ;
a1=new ();
end
end
endtask
endclass

声明在前

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

网站地图

Top