【问题标题】:How to fix Verilog::VCD::Writer error: Can't locate object method addSignal?如何修复 Verilog::VCD::Writer 错误:找不到对象方法 addSignal?
【发布时间】:2018-05-26 14:58:22
【问题描述】:

我怀疑我在 Perl 中犯了一个导入错误。

有一个 Perl 模块 Verilog::VCD::Writer 可以写入 VCD 文件。但是,当我复制其 SYNOPSIS 代码进行尝试时,它总是会引发错误:

无法通过包定位对象方法“addSignal” tester.pl 第 10 行的“Verilog::VCD::Writer”。

SYNOPSIS 在addSignal 之前调用addCommentaddModule,所以我的安装应该没有问题。 addSignalVerilog/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在哈希中定义了signals_push,显然调试器没有找到它。

我怀疑有问题,但我不知道它在哪里。

这个包的网页是http://search.cpan.org/~jvs/Verilog-VCD-Writer-0.002/lib/Verilog/VCD/Writer.pm

【问题讨论】:

    标签: perl cpan


    【解决方案1】:

    这是一个文档错误。

    POD 的 SYNOPSIS 部分中的代码存在一些问题。您看到的错误来自以下行:

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

    代码为addSignal 方法使用了错误的对象句柄。 $writerVerilog::VCD::Writer 模块的对象,它没有 addSignal 方法。但是,addSignalVerilog::VCD::Writer::Module 模块的一个方法。代码需要使用$top,而不是$writer

    下一行也有同样的问题:

    my $RX=$writer->addSignal("RX",7,0);
    

    最后,以下行有语法错误,因为它缺少分号后的注释分隔符(#):

    my $dut=$top->addModule("DUT");  Create SubModule
    

    这是一个固定版本的代码,它运行时没有错误并生成一个 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);
    

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


    此外,Create SubModule 评论似乎具有误导性。也许作者打算使用addSubModule 方法而不是addModule 方法。

    【讨论】:

    • 感谢您的帮助工具!
    • @MichaelSun:不客气。模块作者已在新版本 (0.004) 中修复此问题。
    猜你喜欢
    • 2020-02-23
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2017-10-15
    • 2021-11-01
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多