0

我正在使用 VLAB MPC5xxx 工具箱。

我有一个运行脚本来控制我的模拟,它以通常的方式加载平台,然后运行它:

import vlab
import os
import sysc

image_path = os.path.join('o5e',
                          'firmware.open5xxxecu-e6009bbcfcd1',
                          'bin', 'o5e_dbg.elf')

vlab.load('mpc.mpc5674f.sim', args=['--testbench=o5e_testbench', 
                                    "--image=%s" % image_path,
                                    "--debugger-config=GHS_MULTI",
                                    "--trace=+src:sc_report",
                                    ])
vcd_sink = vlab.trace.sink.vcd("mpc.mpc5674f.sim.vcd")
vlab.add_trace("mpc5674f.PBRIDGE.EDMA_B", sink=vcd_sink)

for i in range(32):
        vlab.add_trace("mpc5674f.PBRIDGE.ETPU.CH_OUT_A[%d]" % i, sink=vlab.trace.sink.console)

vlab.run(11, "ms", blocking=True)
vlab.exit()

我想给这个运行脚本一个参数来打开核心中的跟踪,我知道你可以通过在核心上设置跟踪属性来做到这一点。而且我知道我可以使用 python 的 optparse 读取脚本的选项。

我遇到的问题是您必须在详细说明结束之前设置属性,但是在详细说明之前我可以访问模拟的唯一地方是在测试台中......但似乎没有办法传递参数(例如脚本参数)到测试台。

我应该如何将脚本中的参数传递到测试台中,以便有条件地打开或不打开核心跟踪?

4

1 回答 1

1

所以,我认为答案是:

1)不要尝试将测试台用于与……测试台无关的事情

2)使用“阶段断点”来做需要在模拟中的特定阶段发生的事情

例如:

from optparse import OptionParser

parser = OptionParser()

parser.add_option("--core-instrumentation", dest="core_instrumentation",
                  action = "store_true",
                  help="turn on core instrumentation")

(options, args) = parser.parse_args()

if options.core_instrumentation:
    vlab.add_phase_breakpoint("before_end_of_elaboration", 
                              action = lambda bp: vlab.write_attribute("mpc5467f.Core0.log_filter","+instr"))

image_path = os.path.join('o5e',
                      'firmware.open5xxxecu-e6009bbcfcd1',
                      'bin', 'o5e_dbg.elf')

vlab.load('mpc.mpc5674f.sim', args=['--testbench=o5e_testbench', 
                                    "--image=%s" % image_path,
                                    "--debugger-config=GHS_MULTI",
                                    ])
vcd_sink = vlab.trace.sink.vcd("mpc.mpc5674f.sim.vcd")
vlab.add_trace("mpc5674f.PBRIDGE.EDMA_B", sink=vcd_sink)

for i in range(32):
        vlab.add_trace("mpc5674f.PBRIDGE.ETPU.CH_OUT_A[%d]" % i, sink=vlab.trace.sink.console)

vlab.run(11, "ms", blocking=True)
vlab.exit()
于 2014-08-07T04:15:09.970 回答