ToolsCourseTp3: am2901_chip.py

File am2901_chip.py, 14.9 KB (added by cobell, 16 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                          )