Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / src / nas,5.n2.os.2 / pfe / N2_Model.py
CommitLineData
86530b38
AT
1
2### N2_Model.py is automatically generated from
3### ss/api/pfe/bin/Bl_Model.py, do not modify N2_Model.py,
4### make necessary changes in ss/api/pfe/bin/Bl_Model.py instead.
5
6import Pfe_Tlb
7import Pfe_Model
8
9from SS_Break import *
10from Pfe_Tlb import Tte
11from Pfe_Conversion import *
12from Pfe_Assembler import asm
13
14import N2_Python
15import SS_Strand
16from SS_Strand import AsiState
17
18dis = N2_Python.dis
19
20SS_Strand.__asi_va__ = {}
21for i in range(0,8):
22 SS_Strand.__asi_va__['scratch'+chr(i+ord('0'))] = AsiState(0x20,i*8)
23 SS_Strand.__asi_va__['hscratch'+chr(i+ord('0'))] = AsiState(0x4f,i*8)
24
25SS_Strand.__asi_va__['strand_available'] = AsiState(0x41,0x00)
26SS_Strand.__asi_va__['strand_enable_status'] = AsiState(0x41,0x10)
27SS_Strand.__asi_va__['strand_enable'] = AsiState(0x41,0x20)
28SS_Strand.__asi_va__['strand_running'] = AsiState(0x41,0x50)
29SS_Strand.__asi_va__['strand_running_status'] = AsiState(0x41,0x58)
30SS_Strand.__asi_va__['strand_running_w1s'] = AsiState(0x41,0x60)
31SS_Strand.__asi_va__['strand_running_w1c'] = AsiState(0x41,0x68)
32SS_Strand.__asi_va__['xir_steering'] = AsiState(0x41,0x30)
33SS_Strand.__asi_va__['tick_enable'] = AsiState(0x41,0x38)
34
35SS_Strand.__asi_va__['intr_w'] = AsiState(0x73,0x0)
36
37SS_Strand.__asi_va__['pri_ctx0'] = AsiState(0x21,0x008)
38SS_Strand.__asi_va__['pri_ctx1'] = AsiState(0x21,0x010)
39SS_Strand.__asi_va__['sec_ctx0'] = AsiState(0x21,0x108)
40SS_Strand.__asi_va__['sec_ctx1'] = AsiState(0x21,0x110)
41
42SS_Strand.__asi_va__['lsu_ctr'] = AsiState(0x45,0x0)
43
44SS_Strand.__asi_va__['inst_tag_target'] = AsiState(0x50,0x00)
45SS_Strand.__asi_va__['inst_sfsr'] = AsiState(0x50,0x18)
46SS_Strand.__asi_va__['inst_tag_access'] = AsiState(0x50,0x30)
47SS_Strand.__asi_va__['inst_tlb_data_in_v'] = AsiState(0x54,0x000)
48SS_Strand.__asi_va__['inst_tlb_data_in_r'] = AsiState(0x54,0x400)
49
50SS_Strand.__asi_va__['data_tag_target'] = AsiState(0x58,0x00)
51SS_Strand.__asi_va__['data_sfsr'] = AsiState(0x58,0x18)
52SS_Strand.__asi_va__['data_sfar'] = AsiState(0x58,0x20)
53SS_Strand.__asi_va__['data_tag_access'] = AsiState(0x58,0x30)
54SS_Strand.__asi_va__['data_tlb_data_in_v'] = AsiState(0x5c,0x000)
55SS_Strand.__asi_va__['data_tlb_data_in_r'] = AsiState(0x5c,0x400)
56
57SS_Strand.__asi_va__['partition_id'] = AsiState(0x58,0x80)
58
59SS_Strand.__asi_va__['real_range0'] = AsiState(0x52,0x108)
60SS_Strand.__asi_va__['real_range1'] = AsiState(0x52,0x110)
61SS_Strand.__asi_va__['real_range2'] = AsiState(0x52,0x118)
62SS_Strand.__asi_va__['real_range3'] = AsiState(0x52,0x120)
63
64SS_Strand.__asi_va__['phys_offset0'] = AsiState(0x52,0x208)
65SS_Strand.__asi_va__['phys_offset1'] = AsiState(0x52,0x210)
66SS_Strand.__asi_va__['phys_offset2'] = AsiState(0x52,0x218)
67SS_Strand.__asi_va__['phys_offset3'] = AsiState(0x52,0x220)
68
69SS_Strand.__asi_va__['nuc_tsb_cfg0'] = AsiState(0x54,0x010)
70SS_Strand.__asi_va__['nuc_tsb_cfg1'] = AsiState(0x54,0x018)
71SS_Strand.__asi_va__['nuc_tsb_cfg2'] = AsiState(0x54,0x020)
72SS_Strand.__asi_va__['nuc_tsb_cfg3'] = AsiState(0x54,0x028)
73
74SS_Strand.__asi_va__['non_nuc_tsb_cfg0'] = AsiState(0x54,0x030)
75SS_Strand.__asi_va__['non_nuc_tsb_cfg1'] = AsiState(0x54,0x038)
76SS_Strand.__asi_va__['non_nuc_tsb_cfg2'] = AsiState(0x54,0x040)
77SS_Strand.__asi_va__['non_nuc_tsb_cfg3'] = AsiState(0x54,0x048)
78
79SS_Strand.__asi_va__['inst_tsb_ptr0'] = AsiState(0x54,0x050)
80SS_Strand.__asi_va__['inst_tsb_ptr1'] = AsiState(0x54,0x058)
81SS_Strand.__asi_va__['inst_tsb_ptr2'] = AsiState(0x54,0x060)
82SS_Strand.__asi_va__['inst_tsb_ptr3'] = AsiState(0x54,0x068)
83
84SS_Strand.__asi_va__['data_tsb_ptr0'] = AsiState(0x54,0x070)
85SS_Strand.__asi_va__['data_tsb_ptr1'] = AsiState(0x54,0x078)
86SS_Strand.__asi_va__['data_tsb_ptr2'] = AsiState(0x54,0x080)
87SS_Strand.__asi_va__['data_tsb_ptr3'] = AsiState(0x54,0x088)
88
89
90def __tte_getvalid__(tte): return bool(tte.valid_bit())
91def __tte_setvalid__(tte,val): tte.valid_bit(val)
92def __tte_getreal__(tte): return bool(tte.real_bit())
93def __tte_setreal__(tte,val): tte.real_bit(val)
94def __tte_getpid__(tte): return tte.pid()
95def __tte_setpid__(tte,val): tte.pid(val)
96def __tte_getctx__(tte): return tte.context()
97def __tte_setctx__(tte,val): tte.context(val)
98def __tte_gettag__(tte): return tte.tag()
99def __tte_settag__(tte,val): tte.tag(val)
100def __tte_getsize__(tte): return tte.page_size()
101def __tte_setsize__(tte,val): tte.page_size(val)
102def __tte_getnfo__(tte): return bool(tte.nfo())
103def __tte_setnfo__(tte,val): tte.nfo(val)
104def __tte_getie__(tte): return bool(tte.ie())
105def __tte_setie__(tte,val): tte.ie(val)
106def __tte_getw__(tte): return bool(tte.w())
107def __tte_setw__(tte,val): tte.w(val)
108def __tte_getx__(tte): return bool(tte.x())
109def __tte_setx__(tte,val): tte.x(val)
110def __tte_getp__(tte): return bool(tte.p())
111def __tte_setp__(tte,val): tte.p(val)
112def __tte_gete__(tte): return bool(tte.e())
113def __tte_sete__(tte,val): tte.e(val)
114def __tte_getaddr__(tte): return tte.taddr()
115def __tte_setaddr__(tte,val): tte.taddr(val)
116
117# for unused fields in the TTE
118
119def __tte_getfalse__(tte): return False
120def __tte_setpass__(tte,val): pass
121
122class __tte_xlate__:
123 def __init__(self,tte):
124 self.tte = tte
125 def __call__(self,addr):
126 return self.tte.trans(addr)
127
128class __tte_match__:
129 def __init__(self,tte):
130 self.tte = tte
131 def __call__(self,addr,ctx=0,pid=0,real=False,page_size_mask=0xff):
132 if real:
133 self.tte.match_real(addr,pid,page_size_mask)
134 else:
135 self.tte.match_virt(addr,ctx,pid,page_size_mask)
136
137Pfe_Tlb.TlbTte.__getfun__['xlate'] = __tte_xlate__
138Pfe_Tlb.TlbTte.__getfun__['match'] = __tte_match__
139
140Pfe_Tlb.TlbTte.__getfun__['valid'] = __tte_getvalid__
141Pfe_Tlb.TlbTte.__setfun__['valid'] = __tte_setvalid__
142Pfe_Tlb.TlbTte.__getfun__['real'] = __tte_getreal__
143Pfe_Tlb.TlbTte.__setfun__['real'] = __tte_setreal__
144Pfe_Tlb.TlbTte.__getfun__['pid'] = __tte_getpid__
145Pfe_Tlb.TlbTte.__setfun__['pid'] = __tte_setpid__
146Pfe_Tlb.TlbTte.__getfun__['ctx'] = __tte_getctx__
147Pfe_Tlb.TlbTte.__setfun__['ctx'] = __tte_setctx__
148Pfe_Tlb.TlbTte.__getfun__['size'] = __tte_getsize__
149Pfe_Tlb.TlbTte.__setfun__['size'] = __tte_setsize__
150Pfe_Tlb.TlbTte.__getfun__['tag'] = __tte_gettag__
151Pfe_Tlb.TlbTte.__setfun__['tag'] = __tte_settag__
152Pfe_Tlb.TlbTte.__getfun__['ie'] = __tte_getie__
153Pfe_Tlb.TlbTte.__setfun__['ie'] = __tte_setie__
154Pfe_Tlb.TlbTte.__getfun__['nfo'] = __tte_getnfo__
155Pfe_Tlb.TlbTte.__setfun__['nfo'] = __tte_setnfo__
156Pfe_Tlb.TlbTte.__getfun__['x'] = __tte_getx__
157Pfe_Tlb.TlbTte.__setfun__['x'] = __tte_setx__
158Pfe_Tlb.TlbTte.__getfun__['p'] = __tte_getp__
159Pfe_Tlb.TlbTte.__setfun__['p'] = __tte_setp__
160Pfe_Tlb.TlbTte.__getfun__['w'] = __tte_getw__
161Pfe_Tlb.TlbTte.__setfun__['w'] = __tte_setw__
162Pfe_Tlb.TlbTte.__getfun__['e'] = __tte_gete__
163Pfe_Tlb.TlbTte.__setfun__['e'] = __tte_sete__
164Pfe_Tlb.TlbTte.__getfun__['addr'] = __tte_getaddr__
165Pfe_Tlb.TlbTte.__setfun__['addr'] = __tte_setaddr__
166
167Pfe_Tlb.TlbTte.__getfun__['cv'] = __tte_getfalse__
168Pfe_Tlb.TlbTte.__setfun__['cv'] = __tte_setpass__
169Pfe_Tlb.TlbTte.__getfun__['cp'] = __tte_getfalse__
170Pfe_Tlb.TlbTte.__setfun__['cp'] = __tte_setpass__
171Pfe_Tlb.TlbTte.__getfun__['lock'] = __tte_getfalse__
172Pfe_Tlb.TlbTte.__setfun__['lock'] = __tte_setpass__
173
174
175class Tlb(Pfe_Tlb.Tlb):
176 def __init__(self,tlb):
177 Pfe_Tlb.Tlb.__init__(self,tlb)
178
179 def size(self):
180 return self.__tlb__.size()
181
182 def index(self,index):
183 if index < 0 or index >= self.size():
184 raise IndexError
185 else:
186 return self.__tlb__.get(index)
187
188 def insert(self,tte):
189 if isinstance(tte,Tte):
190 ss_tte = N2_Python.SS_Tte()
191 __tte_setr__(ss_tte,tte.r)
192 __tte_setvalid__(ss_tte,tte.valid)
193 __tte_setctx__(ss_tte,tte.ctx)
194 __tte_setpid__(ss_tte,tte.pid)
195 __tte_settag__(ss_tte,tte.tag)
196 __tte_setsize__(ss_tte,tte.size)
197 __tte_setie__(ss_tte,tte.ie)
198 __tte_setnfo__(ss_tte,tte.nfo)
199 __tte_setx__(ss_tte,tte.x)
200 __tte_setp__(ss_tte,tte.p)
201 __tte_setw__(ss_tte,tte.w)
202 __tte_setaddr__(ss_tte,tte.addr)
203 self.__tlb__.insert(ss_tte)
204 else:
205 raise TypeError
206
207
208class Core(Pfe_Model.Core):
209 def __init__(self,core,ref):
210 Pfe_Model.Core.__init__(self)
211 self.inst_tlb = Tlb(core.inst_tlb)
212 self.data_tlb = Tlb(core.data_tlb)
213 for i in range(0,core.strand_cnt()):
214 strand_ref = 's'+str(i)
215 strand_ptr = core.strand_ptr(i)
216 strand = SS_Strand.Strand(strand_ptr,ref+'.'+strand_ref,N2_Python)
217 self.__dict__[strand_ref] = strand
218 self.s.append(strand)
219 strand.__dict__['inst_tlb'] = self.inst_tlb
220 strand.__dict__['data_tlb'] = self.data_tlb
221
222
223class Cpu(Pfe_Model.Cpu):
224 def __init__(self,cpu,ref):
225 Pfe_Model.Cpu.__init__(self)
226 self.hard_reset = cpu.hard_reset
227 for i in range(0,cpu.core_cnt()):
228 core_ref = 'c'+str(i)
229 core_ptr = cpu.core_ptr(i)
230 core = Core(core_ptr,ref+'.'+core_ref)
231 self.__dict__[core_ref] = core
232 self.c.append(core)
233
234
235class Model(Pfe_Model.Model):
236 def __init__(self,mem,io,model=None):
237 Pfe_Model.Model.__init__(self)
238 self.mem = mem
239 self.io = io
240 self.__model__ = model
241 mem.__flush__ = model.flush
242 if model:
243 for i in range(0,model.cpu_cnt()):
244 cpu_ref = 'p'+str(i)
245 cpu_ptr = model.cpu_ptr(i)
246 cpu = Cpu(cpu_ptr,cpu_ref)
247 self.p.append(cpu)
248 self.__dict__[cpu_ref] = cpu
249 self.__populate__()
250
251 def __create_cpu__(self,count,cpu_lst=[]):
252 for i in range(0,count):
253 cpu_ref = 'p'+str(i)
254 if i < len(cpu_lst):
255 cpu_ptr = cpu_lst[i]
256 else:
257 cpu_ptr = N2_Python.N2_Cpu(cpu_ref)
258 cpu = Cpu(cpu_ptr,cpu_ref)
259 self.p.append(cpu)
260 self.__dict__[cpu_ref] = cpu
261 self.__populate__()
262 return True
263
264 def ras_enable(self):
265 return self.__model__.ras_enable()