mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
Add new builtin FF types
The new types include: - FFs with async reset and enable (`$adffe`, `$_DFFE_[NP][NP][01][NP]_`) - FFs with sync reset (`$sdff`, `$_SDFF_[NP][NP][01]_`) - FFs with sync reset and enable, reset priority (`$sdffs`, `$_SDFFE_[NP][NP][01][NP]_`) - FFs with sync reset and enable, enable priority (`$sdffce`, `$_SDFFCE_[NP][NP][01][NP]_`) - FFs with async reset, set, and enable (`$dffsre`, `$_DFFSRE_[NP][NP][NP][NP]_`) - latches with reset or set (`$adlatch`, `$_DLATCH_[NP][NP][01]_`) The new FF types are not actually used anywhere yet (this is left for future commits).
This commit is contained in:
parent
8c4cb1885b
commit
b0bee396a8
8 changed files with 2736 additions and 70 deletions
|
@ -234,16 +234,6 @@ Clock is active on the positive edge if this parameter has the value {\tt 1'b1}
|
|||
edge if this parameter is {\tt 1'b0}.
|
||||
\end{itemize}
|
||||
|
||||
D-type flip-flops with enable are represented by {\tt \$dffe} cells. As the {\tt \$dff}
|
||||
cells they have \B{CLK}, \B{D} and \B{Q} ports. In addition they also have a single-bit \B{EN}
|
||||
input port for the enable pin and the following parameter:
|
||||
|
||||
\begin{itemize}
|
||||
\item \B{EN\_POLARITY} \\
|
||||
The enable input is active-high if this parameter has the value {\tt 1'b1} and active-low
|
||||
if this parameter is {\tt 1'b0}.
|
||||
\end{itemize}
|
||||
|
||||
D-type flip-flops with asynchronous reset are represented by {\tt \$adff} cells. As the {\tt \$dff}
|
||||
cells they have \B{CLK}, \B{D} and \B{Q} ports. In addition they also have a single-bit \B{ARST}
|
||||
input port for the reset pin and the following additional two parameters:
|
||||
|
@ -257,13 +247,26 @@ if this parameter is {\tt 1'b0}.
|
|||
The state of \B{Q} will be set to this value when the reset is active.
|
||||
\end{itemize}
|
||||
|
||||
Note that the {\tt \$adff} cell can only be used when the reset value is constant.
|
||||
|
||||
\begin{sloppypar}
|
||||
Usually these cells are generated by the {\tt proc} pass using the information
|
||||
in the designs RTLIL::Process objects.
|
||||
\end{sloppypar}
|
||||
|
||||
D-type flip-flops with synchronous reset are represented by {\tt \$sdff} cells. As the {\tt \$dff}
|
||||
cells they have \B{CLK}, \B{D} and \B{Q} ports. In addition they also have a single-bit \B{SRST}
|
||||
input port for the reset pin and the following additional two parameters:
|
||||
|
||||
\begin{itemize}
|
||||
\item \B{SRST\_POLARITY} \\
|
||||
The synchronous reset is active-high if this parameter has the value {\tt 1'b1} and active-low
|
||||
if this parameter is {\tt 1'b0}.
|
||||
|
||||
\item \B{SRST\_VALUE} \\
|
||||
The state of \B{Q} will be set to this value when the reset is active.
|
||||
\end{itemize}
|
||||
|
||||
Note that the {\tt \$adff} and {\tt \$sdff} cells can only be used when the reset value is constant.
|
||||
|
||||
D-type flip-flops with asynchronous set and reset are represented by {\tt \$dffsr} cells.
|
||||
As the {\tt \$dff} cells they have \B{CLK}, \B{D} and \B{Q} ports. In addition they also have
|
||||
a single-bit \B{SET} input port for the set pin, a single-bit \B{CLR} input port for the reset pin,
|
||||
|
@ -282,9 +285,21 @@ if this parameter is {\tt 1'b0}.
|
|||
When both the set and reset inputs of a {\tt \$dffsr} cell are active, the reset input takes
|
||||
precedence.
|
||||
|
||||
D-type flip-flops with enable are represented by {\tt \$dffe}, {\tt \$adffe}, {\tt \$dffsre},
|
||||
{\tt \$sdffe}, and {\tt \$sdffce} cells, which are enhanced variants of {\tt \$dff}, {\tt \$adff}, {\tt \$dffsr},
|
||||
{\tt \$sdff} (with reset over enable) and {\tt \$sdff} (with enable over reset)
|
||||
cells, respectively. They have the same ports and parameters as their base cell.
|
||||
In addition they also have a single-bit \B{EN} input port for the enable pin and the following parameter:
|
||||
|
||||
\begin{itemize}
|
||||
\item \B{EN\_POLARITY} \\
|
||||
The enable input is active-high if this parameter has the value {\tt 1'b1} and active-low
|
||||
if this parameter is {\tt 1'b0}.
|
||||
\end{itemize}
|
||||
|
||||
\begin{fixme}
|
||||
Add information about {\tt \$sr} cells (set-reset flip-flops), {\tt \$dlatch} cells (d-type latches),
|
||||
and {\tt \$dlatchsr} cells (d-type latches with set/reset).
|
||||
{\tt \$adlatch} and {\tt \$dlatchsr} cells (d-type latches with set/reset).
|
||||
\end{fixme}
|
||||
|
||||
\subsection{Memories}
|
||||
|
@ -490,20 +505,29 @@ Verilog & Cell Type \\
|
|||
\lstinline[language=Verilog]; always @(negedge C) Q <= D; & {\tt \$\_DFF\_N\_} \\
|
||||
\lstinline[language=Verilog]; always @(posedge C) Q <= D; & {\tt \$\_DFF\_P\_} \\
|
||||
\end{tabular}
|
||||
\caption{Cell types for gate level logic networks (main list)}
|
||||
\label{tab:CellLib_gates}
|
||||
\end{table}
|
||||
|
||||
\begin{table}[t]
|
||||
\hfil
|
||||
\begin{tabular}[t]{llll}
|
||||
$ClkEdge$ & $RstLvl$ & $RstVal$ & Cell Type \\
|
||||
\hline
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_NN0\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_NN1\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_NP0\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_NP1\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_PN0\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_PN1\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_PP0\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_PP1\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_NN0\_}, {\tt \$\_SDFF\_NN0\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_NN1\_}, {\tt \$\_SDFF\_NN1\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_NP0\_}, {\tt \$\_SDFF\_NP0\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_NP1\_}, {\tt \$\_SDFF\_NP1\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_PN0\_}, {\tt \$\_SDFF\_PN0\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_PN1\_}, {\tt \$\_SDFF\_PN1\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFF\_PP0\_}, {\tt \$\_SDFF\_PP0\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFF\_PP1\_}, {\tt \$\_SDFF\_PP1\_} \\
|
||||
\end{tabular}
|
||||
% FIXME: the layout of this is broken and I have no idea how to fix it
|
||||
\caption{Cell types for gate level logic networks (FFs with reset)}
|
||||
\label{tab:CellLib_gates_adff}
|
||||
\end{table}
|
||||
|
||||
\begin{table}[t]
|
||||
\hfil
|
||||
\begin{tabular}[t]{lll}
|
||||
$ClkEdge$ & $EnLvl$ & Cell Type \\
|
||||
|
@ -513,7 +537,36 @@ $ClkEdge$ & $EnLvl$ & Cell Type \\
|
|||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_PN\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_PP\_} \\
|
||||
\end{tabular}
|
||||
% FIXME: the layout of this is broken too
|
||||
\caption{Cell types for gate level logic networks (FFs with enable)}
|
||||
\label{tab:CellLib_gates_dffe}
|
||||
\end{table}
|
||||
|
||||
\begin{table}[t]
|
||||
\begin{tabular}[t]{lllll}
|
||||
$ClkEdge$ & $RstLvl$ & $RstVal$ & $EnLvl$ & Cell Type \\
|
||||
\hline
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_NN0N\_}, {\tt \$\_SDFFE\_NN0N\_}, {\tt \$\_SDFFCE\_NN0N\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_NN0P\_}, {\tt \$\_SDFFE\_NN0P\_}, {\tt \$\_SDFFCE\_NN0P\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_NN1N\_}, {\tt \$\_SDFFE\_NN1N\_}, {\tt \$\_SDFFCE\_NN1N\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_NN1P\_}, {\tt \$\_SDFFE\_NN1P\_}, {\tt \$\_SDFFCE\_NN1P\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_NP0N\_}, {\tt \$\_SDFFE\_NP0N\_}, {\tt \$\_SDFFCE\_NP0N\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_NP0P\_}, {\tt \$\_SDFFE\_NP0P\_}, {\tt \$\_SDFFCE\_NP0P\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_NP1N\_}, {\tt \$\_SDFFE\_NP1N\_}, {\tt \$\_SDFFCE\_NP1N\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_NP1P\_}, {\tt \$\_SDFFE\_NP1P\_}, {\tt \$\_SDFFCE\_NP1P\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_PN0N\_}, {\tt \$\_SDFFE\_PN0N\_}, {\tt \$\_SDFFCE\_PN0N\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_PN0P\_}, {\tt \$\_SDFFE\_PN0P\_}, {\tt \$\_SDFFCE\_PN0P\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_PN1N\_}, {\tt \$\_SDFFE\_PN1N\_}, {\tt \$\_SDFFCE\_PN1N\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_PN1P\_}, {\tt \$\_SDFFE\_PN1P\_}, {\tt \$\_SDFFCE\_PN1P\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_PP0N\_}, {\tt \$\_SDFFE\_PP0N\_}, {\tt \$\_SDFFCE\_PP0N\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_PP0P\_}, {\tt \$\_SDFFE\_PP0P\_}, {\tt \$\_SDFFCE\_PP0P\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFE\_PP1N\_}, {\tt \$\_SDFFE\_PP1N\_}, {\tt \$\_SDFFCE\_PP1N\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFE\_PP1P\_}, {\tt \$\_SDFFE\_PP1P\_}, {\tt \$\_SDFFCE\_PP1P\_} \\
|
||||
\end{tabular}
|
||||
\caption{Cell types for gate level logic networks (FFs with reset and enable)}
|
||||
\label{tab:CellLib_gates_adffe}
|
||||
\end{table}
|
||||
|
||||
\begin{table}[t]
|
||||
\hfil
|
||||
\begin{tabular}[t]{llll}
|
||||
$ClkEdge$ & $SetLvl$ & $RstLvl$ & Cell Type \\
|
||||
|
@ -527,11 +580,37 @@ $ClkEdge$ & $SetLvl$ & $RstLvl$ & Cell Type \\
|
|||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSR\_PPN\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSR\_PPP\_} \\
|
||||
\end{tabular}
|
||||
\caption{Cell types for gate level logic networks}
|
||||
\label{tab:CellLib_gates}
|
||||
\caption{Cell types for gate level logic networks (FFs with set and reset)}
|
||||
\label{tab:CellLib_gates_dffsr}
|
||||
\end{table}
|
||||
|
||||
Table~\ref{tab:CellLib_gates} lists all cell types used for gate level logic. The cell types
|
||||
\begin{table}[t]
|
||||
\hfil
|
||||
\begin{tabular}[t]{lllll}
|
||||
$ClkEdge$ & $SetLvl$ & $RstLvl$ & $EnLvl$ & Cell Type \\
|
||||
\hline
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_NNNN\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_NNNP\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_NNPN\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_NNPP\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_NPNN\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_NPNP\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_NPPN\_} \\
|
||||
\lstinline[language=Verilog];negedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_NPPP\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_PNNN\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_PNNP\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_PNPN\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_PNPP\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_PPNN\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_PPNP\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];0; & {\tt \$\_DFFSRE\_PPPN\_} \\
|
||||
\lstinline[language=Verilog];posedge; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & \lstinline[language=Verilog];1; & {\tt \$\_DFFSRE\_PPPP\_} \\
|
||||
\end{tabular}
|
||||
\caption{Cell types for gate level logic networks (FFs with set and reset and enable)}
|
||||
\label{tab:CellLib_gates_dffsre}
|
||||
\end{table}
|
||||
|
||||
Tables~\ref{tab:CellLib_gates}, \ref{tab:CellLib_gates_dffe}, \ref{tab:CellLib_gates_adff}, \ref{tab:CellLib_gates_adffe}, \ref{tab:CellLib_gates_dffsr} and \ref{tab:CellLib_gates_dffsre} list all cell types used for gate level logic. The cell types
|
||||
{\tt \$\_NOT\_}, {\tt \$\_AND\_}, {\tt \$\_NAND\_}, {\tt \$\_ANDNOT\_}, {\tt \$\_OR\_}, {\tt \$\_NOR\_},
|
||||
{\tt \$\_ORNOT\_}, {\tt \$\_XOR\_}, {\tt \$\_XNOR\_} and {\tt \$\_MUX\_} are used to model combinatorial logic.
|
||||
The cell type {\tt \$\_TBUF\_} is used to model tristate logic.
|
||||
|
@ -563,8 +642,61 @@ otherwise.
|
|||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
The cell types {\tt \$\_DFFSR\_NNN\_}, {\tt \$\_DFFSR\_NNP\_}, {\tt \$\_DFFSR\_NPN\_}, {\tt \$\_DFFSR\_NPP\_},
|
||||
{\tt \$\_DFFSR\_PNN\_}, {\tt \$\_DFFSR\_PNP\_}, {\tt \$\_DFFSR\_PPN\_} and {\tt \$\_DFFSR\_PPP\_} implement
|
||||
The cell types {\tt \$\_SDFF\_NN0\_}, {\tt \$\_SDFF\_NN1\_}, {\tt \$\_SDFF\_NP0\_}, {\tt \$\_SDFF\_NP1\_},
|
||||
{\tt \$\_SDFF\_PN0\_}, {\tt \$\_SDFF\_PN1\_}, {\tt \$\_SDFF\_PP0\_} and {\tt \$\_SDFF\_PP1\_} implement
|
||||
d-type flip-flops with synchronous reset. The values in the table for these cell types relate to the
|
||||
following Verilog code template:
|
||||
|
||||
\begin{lstlisting}[mathescape,language=Verilog]
|
||||
always @($ClkEdge$ C)
|
||||
if (R == $RstLvl$)
|
||||
Q <= $RstVal$;
|
||||
else
|
||||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
The cell types {\tt \$\_DFFE\_[NP][NP][01][NP]\_} implement
|
||||
d-type flip-flops with asynchronous reset and enable. The values in the table for these cell types relate to the
|
||||
following Verilog code template, where \lstinline[mathescape,language=Verilog];$RstEdge$; is \lstinline[language=Verilog];posedge;
|
||||
if \lstinline[mathescape,language=Verilog];$RstLvl$; if \lstinline[language=Verilog];1;, and \lstinline[language=Verilog];negedge;
|
||||
otherwise.
|
||||
|
||||
\begin{lstlisting}[mathescape,language=Verilog]
|
||||
always @($ClkEdge$ C, $RstEdge$ R)
|
||||
if (R == $RstLvl$)
|
||||
Q <= $RstVal$;
|
||||
else if (EN == $EnLvl$)
|
||||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
The cell types {\tt \$\_SDFFE\_[NP][NP][01][NP]\_} implement d-type flip-flops
|
||||
with synchronous reset and enable, with reset having priority over enable.
|
||||
The values in the table for these cell types relate to the
|
||||
following Verilog code template:
|
||||
|
||||
\begin{lstlisting}[mathescape,language=Verilog]
|
||||
always @($ClkEdge$ C)
|
||||
if (R == $RstLvl$)
|
||||
Q <= $RstVal$;
|
||||
else if (EN == $EnLvl$)
|
||||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
The cell types {\tt \$\_SDFFCE\_[NP][NP][01][NP]\_} implement d-type flip-flops
|
||||
with synchronous reset and enable, with enable having priority over reset.
|
||||
The values in the table for these cell types relate to the
|
||||
following Verilog code template:
|
||||
|
||||
\begin{lstlisting}[mathescape,language=Verilog]
|
||||
always @($ClkEdge$ C)
|
||||
if (EN == $EnLvl$)
|
||||
if (R == $RstLvl$)
|
||||
Q <= $RstVal$;
|
||||
else
|
||||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
The cell types {\tt \$\_DFFSR\_[NP][NP][NP]\_} implement
|
||||
d-type flip-flops with asynchronous set and reset. The values in the table for these cell types relate to the
|
||||
following Verilog code template, where \lstinline[mathescape,language=Verilog];$RstEdge$; is \lstinline[language=Verilog];posedge;
|
||||
if \lstinline[mathescape,language=Verilog];$RstLvl$; if \lstinline[language=Verilog];1;, \lstinline[language=Verilog];negedge;
|
||||
|
@ -582,6 +714,24 @@ otherwise.
|
|||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
The cell types {\tt \$\_DFFSRE\_[NP][NP][NP][NP]\_} implement
|
||||
d-type flip-flops with asynchronous set and reset and enable. The values in the table for these cell types relate to the
|
||||
following Verilog code template, where \lstinline[mathescape,language=Verilog];$RstEdge$; is \lstinline[language=Verilog];posedge;
|
||||
if \lstinline[mathescape,language=Verilog];$RstLvl$; if \lstinline[language=Verilog];1;, \lstinline[language=Verilog];negedge;
|
||||
otherwise, and \lstinline[mathescape,language=Verilog];$SetEdge$; is \lstinline[language=Verilog];posedge;
|
||||
if \lstinline[mathescape,language=Verilog];$SetLvl$; if \lstinline[language=Verilog];1;, \lstinline[language=Verilog];negedge;
|
||||
otherwise.
|
||||
|
||||
\begin{lstlisting}[mathescape,language=Verilog]
|
||||
always @($ClkEdge$ C, $RstEdge$ R, $SetEdge$ S)
|
||||
if (R == $RstLvl$)
|
||||
Q <= 0;
|
||||
else if (S == $SetLvl$)
|
||||
Q <= 1;
|
||||
else if (E == $EnLvl$)
|
||||
Q <= D;
|
||||
\end{lstlisting}
|
||||
|
||||
In most cases gate level logic networks are created from RTL networks using the {\tt techmap} pass. The flip-flop cells
|
||||
from the gate level logic network can be mapped to physical flip-flop cells from a Liberty file using the {\tt dfflibmap}
|
||||
pass. The combinatorial logic cells can be mapped to physical cells from a Liberty file via ABC \citeweblink{ABC}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue