标识以下显示语句将写入的文件

时间:2013-05-07 15:18:34

标签: verilog

//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

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

  

初​​始
      开始
      handle1 = $ fopen(“f1.out”); // 32'h 0000 0002
      handle2 = $ fopen(“f2.out”); // 32'h 0000 0004
      handle3 = $ fopen(“f3.out”); // 32'h 0000 0008
      结束

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

1 个答案:

答案 0 :(得分:1)

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

根据Verilog LRM:

  

多通道描述符mcd是一个32位的reg,其中设置了一个指示打开哪个文件的位。 mcd的最低有效位(位0)始终指标准输出。输出被定向到两个或多个使用多通道描述符打开的文件,通过将它们的mcds按位OR运或写入结果值。

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

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

如果查看问题中传递给$fdisplay的值,您应该能够确定哪些位被设置,以及哪些文件(包括stdout)将被写入。