\subsubsection{Name} Mux -- Easy way to instantiate a multiplexor \subsubsection{Synopsys} \begin{verbatim} netOut <= netCmd.Mux ( arg ) \end{verbatim} \subsubsection{Description} This method is a method of net. The net which this method is applied to is the command of the multiplexor. The nets given as parameters are all the input nets. This method returns a net : the output net.\\ There are two ways to describe the multiplexor : the argument \verb-arg- can be a list or a dictionnary.\\ \indent Note that it is possible to change the generator instanciated with the \verb-SetMux- method. \subsubsection{Parameters} \begin{itemize} \item List :\\ \indent For each value of the command, the corresponding net is specified. All values must be specified.\\ \indent For example : \begin{verbatim} out <= cmd.Mux ( [in0, in1, in2, in3] ) \end{verbatim} \indent The net out is then initialised like this : \begin{verbatim} if cmd == 0 : out <= in0 if cmd == 1 : out <= in1 if cmd == 2 : out <= in2 if cmd == 3 : out <= in3 \end{verbatim} \item Dictionnary :\\ \indent A dictionnary makes the correspondance between a value of the command and the corresponding net.\\ \indent For example : \begin{verbatim} out <= cmd.Mux ( {"0" : in0, "1" : in1, "2" : in2, "3" : in3} ) \end{verbatim} \indent This initialisation corresponds to the one before. \indent Thanks to the use of a dictionnary, the connections can be clearer : \begin{itemize} \item \verb-'default'-: This key of the dictionnary corresponds to all the nets that are not specified\\ For example : \begin{verbatim} out <= cmd.Mux ( {"0" : in0, "default" : in1} ) \end{verbatim} This notation corresponds to : \begin{verbatim} if cmd == 0 : out <= in0 else : out <= in1 \end{verbatim} Note that if there is no \verb-'default'- key specified and that not all the nets are specified, the non specified nets are set to 0. \item \verb-#- and \verb-?- : When a key of the dictionnary begins with \verb-#-, the number after the \verb-#- has to be binary and each ? in the number means that this bit is not precised\\ For example : \begin{verbatim} out <= cmd.Mux ( {"#01?" : in0, "default" : in1} ) \end{verbatim} This notation corresponds to : \begin{verbatim} if cmd in ( 2, 3 ) : out <= in0 else : out <= in1 \end{verbatim} \item \verb-,- and \verb"-" : When keys contains thoses symbols, it permits to enumerate intervals\\ For example : \begin{verbatim} out <= cmd.Mux ( {"0,4" : in0, "1-3,5" : in1} ) \end{verbatim} This notation corresponds to : \begin{verbatim} if cmd in ( 0, 4 ) : out <= in0 elif cmd in ( 1, 2, 3, 5) : out <= in1 else : out <= 0 \end{verbatim} \end{itemize} \end{itemize} \subsubsection{Example} \begin{verbatim} class essai ( Model ) : def Interface ( self ) : self.A = SignalIn ( "a", 4 ) self.B = SignalIn ( "b", 4 ) self.C = SignalIn ( "c", 4 ) self.D = SignalIn ( "d", 4 ) self.Cmd1 = SignalIn ( "cmd1", 2 ) self.Cmd2 = SignalIn ( "cmd2", 4 ) self.S1 = SignalOut ( "s1", 4 ) self.S2 = SignalOut ( "s2", 4 ) self.Vdd = VddIn ( "vdd" ) self.Vss = VssIn ( "vss" ) def Netlist ( self ) : self.S1 <= self.Cmd1.Mux ( [sefl.A, self.B, self.C, self.D] ) self.S2 <= self.Cmd2.Mux ( { "0" : self.A , "1,5-7" : self.B , "#1?1?" : self.C , "default" : self.D } ) \end{verbatim} \subsubsection{Errors} Some errors may occur : \begin{itemize} \item \verb-[Stratus ERROR] Mux : all the nets must have the same lenght.-\\All the input nets pust have the same lenght. \item \verb-[Stratus ERROR] Mux : there are no input nets.-\\The input nets seem to have been forgotten. \item \verb-[Stratus ERROR] Mux : wrong argument type.-\\The connections of the buses are not described by a list nor a dictionnary. \item \verb-[Stratus ERROR] Mux :-\\\verb-the number of nets does not match with the lenght of the command.-\\When using a list, the number of nets has to correspond to the number of possible values of the command. \item \verb-[Stratus ERROR] Mux : wrong key.-\\One of the key of the dictionnary is not un number, neither a list or an interval. \item \verb-[Stratus ERROR] Mux :-\\\verb-when an interval is specified, the second number of the interval-\\\verb-must be greater than the first one.-\\When creating an interval with "-", the second number has to be greater than the first one. \item \verb-[Stratus ERROR] Mux :-\\\verb-the binary number does not match with the lenght of the command.-\\When using the \verb-#- notation, each digit of the binary number corresponds to a wire of the cmd. The leghts have to correspond. \item \verb-[Stratus ERROR] Mux : after #, the number has to be binary.-\\When using the \verb-#- notation, the number has to be binary : one can use 0, 1 or ?. \end{itemize} \begin{htmlonly} \subsubsection{See Also} \hyperref[ref]{\emph{Introduction}}{}{Introduction}{secintroduction} \hyperref[ref]{\emph{Netlist}}{}{Netlist}{secnetlist} \hyperref[ref]{\emph{Instanciation of a shifter}}{}{Shifter}{secshift} \hyperref[ref]{\emph{Instanciation of a register}}{}{Reg}{secreg} \hyperref[ref]{\emph{Instanciation of constants}}{}{Constant}{secconstant} \hyperref[ref]{\emph{Boolean operations}}{}{Boolean}{secbool} \hyperref[ref]{\emph{Arithmetical operations}}{}{Arithmetic}{secarithmetic} \hyperref[ref]{\emph{Comparison operations}}{}{Comparison}{seccomp} \end{htmlonly}