0

我正在尝试将 Origen-Sim 连接到旧版模拟流程中,并且在让套接字连接正常工作时遇到了一些麻烦。

出于调试目的,我在simulator.rb 中添加了一个新条目,允许我手动启动模拟器:

    when :legacy
    #cmd = "sim na_origen2 -makeopts SOCKET='#{socket_id}
    cmd = "echo 'hi!'"
    puts(socket_id)

然后我用 +socket+{socket_id} 运行我的模拟器

我所看到的:

当我不传入套接字时,模拟器会因以下原因而死:

ERROR: No socket ID given to the simulator
ERROR: Couldn't connect to Origen app!
ncelab: *F,INTERR: INTERNAL EXCEPTION

和 Origen 只是挂起 - 正如预期的那样。

当我确实通过套接字时,我得到了同样的错误,但是Origen 然后在套接字上看到了一些东西但是崩溃了。EOM 错误。

完全披露 - 因为我正在运行一个遗留流程,所以我使用的是 ncsim 而不是 irun。为此,我使用 -loadpli libpli.so:origen_startup 运行。我想也许代码中的引导程序导致它运行两次,但将其注释掉没有效果:

/// Bootstrap vector, make the simulator execute init() on startup
// void (*vlog_startup_routines[])(void) = { init, 0 };

调试指导表示赞赏!也许一些简单的代码来测试连接?

来自 Origen 的错误日志:

/tmp/1699615188824304081984.sock
lib/ruby/gems/2.1.0/gems/bundler-1.16.1/lib/bundler/compatibility_guard.rb:3:in `require': no such file to load -- rubygems (LoadError)
    from lib/ruby/gems/2.1.0/gems/bundler-1.16.1/lib/bundler/compatibility_guard.rb:3
    from lib/ruby/gems/2.1.0/gems/bundler-1.16.1/lib/bundler/shared_helpers.rb:3:in `require'
    from lib/ruby/gems/2.1.0/gems/bundler-1.16.1/lib/bundler/shared_helpers.rb:3
    from lib/ruby/gems/2.1.0/gems/bundler-1.16.1/lib/bundler/setup.rb:3:in `require'
    from lib/ruby/gems/2.1.0/gems/bundler-1.16.1/lib/bundler/setup.rb:3
[INFO]       59.654[59.649]  || Generating...  output/example.txt
[INFO]       59.743[0.088]   ||  
[INFO]       59.743[0.000]   || Pattern vectors: 0         
[INFO]       59.743[0.000]   || Execution time : 0.000000
[INFO]       59.743[0.000]   || ----------------------------------------------------------------------
[INFO]       59.744[0.001]   || *** NEW FILE *** To save it:  cp output/example.txt .ref/example.txt
[INFO]       59.744[0.000]   || **********************************************************************

COMPLETE CALL STACK
-------------------
Connection reset by peer @ io_fillbuf - fd:11 
origen_sim/lib/origen_sim/simulator.rb:367:in `readline'
origen_sim/lib/origen_sim/simulator.rb:367:in `get'
origen_sim/lib/origen_sim/simulator.rb:486:in `sync_up'
origen_sim/lib/origen_sim/simulator.rb:374:in `pattern_generated'
origen/generator/pattern.rb:372:in `block in pattern_close'
origen/generator/pattern.rb:370:in `each'
origen/generator/pattern.rb:370:in `pattern_close'
origen/generator/pattern.rb:199:in `pattern_wrapper'
origen/generator/pattern.rb:133:in `block (10 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:107:in `block (9 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:105:in `block (8 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:103:in `block (7 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:101:in `block (6 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:99:in `block (5 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:97:in `block (4 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:95:in `block (3 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:93:in `block (2 levels) in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:91:in `block in create'
origen/generator/pattern.rb:8:in `invoke'
origen/generator/pattern.rb:89:in `create'
pattern/example.rb:1:in `<top (required)>'
origen/generator/job.rb:148:in `load'
origen/generator/job.rb:148:in `run'
origen/generator.rb:31:in `generate_pattern'
origen/application/runner.rb:98:in `block (3 levels) in launch'
origen/application/runner.rb:84:in `each'
origen/application/runner.rb:84:in `block (2 levels) in launch'
origen/application/runner.rb:140:in `record_invocation'
origen/application/runner.rb:75:in `block in launch'
origen/file_handler.rb:392:in `preserve_state'
origen/application/runner.rb:18:in `launch'
origen/commands/generate.rb:61:in `block in <top (required)>'
origen/commands/generate.rb:41:in `_with_doc_tester'
origen/commands/generate.rb:54:in `<top (required)>'
origen/commands.rb:233:in `require'
origen/commands.rb:233:in `<top (required)>'
.origen/gems/ruby/2.1.0/gems/origen-0.31.0/bin/origen:184:in `require'
.origen/gems/ruby/2.1.0/gems/origen-0.31.0/bin/origen:184:in `<top (required)>'


APPLICATION CALL STACK
----------------------
Connection reset by peer @ io_fillbuf - fd:11 
pattern/example.rb:1:in `<top (required)>'
origen_sim/lib/origen_sim/simulator.rb:361:in `write': Broken pipe (Errno::EPIPE)
    from origen_sim/lib/origen_sim/simulator.rb:361:in `put'
    from origen_sim/lib/origen_sim/simulator.rb:485:in `sync_up'
    from origen_sim/lib/origen_sim/simulator.rb:514:in `peek'
    from origen_sim/lib/origen_sim/simulator.rb:494:in `error_count'
    from origen_sim/lib/origen_sim/simulator.rb:610:in `on_origen_shutdown'
    from .origen/gems/ruby/2.1.0/gems/origen-0.31.0/bin/origen:229:in `each'
    from .origen/gems/ruby/2.1.0/gems/origen-0.31.0/bin/origen:229:in `ensure in <top (required)>'
    from .origen/gems/ruby/2.1.0/gems/origen-0.31.0/bin/origen:230:in `<top (required)>'
4

1 回答 1

1

没有什么比输入一个大问题来让大脑工作更重要的了。看来问题是 libpli.so:origen_startup 中的引导函数调用在细化和模拟期间都被调用。

通过向 origen.c 添加引导函数解决了这个问题:

PLI_INT32 bootstrap(p_cb_data data) {
      vpi_printf("Bootstrap Called!\n");
      init();
      return 0;
}

然后将 -libpli 更改为 libpli.so:bootstrap

这似乎解决了这个问题,虽然我还没有完全工作。一旦我得到其他一切工作,我将提交一份 PR。

于 2018-02-17T17:29:24.077 回答