@SIM_set_prompt ("nas"); // Machine configuration read-configuration "common.conf" #ifdef ELF load-kernel common.exe #else load-veri-file mem.image #endif // ifdef ELF #ifdef ONE_THREAD pdisable -all penable th00 #elif defined(TWO_THREADS) pdisable -all penable th00 penable th01 #elif defined(FOUR_THREADS) pdisable -all penable th00 penable th01 penable th02 penable th03 #endif // ifdef ONE_THREAD // get symbol address @def get_addr(name): cmd= "/usr/bin/perl -ne 'if(/%s\s+(\w+)/){ print$1;last}' symbol.tbl " % name addr_str= os.popen(cmd, "r").readline(); if not addr_str: addr = 0 else: addr = string.atol(addr_str,16) return addr // Script to single step simics //@def ss_n(thid, num) : // th_str= "l%d" % thid // while (num > 0) : // sstepi_cmd_RS(th_str) // num = num-1; // Script to step simics and print regs for N cycles //@def ss_and_pr(thid, num) : // th_str= "l%d" % thid // a_str = "-all" // while (num > 0) : // sstepi_cmd_RS(th_str) // pregs_cmd_RS(thid,a_str) // num = num-1; // riesling shortcut //@arch00 = rsys.getCpuPtr(0).getCorePtr(0).getStrandPtr(0).getArchStatePtr() //@mmu00 = rsys.getCpuPtr(0).getCorePtr(0).getStrandPtr(0).getMmuPtr() // if defined, step through instructions silently, also turn off all debugging // output. #ifdef STEP_QUIET @RS_set_quiet(1) @conf.socket0.setvar = "debug_level=0" @conf.socket0.setvar = "tlb_debug=0" @conf.swvmem0.setvar = "debug_level=0" #endif // ifdef STEP_QUIET #if defined(MOM) @conf.mom0.call= "init-anno-sas" @conf.mom0.setvar= "itlb0_size_v=0" @conf.mom0.setvar= "dtlb0_size_v=0" @conf.mom0.setvar= "SKIP_UNCACHED=0" @conf.mom0.setvar= "en_thrd_prio_v=0" #ifdef ONE_THREAD @conf.mom0.setvar= "thread_num_per_proc_v=1" @conf.mom0.setvar= "pipe_num_per_proc_v=1" #elif defined(TWO_THREADS) @conf.mom0.setvar= "thread_num_per_proc_v=2" #elif defined(FOUR_THREADS) @conf.mom0.setvar= "thread_num_per_proc_v=4" #else @conf.mom0.setvar= "thread_num_per_proc_v=8" #endif // ifdef ONE_THREAD #if defined(L15) @conf.mom0.setvar= "l15_cache_v=1" @conf.mom0.setvar= "l2_obuf_size_v=30" @conf.mom0.setvar= "l2_obuf_watermark_v=22" #endif // if defined(L15) #if defined(L15_RQ_FIRST_PACKET) @conf.mom0.setvar= "l15_rq_first_packet_v=1" #endif // if defined(L15_RQ_FIRST_PACKET) #if defined(L2_ALWAYS_HIT) @conf.mom0.setvar= "l2_always_hit_v=1" #endif // if defined(L2_ALWAYS_HIT) #if defined(SINGLE_IREFILL) @conf.mom0.setvar= "single_irefill_v=1" #endif // if defined(SINGLE_IREFILL) #if defined(FETCH_ACROSS_HALF_LINE) @conf.mom0.setvar= "fetch_across_half_line_v=1" #endif // if defined(FETCH_ACROSS_HALF_LINE) #if defined(MOM_RSLT) @conf.mom0.setvar= "PRINT_RSLT=1" #endif // if defined(MOM_RSLT) #if defined(MOM_SHOW_IB) || defined(MOM_DEBUG_PIPE) @conf.mom0.setvar= "DEBUG_PIPE=1" #endif // if defined(MOM_SHOW_IB) || defined(MOM_DEBUG_PIPE) #if defined(MOM_DEBUSSY) @conf.mom0.setvar= "DEBUG_DEBUSSY=1" #endif // if defined(MOM_DEBUSSY) #if defined(THREAD_STATUS_ADDR) @conf.mom0.thread_status= THREAD_STATUS_ADDR #endif // if defined(THREAD_STATUS_ADDR) #if defined(SP7) @conf.mom0.setvar= "proc_num_v=8" #elif defined(SP6) @conf.mom0.setvar= "proc_num_v=7" #elif defined(SP5) @conf.mom0.setvar= "proc_num_v=6" #elif defined(SP4) @conf.mom0.setvar= "proc_num_v=5" #elif defined(SP3) @conf.mom0.setvar= "proc_num_v=4" #elif defined(SP2) @conf.mom0.setvar= "proc_num_v=3" #elif defined(SP1) @conf.mom0.setvar= "proc_num_v=2" #elif defined(SP0) @conf.mom0.setvar= "proc_num_v=1" #endif // if defined(SP7) @conf.mom0.PASS= get_addr('\.TRAPS\.T0_GoodTrap_0x100') @conf.mom0.FAIL= get_addr('\.TRAPS\.T0_BadTrap_0x101') @conf.mom0.HPASS= get_addr('\.HTRAPS\.HT0_GoodTrap_0x100') @conf.mom0.HFAIL= get_addr('\.HTRAPS\.HT0_BadTrap_0x101') @conf.mom0.DC_ON= get_addr('mom_enable_l1d') @conf.mom0.DC_OFF= get_addr('mom_disable_l1d') @conf.mom0.IC_ON= get_addr('mom_enable_l1i') @conf.mom0.IC_OFF= get_addr('mom_disable_l1i') @conf.mom0.T1PASS= get_addr('\.RED\.good_trap') @conf.mom0.T1FAIL= get_addr('\.RED\.bad_trap') @conf.mom0.APASS= get_addr('\.RED\.good_trap') @conf.mom0.AFAIL= get_addr('\.RED\.bad_trap') #if defined(THREAD_MASK) penable -mask=THREAD_MASK @conf.mom0.setvar= thread_mask_v=THREAD_MASK #endif // if defined(THREAD_MASK) #if defined(MOM_STAT) @conf.mom0.setvar= "THREAD_BASED_STAT=1" @conf.mom0.setvar= "print_all_mom_stat=1" @conf.mom0.setvar= "START_SIM_IMM=1" @conf.mom0.start_cycle= 1 run 200 @conf.mom0.reset_all_stat= 1 #else @conf.mom0.setvar= "START_SIM_IMM=1" @conf.mom0.start_cycle= 1 #endif // if defined(MOM_STAT) #ifndef MOM_STEP #if defined(MAX_CYCLE) run MAX_CYCLE #else run 1000000 #endif // if defined(MAX_CYCLE) quit #endif // ifndef MOM_STEP #else // if defined(MOM) #if defined(CPU) @conf.swvmem0.cpu = CPU #else @conf.swvmem0.cpu = 1 #endif // intend to replace THREADS+SPx, THREAD_MASK=10xxxx01 is equivalent to // 'SP0 SP3 THREADS=10000001' #if defined(THREAD_MASK) || defined(THREAD_MASK1) || defined(THREAD_MASK2) || defined(THREAD_MASK3) #if defined(THREAD_MASK) @conf.swvmem0.thread_mask0 = THREAD_MASK #else @conf.swvmem0.thread_mask0 = 0 #endif #if defined(THREAD_MASK1) @conf.swvmem0.thread_mask1 = THREAD_MASK1 #else @conf.swvmem0.thread_mask1 = 0 #endif #if defined(THREAD_MASK2) @conf.swvmem0.thread_mask2 = THREAD_MASK2 #else @conf.swvmem0.thread_mask2 = 0 #endif #if defined(THREAD_MASK3) @conf.swvmem0.thread_mask3 = THREAD_MASK3 #else @conf.swvmem0.thread_mask3 = 0 #endif #else // THREADS must work with SPx to set proper CMP registers #if defined(THREADS) @conf.swvmem0.threads = THREADS #endif #if defined(IGNORE_SP0) || !defined(SP0) @conf.swvmem0.ignore_sparc =+ 0 #endif // if defined(IGNORE_SP0) || !defined(SP0) #if defined(IGNORE_SP1) || !defined(SP1) @conf.swvmem0.ignore_sparc =+ 1 #endif // if defined(IGNORE_SP1) || !defined(SP1) #if defined(IGNORE_SP2) || !defined(SP2) @conf.swvmem0.ignore_sparc =+ 2 #endif // if defined(IGNORE_SP2) || !defined(SP2) #if defined(IGNORE_SP3) || !defined(SP3) @conf.swvmem0.ignore_sparc =+ 3 #endif // if defined(IGNORE_SP3) || !defined(SP3) #if defined(IGNORE_SP4) || !defined(SP4) @conf.swvmem0.ignore_sparc =+ 4 #endif // if defined(IGNORE_SP4) || !defined(SP4) #if defined(IGNORE_SP5) || !defined(SP5) @conf.swvmem0.ignore_sparc =+ 5 #endif // if defined(IGNORE_SP5) || !defined(SP5) #if defined(IGNORE_SP6) || !defined(SP6) @conf.swvmem0.ignore_sparc =+ 6 #endif // if defined(IGNORE_SP6) || !defined(SP6) #if defined(IGNORE_SP7) || !defined(SP7) @conf.swvmem0.ignore_sparc =+ 7 #endif // if defined(IGNORE_SP7) || !defined(SP7) #endif // if defined(THREAD_MASK) #if defined(THREAD_STATUS_ADDR) @conf.swvmem0.thread_status= THREAD_STATUS_ADDR #endif // if defined(THREAD_STATUS_ADDR) #if defined(SAS_RUN) //#if defined(THREAD_MASK) //penable -mask=THREAD_MASK //#else //pdisable -all //penable th00 //#endif // if defined(THREAD_MASK) // we will rely on the good/bad_trap symbols in symbol.table to determine // proper good/bad trap setting //#if !defined(SAS_IACT) || !(defined(RTL) || defined(PLI_RUN)) //// set the breakpoints only in interactive mode or batch mode ////@conf.swvmem0.good_trap =+ get_addr('\.TRAPS\.T0_GoodTrap_0x100') ////@conf.swvmem0.good_trap =+ get_addr('\.TRAPS\.T1_GoodTrap_0x100') ////@conf.swvmem0.good_trap =+ get_addr('\.HTRAPS\.HT0_GoodTrap_0x100') ////@conf.swvmem0.good_trap =+ get_addr('\.HTRAPS\.HT0_GoodTrap_0x1a0') ////@conf.swvmem0.bad_trap =+ get_addr('\.TRAPS\.T0_BadTrap_0x101') ////@conf.swvmem0.bad_trap =+ get_addr('\.TRAPS\.T1_BadTrap_0x101') ////@conf.swvmem0.bad_trap =+ get_addr('\.HTRAPS\.HT0_BadTrap_0x101') ////@conf.swvmem0.bad_trap =+ get_addr('\.HTRAPS\.HT0_BadTrap_0x1a1') //@conf.swvmem0.good_trap =+ get_addr('\.HTRAPS\.good_trap') //@conf.swvmem0.bad_trap =+ get_addr('\.HTRAPS\.bad_trap') //#endif #if defined(MAX_CYCLE) @conf.swvmem0.max_cycle = MAX_CYCLE #endif // if defined(MAX_CYCLE) // if not to go into interactive mode, then let it run until hit a breakpoint #if !defined(SAS_IACT) run quit #endif // if !defined(SAS_IACT) #elif defined(RTL) || defined(PLI_RUN) pli-run -1 quit #endif // if-else defined(SAS_RUN) #endif // if-else defined(MOM)