coriolis/stratus1/doc/stratus/man_mux.tex

136 lines
5.7 KiB
TeX
Raw Normal View History

2010-07-12 10:33:22 -05:00
\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}