questasim常见问题解决方案
问题描述一:
** Error: (vlog-13069) E:/questasim_project/UVM_platform/my_driver.sv(5): near "uvm_driver": syntax error, unexpected IDENTIFIER.
** Error: E:/questasim_project/UVM_platform/my_driver.sv(5): Error in class extension specification.

解决方案:
在代码开头将UVM的库文件添加进去

问题描述二:
** Error: (vlog-13069) E:/questasim_project/UVM_platform/my_driver.sv(10): near "extends": syntax error, unexpected extends, expecting function or task or "SystemVerilog keyword 'pure'".

解决方案:
这是将task定义在class的外部了,可能造成的原因是,在class内部声明了task,在外部进行task的功能定义,但是在class内部生命task时,没有加extern前缀,导致questasim不会再class外部去寻找对应的task定义。

如上在class中的task前加上extern即可。

问题描述三:
** Error: ** while parsing file included at E:/questasim_project/UVM_platform_2/my_agent.sv(6)
** while parsing file included at my_monitor.sv(2)
** at my_transaction.sv(5): Typedef 'my_transaction' multiply defined.

解决方案:
某个函数被多重定义了,报错while parsing file included,譬如出现如下架构:

driver要用到transaction.sv,monitor也要用到transaction.sv,因此我们在driver.sv和monitor.sv中都在一开始`include "transaction.sv",这对于driver和monitor来说都不会报错,但是当我们在env中把driver.sv和monitor.sv都include到env时,由于在driver和monitor都进行了`include "transaction.sv",所以对于env来说,transaction就被include了两次,也就是被定义了两次,重定义了,所以虽然driver和monitor不会报错,但是env.sv会报错。
这种重复编译、重复定义的问题,可以通过在被include的文件首尾加入:
首尾加入这三句话后,在这中间的代码如果被编译过一次,那么哪怕在多个文件都include了它,也只会编译一次,就不会出现重复定义的情况了。