当我尝试用vlog编译时,我得到了错误vlog,而vcs,让我们不费吹灰之力地通过它。任何人都有解决这个问题的窍门。
function foo_class::error(string expression, string filename, int linenumber);
foo_base::foo_base_error(expression, filename, linenumber);
endfunction发布于 2014-07-24 16:27:31
我假设foo_class是foo_base的子级,在这种情况下使用super.foo_base_error而不是foo_base::foo_base_error
要调用非静态方法,它需要属于一个对象.不能直接从类范围调用它。静态方法可以直接从类范围调用。
您的VCS日志文件中应该有警告。模拟器可能是宽容的,或者使foo_base_error静态化,或者在内部将foo_base::转换为super.。questaSim在遵循LRM方面更加严格。
发布于 2014-07-24 16:14:05
这是2012年SV标准在第8.10节静态方法中所述:
静态方法不能访问非静态成员(类属性或方法),但它可以直接访问静态类属性或调用同一类的静态方法。
您似乎试图访问不同类的静态方法,这与LRM的措辞背道而驰。如果foo_base是foo_class的基类,那么foo_class也包含foo_base_error(...)函数。尝试将其更改为:
function foo_class::error(string expression, string filename, int linenumber);
foo_class::foo_base_error(expression, filename, linenumber);
endfunction如果不是,那你就倒霉了。与QuestaSim相比,VCS对静态方法的解释似乎更为宽松。
https://stackoverflow.com/questions/24935691
复制相似问题