我怀疑我在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
答案 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