mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
Merge pull request #1885 from Xiretza/mod-rem-cells
Fix modulo/remainder semantics
This commit is contained in:
commit
94c1035389
26 changed files with 540 additions and 40 deletions
|
@ -139,6 +139,8 @@ Verilog & Cell Type \\
|
|||
\lstinline[language=Verilog]; Y = A * B; & {\tt \$mul} \\
|
||||
\lstinline[language=Verilog]; Y = A / B; & {\tt \$div} \\
|
||||
\lstinline[language=Verilog]; Y = A % B; & {\tt \$mod} \\
|
||||
\multicolumn{1}{c}{\tt [N/A]} & {\tt \$divfloor} \\
|
||||
\multicolumn{1}{c}{\tt [N/A]} & {\tt \$modfoor} \\
|
||||
\lstinline[language=Verilog]; Y = A ** B; & {\tt \$pow} \\
|
||||
\end{tabular}
|
||||
\caption{Cell types for binary operators with their corresponding Verilog expressions.}
|
||||
|
@ -161,6 +163,27 @@ For the binary cells that output a logical value ({\tt \$logic\_and}, {\tt \$log
|
|||
{\tt \$gt}), when the \B{Y\_WIDTH} parameter is greater than 1, the output is zero-extended,
|
||||
and only the least significant bit varies.
|
||||
|
||||
Division and modulo cells are available in two rounding modes. The original {\tt \$div} and {\tt \$mod}
|
||||
cells are based on truncating division, and correspond to the semantics of the verilog {\tt /} and
|
||||
{\tt \%} operators. The {\tt \$divfloor} and {\tt \$modfloor} cells represent flooring division and
|
||||
flooring modulo, the latter of which is also known as ``remainder'' in several languages. See
|
||||
table~\ref{tab:CellLib_divmod} for a side-by-side comparison between the different semantics.
|
||||
|
||||
\begin{table}[h]
|
||||
\hfil
|
||||
\begin{tabular}{lr|rr|rr}
|
||||
\multirow{2}{*}{Division} & \multirow{2}{*}{Result} & \multicolumn{2}{c|}{Truncating} & \multicolumn{2}{c}{Flooring} \\
|
||||
& & {\tt \$div} & {\tt \$mod} & {\tt \$divfloor} & {\tt \$modfloor} \\
|
||||
\hline
|
||||
{\tt -10 / 3} & {\tt -3.3} & {\tt -3} & {\tt -1} & {\tt -4} & {\tt 2} \\
|
||||
{\tt 10 / -3} & {\tt -3.3} & {\tt -3} & {\tt 1} & {\tt -4} & {\tt -2} \\
|
||||
{\tt -10 / -3} & {\tt 3.3} & {\tt 3} & {\tt -1} & {\tt 3} & {\tt -1} \\
|
||||
{\tt 10 / 3} & {\tt 3.3} & {\tt 3} & {\tt 1} & {\tt 3} & {\tt 1} \\
|
||||
\end{tabular}
|
||||
\caption{Comparison between different rounding modes for division and modulo cells.}
|
||||
\label{tab:CellLib_divmod}
|
||||
\end{table}
|
||||
|
||||
\subsection{Multiplexers}
|
||||
|
||||
Multiplexers are generated by the Verilog HDL frontend for {\tt
|
||||
|
|
|
@ -307,7 +307,7 @@ cell name from the internal cell library:
|
|||
\begin{lstlisting}[xleftmargin=1cm, basicstyle=\ttfamily\fontsize{6pt}{7pt}\selectfont]
|
||||
$not $pos $neg $and $or $xor $xnor $reduce_and $reduce_or $reduce_xor $reduce_xnor
|
||||
$reduce_bool $shl $shr $sshl $sshr $lt $le $eq $ne $eqx $nex $ge $gt $add $sub $mul $div $mod
|
||||
$pow $logic_not $logic_and $logic_or $mux $pmux $slice $concat $lut $assert $sr $dff
|
||||
$divfloor $modfloor $pow $logic_not $logic_and $logic_or $mux $pmux $slice $concat $lut $assert $sr $dff
|
||||
$dffsr $adff $dlatch $dlatchsr $memrd $memwr $mem $fsm $_NOT_ $_AND_ $_OR_ $_XOR_ $_MUX_ $_SR_NN_
|
||||
$_SR_NP_ $_SR_PN_ $_SR_PP_ $_DFF_N_ $_DFF_P_ $_DFF_NN0_ $_DFF_NN1_ $_DFF_NP0_ $_DFF_NP1_ $_DFF_PN0_
|
||||
$_DFF_PN1_ $_DFF_PP0_ $_DFF_PP1_ $_DFFSR_NNN_ $_DFFSR_NNP_ $_DFFSR_NPN_ $_DFFSR_NPP_ $_DFFSR_PNN_
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue