VLSI2-TP2-2017: mux.py

File mux.py, 2.8 KB (added by jpc, 12 years ago)

Description Stratus du multiplexeur N bits.

Line 
1#!/usr/bin/env python
2#
3#    LIP6
4#    University Pierre & Marie Curie - UPMC
5#    4, place Jussieu 75252 Paris Cedex 05
6#    France
7#
8# +-----------------------------------------------------------------+
9# |                                                                 |
10# |                      M a s t e r   S E S I                      |
11# |                  U E   T O O L S  -  T M E   3                  |
12# |                                                                 |
13# |  Author  . . . . . . . . . . . . . . . . . .   Sophie Belloeil  |
14# |  Status  . . . . . . . . . . . . . . . . . . . . .  "./mux.py"  |
15# |  Version   . . . . . . . . . . . . . . . . . . . . . . .   1.0  |
16# |  Date  . . . . . . . . . . . . . . . . . . .   January 08 2010  |
17# |                                                                 |
18# +-----------------------------------------------------------------+
19
20
21from stratus import *
22
23
24class mux ( Model ) :
25
26  def Interface ( self ):
27   # Recuperation du parametre "nbit".
28    self.n   = self._param['nbit']
29
30   # Declaration des connecteurs.
31    self.i0  = SignalIn  ( "i0"  , self.n )
32    self.i1  = SignalIn  ( "i1"  , self.n )
33    self.cmd = SignalIn  ( "cmd" , 1      )
34    self.s   = SignalOut ( "s"   , self.n )
35    self.vdd = VddIn     ( "vdd" )
36    self.vss = VssIn     ( "vss" )
37    return
38
39  def Netlist ( self ) :
40   # Instanciation du vecteur de 'n' multiplexeurs.
41    for i in range ( self.n ) :
42      Inst ( "mx2_x2"
43           , map = { 'i0'  : self.i0[i]
44                   , 'i1'  : self.i1[i]
45                   , 'cmd' : self.cmd
46                   , 'q'   : self.s[i]
47                   , 'vdd' : self.vdd
48                   , 'vss' : self.vss
49                   }
50           )
51    return
52
53  def Pattern ( self ) :
54   # Nom du fichier de pattern.
55    pat = PatWrite(self._name+'.pat',self)
56   
57   # Declaration de l'interface.
58    pat.declar ( self.i0 , 'X' )
59    pat.declar ( self.i1 , 'X' )
60    pat.declar ( self.cmd, 'B' )
61    pat.declar ( self., 'X' )
62   
63    pat.declar ( self.vdd, 'B' )
64    pat.declar ( self.vss, 'B' )
65
66   # Debut de la description des patterns.
67    pat.pattern_begin ()
68   
69   # Affectation des valeurs.
70    pat.affect_int ( self.vdd, 1 )
71    pat.affect_int ( self.vss, 0 )
72   
73   # Triple boucle: pour toutes les valeurs de i0 & i1 on teste
74   # la valeur en sortie du multiplexeur suivant la commande.
75    for value_i0 in range ( self.n ) :
76      for value_i1 in range ( self.n ) :
77        for value_c in range ( 2 ) :
78          pat.affect_int ( self.i0 , value_i0 )
79          pat.affect_int ( self.i1 , value_i1 )
80          pat.affect_int ( self.cmd, value_c  )
81          if value_c == 1 : pat.affect_int ( self.s, value_i1 )
82          else            : pat.affect_int ( self.s, value_i0 )
83         # Ajout du pattern
84          pat.addpat ()
85
86    del pat
87    return