我需要将 SV 模拟环境从 Questa 迁移到 Xcelium 20.9。
我在使用 xmvlog
编译文件时遇到问题,而使用 vlog
则没有问题。
这就是我所做的。
确保工具链已正确安装:我从 edaplayground 运行了这个简单的示例。效果很好。我还能够在 Simvision 中看到波浪
尝试更复杂的设计,其中包括一些类和包。
这是我无法继续的地方:我无法编译包。我尝试简化文件并提取一个最小的非工作示例。
该文件如下所示:
package test_pkg;
task wait (ref logic clock, int cycl_num);
for (int k = 0; k < cycl_num; k++) begin
@(posedge clock);
end
endtask : wait
endpackage
所以,一个任务的简单包。
运行xrun test/test_pkg.sv
:
这里有很多错误。我注意到的一件事是,在任务声明的开头添加 void
可以解决其中的一些问题。
问题出在任务定义中,因为如果删除它我就可以编译。
我还尝试了 xmvlog 的以下选项
-sv Force SystemVerilog compilation
-sysv2005 Only enable SV-2005 and earlier keywords
-sysv2009 Only enable SV-2009 and earlier keywords
但运气不佳。 知道这里出了什么问题吗?如何指定正确的 SystemVerilog 版本?
最佳答案
问题出在您的代码上,而不是 Cadence 模拟器上。
一个问题是 wait
是 Verilog 关键字,不应该将其用作 task
名称。请参阅 IEEE Std 1800-2017,第 9.4 节程序时序控制;它也是 1364 标准的一部分。 Questa 应该给你一个错误。
您需要将名称更改为其他名称,例如wait_clk
。您还需要在 endtask
关键字之后更改它。
另一个问题是 Cadence 使用 ref
也会给我带来错误。
task wait_clk (ref logic clock, int cycl_num);
|
xmvlog: *E,REFANA : reference argument is illegal inside static task-function declaration.
task wait_clk (ref logic clock, int cycl_num);
|
xmvlog: *E,REFANA : reference argument is illegal inside static task-function declaration.
我认为您不需要这些输入作为引用。如果是这种情况,那么您可以简单地将其删除:
package test_pkg;
task wait_clk (logic clock, int cycl_num);
for (int k = 0; k < cycl_num; k++) begin
@(posedge clock);
end
endtask : wait_clk
endpackage
但是,如果您确实需要引用
,则可以使用nchelp
获取更多详细信息:
nchelp xmvlog REFANA
xmhelp: 20.09-s009: (c) Copyright 1995-2021 Cadence Design Systems, Inc.
xmvlog/REFANA =
A SystemVerilog reference argument, declared in the formal argument list
of a task or function, must always be an automatic variable. The enclosing
task or function declaration must therefore use the 'automatic' keyword
to promote all of its formal arguments into automatic variables.
如果您只想将clock
作为ref
:
package test_pkg;
task automatic wait_clk (ref logic clock, input int cycl_num);
for (int k = 0; k < cycl_num; k++) begin
@(posedge clock);
end
endtask : wait_clk
endpackage
您不应将 void
用于任务
。这样做并没有真正解决任何问题;它只是让编译器走上了不同的道路。
关于verilog - 如何了解Cadence XMVLOG编译器支持哪些SystemVerilog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67382417/