前回に引き続いて、OpenSPARC T1のシミュレーションを走らせていたが、それっぽい動作をしたものの、イマイチ有益なログを出さずにシミュレーションが終了してしまった。
$ tree . . ├── bypass_win:model_core1:core1_mini:0 │ ├── diag.s │ ├── efuse.img │ ├── flist │ ├── history.sims │ ├── perf.log │ ├── raw_coverage │ ├── sim.log │ ├── sim.perf.log │ ├── sim_command │ ├── sims.log │ ├── spd_single_dimm.data │ ├── spd_stack_dimm.data │ ├── status.log │ ├── transcript │ └── vlog.log ├── flist ├── history.sims ├── ihit_sameset:model_core1:core1_mini:0 │ ├── sim_command │ └── sims.log ├── imiss_sameset:model_core1:core1_mini:0 ├── lock ├── master_diaglist.core1_mini ├── sims.log └── tre ├── sims.iver └── sims.tver_0
シミュレーション中に大量のエラーを出しているのが気になる。
# ** Error (suppressible): (vsim-12023) /home/masayuki/work/opensparc/t1//verif/env/cmp/ciop_iob.v(328): Cannot execute undefined system task/function '$iob_jdriver' # ** Error (suppressible): (vsim-12023) /home/masayuki/work/opensparc/t1//verif/env/cmp/bw_sys.v(99): Cannot execute undefined system task/function '$pc_trigger_event' # ** Error (suppressible): (vsim-12023) /home/masayuki/work/opensparc/t1//verif/env/cmp/ciop_iob.v(297): Cannot execute undefined system task/function '$iob_cdriver' # ** Error (suppressible): (vsim-12023) /home/masayuki/work/opensparc/t1//verif/env/cmp/pcx_stall.v(93): Cannot execute undefined system task/function '$pc_trigger_event' # ** Error (suppressible): (vsim-12023) /home/masayuki/work/opensparc/t1//verif/env/cmp/cpx_stall.v(100): Cannot execute undefined system task/function '$pc_trigger_event'
これはPLIを動かさないと駄目なのか。
$ ag pc_trigger_event tools/pli/veriuser.c 173: {usertask, 0, 0, 0, pc_trigger_call, 0, "$pc_trigger_event"},
- tools/pli/iop/iop_main.cpp
void pc_trigger_call() { switch(tf_getp(PC_TRIG_TY)){ case 1 :// check for event int low, high; long long pc; low = tf_getlongp(&high, PC_TRIG_PC); pc = high; pc <<= 32; pc |= low; if(pli_var.pc_event.hit_pc(pc)){ while(pli_var.pc_event.which_event()){ switch(pli_var.pc_event.one_event->type){ case 1 : pli_var.pc_event.print(PC_TRIG_TH, PC_TRIG_WD); break; case 2 : pli_var.pc_event.print(PC_TRIG_TH, PC_TRIG_WD); break; case 3 : pli_var.l2.vld_counter = pli_var.pc_event.one_event->wait; pli_var.l2.cpu = tf_getp(PC_TRIG_CP); pli_var.l2.cpu_invalid = 0; pli_var.l2.l2_bank = 0xf;//set four bank pli_var.l2.cpu_invalid = 0xff;//8 cpu pli_var.l2.cpu_invalid ^= tf_getp(PC_TRIG_AT); tf_putp(PC_TRIG_ST, 1);//start counter break; case WARMRST : pli_var.pc_event.set_warm(); break; case EXTINT : pli_var.pc_event.set_extint(pli_var.pc_event.one_event->wait); break; case TEMPTRIG : pli_var.pc_event.set_temptrig(pli_var.pc_event.one_event->wait); ...
PLI群も整備しないと、何が起きているのか分からないなあ。。。