\subsubsection{Name}

Stratus -- Procedural design language based upon \emph{Python}

\subsubsection{Description}

\emph{Stratus} is a set of \emph{Python} methods/functions dedicated to procedural generation purposes. From a user point of view, \emph{Stratus} is a circuit's description  language that allows \emph{Python} programming flow control, variable use, and specialized functions in order to handle vlsi objects.\\

\indent Based upon the \emph{Hurricane} data structures, the \emph{Stratus} language gives the user the ability to describe netlist and layout views.

\subsubsection{Creation of a cell}

A cell is a hierachical structural description of a circuit in terms of ports (I/Os), signals (nets) and instances :

\begin{itemize}
\item Method \verb-Interface-
    \begin{itemize}
        \item LogicIn
        \item LogicOut
        \item LogicInOut
        \item TriState
        \item VddIn
        \item VssIn
    \end{itemize}
\item Method \verb-Netlist-
    \begin{itemize}
        \item Signal
        \item Inst
        \item Facilities : \&, |, +, Mux, Shift, Eq/Ne ...
    \end{itemize}
\item Method \verb-Layout-
    \begin{itemize}
        \item Place, PlaceTop, PlaceBottom, PlaceRight, PlaceLeft
        \item SetRefIns
        \item DefAb, ResizeAb
        \item PlaceCentric
        \item PlaceGlue, FillCell
        \item PadNorth, PadSouth, PadEast, PadWest
        \item AlimVerticalRail, AlimHorizontalRail
        \item AlimConnectors
        \item PowerRing
        \item RouteCk
    \end{itemize}
    \item Method \verb-Pattern-
    \item Method \verb-View-
    \item Method \verb-Save-
\end{itemize}

\subsubsection{Syntax highlighting}

This chapter describes what to do to have the right syntax highlighting when using vi.

\begin{itemize}
    \item Commands to do when you want to change once the coloration of your file :
\end{itemize}
\begin{small}
\begin{verbatim}
:syntax off
:source /asim/coriolis/share/etc/stratus.vim
\end{verbatim}
\end{small}
\begin{itemize}
    \item Modification of your .vimrc in order to have the syntax highlighting each time you open a file :
\end{itemize}
\begin{small}
\begin{verbatim}
syntax off
autocmd BufRead,BufNewfile *.py so /asim/coriolis/share/etc/stratus.vim
syntax on
\end{verbatim}
\end{small}
        
\subsubsection{Environment variables}

\begin{itemize}
    \item CRL\_IN\_LO, default value : \verb-def-
    \item CRL\_OUT\_LO, default value : \verb-def-
    \item CRL\_IN\_PH, default value : \verb-def-
    \item CRL\_OUT\_PH, default value : \verb-def-
    \item CRL\_CATA\_LIB, default value : \verb-.-
    \item CRL\_CATAL\_NAME, default value : \verb-CATAL-
\end{itemize}

\subsubsection{Syntax}

A \emph{Stratus} file must have a .py extension and must begin as follow :
\begin{verbatim}
#!/usr/bin/python

from stratus import *
\end{verbatim}

\indent In order to execute a \emph{Stratus} file (named \verb-file- for example), one has two choices :
\begin{verbatim}
python file.py
\end{verbatim}
\indent Or :
\begin{verbatim}
chmod u+x file.py
./file.py
\end{verbatim}

\indent The names used in \emph{Stratus}, as arguments to \emph{Stratus} functions, should be alphanumerical, including the underscore. The arguments of \emph{Stratus} are case sensitive, so \textsc{VDD} is not equivalent to \textsc{vdd}.\\
    
\indent Vectorized connectors or signal can be used using the \textsc{[n:m]} construct.\\

\subsubsection{Example}

You can see a concrete example at : \hyperref[ref]{\emph{A concrete example}}{}{Example}{secexample}

\subsubsection{See Also}

\hyperref[ref]{\emph{Model}}{}{Model}{secmodel}
\hyperref[ref]{\emph{Param}}{}{Param}{secparam}
\hyperref[ref]{\emph{Example}}{}{Example}{secexample}
\hyperref[ref]{\emph{Netlist}}{}{Netlist}{secnetlist}
\hyperref[ref]{\emph{Layout}}{}{Layout}{seclayout}
\hyperref[ref]{\emph{Place and Route}}{}{Place and Route}{secroute}
\hyperref[ref]{\emph{Facilities}}{}{Facilities}{secfacilities}
