ToolsCourseTp3: am2901_chip.py

File am2901_chip.py, 14.9 KB (added by cobell, 18 years ago)
Line 
1#!/usr/bin/env python
2
3from stratus import *
4
5class am2901_chip ( Model ) :
6
7 def Interface ( self ) :
8 self.ck = SignalIn ( "ck", 1 )
9 self.cin = SignalUnknown ( "cin", 1 )
10 self.cout = SignalUnknown ( "cout", 1 )
11 self.np = SignalOut ( "np", 1 )
12 self.ng = SignalOut ( "ng", 1 )
13 self.ovr = SignalOut ( "ovr", 1 )
14 self.zero = SignalOut ( "zero", 1 )
15 self.signe = SignalUnknown ( "signe", 1 )
16 self.r0 = SignalUnknown ( "r0", 1 )
17 self.r3 = SignalUnknown ( "r3", 1 )
18 self.q0 = SignalUnknown ( "q0", 1 )
19 self.q3 = SignalUnknown ( "q3", 1 )
20 self.a = SignalIn ( "a", 4 )
21 self.b = SignalIn ( "b", 4 )
22 self.d = SignalIn ( "d", 4 )
23 self.i = SignalIn ( "i", 9 )
24 self.noe = SignalIn ( "noe", 1 )
25 self.y = SignalUnknown ( "y", 4 )
26
27 self.vdd = VddIn ( "vdd" )
28 self.vss = VssIn ( "vss" )
29 self.vdde = VddIn ( "vdde" )
30 self.vsse = VssIn ( "vsse" )
31
32 def Netlist ( self ) :
33 cin_i = Signal ( "cin_i", 1 )
34 cout_i = Signal ( "cout_i", 1 )
35 np_i = Signal ( "np_i", 1 )
36 ng_i = Signal ( "ng_i", 1 )
37 ovr_i = Signal ( "ovr_i", 1 )
38 zero_i = Signal ( "zero_i", 1 )
39 sh_right = Signal ( "sh_right", 1 )
40 sh_left = Signal ( "sh_left", 1 )
41 ram_o_down = Signal ( "ram_o_down", 1 )
42 ram_o_up = Signal ( "ram_o_up", 1 )
43 ram_i_down = Signal ( "ram_i_down", 1 )
44 ram_i_up = Signal ( "ram_i_up", 1 )
45 acc_o_down = Signal ( "acc_o_down", 1 )
46 acc_o_up = Signal ( "acc_o_up", 1 )
47 acc_i_down = Signal ( "acc_i_down", 1 )
48 acc_i_up = Signal ( "acc_i_up", 1 )
49 cki = Signal ( "cki", 1 )
50 a_i = Signal ( "a_i", 4 )
51 b_i = Signal ( "b_i", 4 )
52 d_i = Signal ( "d_i", 4 )
53 i_i = Signal ( "i_i", 9 )
54 y_i = Signal ( "y_i", 4 )
55 noe_i = Signal ( "noe_i", 1 )
56 oe = Signal ( "oe", 1 )
57 self.ckc = Signal ( "ckc", 1 )
58
59 Generate ( "am2901_core.am2901_core", "am2901_core" )
60
61 self.Core = Inst ( "am2901_core", "core"
62 , map = { 'cin' : cin_i
63 , 'cout' : cout_i
64 , 'np' : np_i
65 , 'ng' : ng_i
66 , 'over' : ovr_i
67 , 'zero' : zero_i
68 , 'sh_right' : sh_right
69 , 'sh_left' : sh_left
70 , 'ram_o_down' : ram_o_down
71 , 'ram_o_up' : ram_o_up
72 , 'ram_i_down' : ram_i_down
73 , 'ram_i_up' : ram_i_up
74 , 'acc_o_down' : acc_o_down
75 , 'acc_o_up' : acc_o_up
76 , 'acc_i_down' : acc_i_down
77 , 'acc_i_up' : acc_i_up
78 , 'ck' : self.ckc
79 , 'a' : a_i
80 , 'b' : b_i
81 , 'd' : d_i
82 , 'i' : i_i
83 , 'y' : y_i
84 , 'noe' : noe_i
85 , 'oe' : oe
86 , 'vdd' : self.vdd
87 , 'vss' : self.vss
88 }
89 )
90
91 self.p_ck = Inst ( "pck_px", "p_ck"
92 , map = { 'pad' : self.ck
93 , 'ck' : cki
94 , 'vddi' : self.vdd
95 , 'vssi' : self.vss
96 , 'vdde' : self.vdde
97 , 'vsse' : self.vsse
98 }
99 )
100
101 self.p_cin = Inst ( "pi_px", "p_cin"
102 , map = { 'pad' : self.cin
103 , 't' : cin_i
104 , 'ck' : cki
105 , 'vddi' : self.vdd
106 , 'vssi' : self.vss
107 , 'vdde' : self.vdde
108 , 'vsse' : self.vsse
109 }
110 )
111
112 self.p_noe = Inst ( "pi_px", "p_noe"
113 , map = { 'pad' : self.noe
114 , 't' : noe_i
115 , 'ck' : cki
116 , 'vddi' : self.vdd
117 , 'vssi' : self.vss
118 , 'vdde' : self.vdde
119 , 'vsse' : self.vsse
120 }
121 )
122
123 self.p_a = {}
124 self.p_b = {}
125 self.p_d = {}
126 for i in range ( 4 ) :
127 self.p_a[i] = Inst ( "pi_px", "p_a%d" % i
128 , map = { 'pad' : self.a[i]
129 , 't' : a_i[i]
130 , 'ck' : cki
131 , 'vddi' : self.vdd
132 , 'vssi' : self.vss
133 , 'vdde' : self.vdde
134 , 'vsse' : self.vsse
135 }
136 )
137 self.p_b[i] = Inst ( "pi_px", "p_b%d" % i
138 , map = { 'pad' : self.b[i]
139 , 't' : b_i[i]
140 , 'ck' : cki
141 , 'vddi' : self.vdd
142 , 'vssi' : self.vss
143 , 'vdde' : self.vdde
144 , 'vsse' : self.vsse
145 }
146 )
147 self.p_d[i] = Inst ( "pi_px", "p_d%d" % i
148 , map = { 'pad' : self.d[i]
149 , 't' : d_i[i]
150 , 'ck' : cki
151 , 'vddi' : self.vdd
152 , 'vssi' : self.vss
153 , 'vdde' : self.vdde
154 , 'vsse' : self.vsse
155 }
156 )
157
158 self.p_i = {}
159 for i in range ( 9 ) :
160 self.p_i[i] = Inst ( "pi_px", "p_i%d" % i
161 , map = { 'pad' : self.i[i]
162 , 't' : i_i[i]
163 , 'ck' : cki
164 , 'vddi' : self.vdd
165 , 'vssi' : self.vss
166 , 'vdde' : self.vdde
167 , 'vsse' : self.vsse
168 }
169 )
170
171 self.p_cout = Inst ( "po_px", "p_cout"
172 , map = { 'i' : cout_i
173 , 'pad' : self.cout
174 , 'ck' : cki
175 , 'vddi' : self.vdd
176 , 'vssi' : self.vss
177 , 'vdde' : self.vdde
178 , 'vsse' : self.vsse
179 }
180 )
181
182 self.p_np = Inst ( "po_px", "p_np"
183 , map = { 'i' : np_i
184 , 'pad' : self.np
185 , 'ck' : cki
186 , 'vddi' : self.vdd
187 , 'vssi' : self.vss
188 , 'vdde' : self.vdde
189 , 'vsse' : self.vsse
190 }
191 )
192
193 self.p_ng = Inst ( "po_px", "p_ng"
194 , map = { 'i' : ng_i
195 , 'pad' : self.ng
196 , 'ck' : cki
197 , 'vddi' : self.vdd
198 , 'vssi' : self.vss
199 , 'vdde' : self.vdde
200 , 'vsse' : self.vsse
201 }
202 )
203
204 self.p_ovr = Inst ( "po_px", "p_ovr"
205 , map = { 'i' : ovr_i
206 , 'pad' : self.ovr
207 , 'ck' : cki
208 , 'vddi' : self.vdd
209 , 'vssi' : self.vss
210 , 'vdde' : self.vdde
211 , 'vsse' : self.vsse
212 }
213 )
214
215 self.p_zero = Inst ( "po_px", "p_zero"
216 , map = { 'i' : zero_i
217 , 'pad' : self.zero
218 , 'ck' : cki
219 , 'vddi' : self.vdd
220 , 'vssi' : self.vss
221 , 'vdde' : self.vdde
222 , 'vsse' : self.vsse
223 }
224 )
225
226 self.p_signe = Inst ( "po_px", "p_signe"
227 , map = { 'i' : ram_o_up
228 , 'pad' : self.signe
229 , 'ck' : cki
230 , 'vddi' : self.vdd
231 , 'vssi' : self.vss
232 , 'vdde' : self.vdde
233 , 'vsse' : self.vsse
234 }
235 )
236
237 self.p_y = {}
238 for i in range ( 4 ) :
239 self.p_y[i] = Inst ( "pot_px", "p_y%d" % i
240 , map = { 'i' : y_i[i]
241 , 'b' : oe
242 , 'pad' : self.y[i]
243 , 'ck' : cki
244 , 'vddi' : self.vdd
245 , 'vssi' : self.vss
246 , 'vdde' : self.vdde
247 , 'vsse' : self.vsse
248 }
249 )
250
251 self.p_q0 = Inst ( "piot_px", "p_q0"
252 , map = { 'i' : acc_o_down
253 , 'b' : sh_right
254 , 't' : acc_i_down
255 , 'pad' : self.q0
256 , 'ck' : cki
257 , 'vddi' : self.vdd
258 , 'vssi' : self.vss
259 , 'vdde' : self.vdde
260 , 'vsse' : self.vsse
261 }
262 )
263
264 self.p_q3 = Inst ( "piot_px", "p_q3"
265 , map = { 'i' : acc_o_up
266 , 'b' : sh_left
267 , 't' : acc_i_up
268 , 'pad' : self.q3
269 , 'ck' : cki
270 , 'vddi' : self.vdd
271 , 'vssi' : self.vss
272 , 'vdde' : self.vdde
273 , 'vsse' : self.vsse
274 }
275 )
276
277 self.p_r0 = Inst ( "piot_px", "p_r0"
278 , map = { 'i' : ram_o_down
279 , 'b' : sh_right
280 , 't' : ram_i_down
281 , 'pad' : self.r0
282 , 'ck' : cki
283 , 'vddi' : self.vdd
284 , 'vssi' : self.vss
285 , 'vdde' : self.vdde
286 , 'vsse' : self.vsse
287 }
288 )
289
290 self.p_r3 = Inst ( "piot_px", "p_r3"
291 , map = { 'i' : ram_o_up
292 , 'b' : sh_left
293 , 't' : ram_i_up
294 , 'pad' : self.r3
295 , 'ck' : cki
296 , 'vddi' : self.vdd
297 , 'vssi' : self.vss
298 , 'vdde' : self.vdde
299 , 'vsse' : self.vsse
300 }
301 )
302
303 self.p_vddick0 = Inst ( "pvddick_px", "p_vddick0"
304 , map = { 'cko' : self.ckc
305 , 'ck' : cki
306 , 'vddi' : self.vdd
307 , 'vssi' : self.vss
308 , 'vdde' : self.vdde
309 , 'vsse' : self.vsse
310 }
311 )
312
313 self.p_vssick0 = Inst ( "pvssick_px", "p_vssick0"
314 , map = { 'cko' : self.ckc
315 , 'ck' : cki
316 , 'vddi' : self.vdd
317 , 'vssi' : self.vss
318 , 'vdde' : self.vdde
319 , 'vsse' : self.vsse
320 }
321 )
322
323 self.p_vddeck0 = Inst ( "pvddeck_px", "p_vddeck0"
324 , map = { 'cko' : self.ckc
325 , 'ck' : cki
326 , 'vddi' : self.vdd
327 , 'vssi' : self.vss
328 , 'vdde' : self.vdde
329 , 'vsse' : self.vsse
330 }
331 )
332
333 self.p_vddeck1 = Inst ( "pvddeck_px", "p_vddeck1"
334 , map = { 'cko' : self.ckc
335 , 'ck' : cki
336 , 'vddi' : self.vdd
337 , 'vssi' : self.vss
338 , 'vdde' : self.vdde
339 , 'vsse' : self.vsse
340 }
341 )
342
343 self.p_vsseck0 = Inst ( "pvsseck_px", "p_vsseck0"
344 , map = { 'cko' : self.ckc
345 , 'ck' : cki
346 , 'vddi' : self.vdd
347 , 'vssi' : self.vss
348 , 'vdde' : self.vdde
349 , 'vsse' : self.vsse
350 }
351 )
352
353 self.p_vsseck1 = Inst ( "pvsseck_px", "p_vsseck1"
354 , map = { 'cko' : self.ckc
355 , 'ck' : cki
356 , 'vddi' : self.vdd
357 , 'vssi' : self.vss
358 , 'vdde' : self.vdde
359 , 'vsse' : self.vsse
360 }
361 )