0
//File output with multi-channel descriptor
module test;

integer handle1,handle2,handle3; //file handles

//open files
initial
begin
   handle1 = $fopen("f1.out");
   handle2 = $fopen("f2.out"); 
   handle3 = $fopen("f3.out"); 
end

//Display statements to files
initial
begin
//File output with multi-channel descriptor
   #5;
   $fdisplay(4, "Display Statement # 1");
   $fdisplay(15, "Display Statement # 2");
   $fdisplay(6, "Display Statement # 3");
   $fdisplay(10, "Display Statement # 4");
   $fdisplay(0, "Display Statement # 5");
end
endmodule

我一直在寻找这个问题的正确解释。我所知道的是,我必须从第一个“初始”块开始——

初始
开始
句柄1 = $fopen("f1.out"); //32'h 0000 0002
handle2 = $fopen("f2.out"); //32'h 0000 0004
handle3 = $fopen("f3.out"); //32'h 0000 0008
结束

在此之后,我不知道如何找到这些显示语句将写入的文件。需要知道如何解决此类问题。谢谢。

4

1 回答 1

1

每次调用都$fopen返回一个 32 位多通道描述符 (mcd)

根据 Verilog LRM:

多通道描述符mcd是一个 32 位寄存器,其中设置了一个位,指示打开了哪个文件。mcd 的最低有效位(位 0)总是指标准输出。通过按位或将它们的 mcd 组合在一起并写入结果值,将输出定向到使用多通道描述符打开的两个或多个文件。

因此,在您的示例中打开 3 个文件后,您可以通过执行以下操作将输出定向到多个文件:

$fdisplay(handle1 | handle2, "Write to f1.out and f2.out");
$fdisplay(handle1 | 32'h00000001, "Write to f1.out and stdout");

如果您查看问题中传递给的值$fdisplay,您应该能够确定设置了哪些位,因此将写入哪些文件(包括标准输出)。

于 2013-05-07T15:38:30.160 回答