VLSI2-TP2-2017: mux.py

File mux.py, 2.8 KB (added by jpc, 14 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.s , '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