我试图在同一个initial begin中生成多个QuestaSim 2021.3中的VCD文件(最新)。
我在QuestaSim用户手册中找到了这一节:

但是,我只能将"/hardcoded/path/ to /vcdfile.vcd“作为文件名传递,这对于单个VCD文件是正确的。
这是我的密码:
module adder(
input logic clk,
input logic rstn,
input logic [31:0] a, b,
output logic [31:0] sum
) ;
always_ff @ (posedge clk or negedge rstn)
if (!rstn) sum <=0;
else sum <= a + b;
endmodule: adder
module tb;
logic clk;
logic rstn;
logic [31:0] a, b;
logic [31:0] sum;
adder i_adder (
.clk (clk),
.rstn (rstn),
.a (a),
.b (b),
.sum (sum)
);
always begin
#1us clk = ~clk;
end
initial begin
string dump1 = "dump1.vcd";
string dump2 = "dump2.vcd";
$fdumpfile(dump1);
$fdumpvars(1, i_adder.a, dump1);
clk = 0;
rstn = 0;
a = 4;
b = 2;
#10us
rstn = 1;
#10us
$display("Sum: %d",i_adder.sum);
$fdumpoff(dump1);
$fdumpall(dump1);
$exit;
end没有导出VCD文件,QuestaSim抛出一个错误:
# ** Error (suppressible): (vsim-PLI-3111) $fdumpvars : Last argument must be a filename.
我有一个游乐场,它的代码在EdaPlayground上。
说清楚点,我试过:
$typename(dump1); // returns string
$typename("path/to/vcdfile.vcd"); // returns string因此,对于Questa,它们都是字符串,但第一个字符串不能传递给$fdumpvars()
发布于 2022-06-29 10:16:07
$fdumpvars不是标准的Verilog系统任务。它没有在IEEEST1800-2017中定义,这意味着它的行为是特定于实现它的供应商,即QuestaSim。
如果希望任务接受string变量类型作为参数,则应直接向供应商请求该功能。
也许其他人已经报告了这一点,并且有一个新版本的QuestaSim已经具备了这一特性。再一次,与供应商联系。
作为比较,用于转储VCD文件$dumpfile的标准Verilog任务确实接受string变量类型:
$dumpfile(dump1);https://stackoverflow.com/questions/72799240
复制相似问题