如何修复Verilog :: VCD :: Writer错误:找不到对象方法addSignal?

时间:2017-12-12 20:16:11

标签: perl import cpan

我怀疑我在perl中输入了一个错误。

请不要让我直接转储vcd。我知道如何转储,但我只是想问这个。

在perl中有一个模块Verilog :: VCD :: Writer来编写一个vcd文件。但是,当我复制其SYNOPSIS代码进行尝试时,它总是会引发错误:

  

无法通过包找到对象方法“addSignal”   在test.pl第10行的“Verilog :: VCD :: Writer”。

SYNOPSIS在addSignal之前调用addComment和addModule,因此我的安装应该没有问题。 addSignal是Verilog / vcd / writer / Module.pm中定义的函数,另外两个是在Verilog / vcd / writer.pm中定义的。即使我添加Verilog :: VCD :: Writer:Module,仍然是调试器去包装Writer找到“addSignal”方法。

如果我以这种方式调用“addSignal”函数:

$writer->Verilog::VCD::Writer::Module::addSignal("TX",7,0);
  

无法通过包找到对象方法“signals_push”   “Verilog :: VCD :: Writer”来自   /home/cqsun/lib/perl5/lib/site_perl/5.18.2/Verilog/VCD/Writer/Module.pm   第41行。

Module.pm在hash中定义了signals_push,显然调试器没有找到它。

我怀疑有什么不对,但我不知道它在哪里。

此软件包的网页为http://search.cpan.org/~jvs/Verilog-VCD-Writer-0.002/lib/Verilog/VCD/Writer.pm

1 个答案:

答案 0 :(得分:0)

这是一个文档错误。

POD的SYNOPSIS部分中的代码存在语法错误。这是一个固定版本的代码,它运行没有错误,并生成一个VCD输出文件:

use Verilog::VCD::Writer;

my $writer = Verilog::VCD::Writer->new(timescale=>'1 ns',vcdfile=>"test.vcd");
$writer->addComment("Author:Vijayvithal");

my $top = $writer->addModule("top"); # Create toplevel module
my $TX  = $top->addSignal("TX",7,0); #Add Signals to top
my $RX  = $top->addSignal("RX",7,0);

my $dut = $writer->addModule("DUT");  #Create SubModule
$dut->dupSignal($TX,"TX",7,0); #Duplicate signals from Top in submodule
$dut->dupSignal($RX,"RX",7,0);

$writer->writeHeaders(); # Output the VCD Header.
$writer->setTime(0); # Time 0
$writer->addValue($TX,0); # Record Transition
$writer->addValue($RX,0);
$writer->setTime(5); # Time 1ns
$writer->addValue($TX,1);
$writer->addValue($RX,0);

代码使用addSignal的错误对象句柄;它需要使用$top而不是$writer

我上传了您打开的错误报告的补丁: https://rt.cpan.org/Ticket/Display.html?id=123724