Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / cpus / vonk / n2 / exe / nas / src / n2_common.rs
@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= "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
#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)
// 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(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)