mirror of https://github.com/YosysHQ/yosys.git
Progress in presentation
This commit is contained in:
parent
7ac524e8e8
commit
9c29969bbc
|
@ -239,6 +239,51 @@ show -color red @cone_ab -color magenta @cone_a -color blue @cone_b
|
||||||
\subsectionpagesuffix
|
\subsectionpagesuffix
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
||||||
|
\subsubsection{Introduction to techmap}
|
||||||
|
|
||||||
|
\begin{frame}{\subsubsecname}
|
||||||
|
\begin{itemize}
|
||||||
|
\item
|
||||||
|
The {\tt techmap} command replaces cells in the design with implementations given
|
||||||
|
as verilog code (called ``map files''). It can replace Yosys' internal cell
|
||||||
|
types (such as {\tt \$or}) as well as user-defined cell types.
|
||||||
|
\medskip\item
|
||||||
|
Verilog parameters are used extensively to customize the internal cell types.
|
||||||
|
\medskip\item
|
||||||
|
Additional special parameters are used by techmap to communicate meta-data to the
|
||||||
|
map files.
|
||||||
|
\medskip\item
|
||||||
|
Special wires are used to instruct techmap how to handle a module in the map file.
|
||||||
|
\medskip\item
|
||||||
|
Generate blocks and recursion are powerful tools for writing map files.
|
||||||
|
\end{itemize}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}[t]{\subsubsecname -- Example 1/2}
|
||||||
|
\vskip-0.2cm
|
||||||
|
To map the Verilog OR-reduction operator to 3-input OR gates:
|
||||||
|
\vskip-0.2cm
|
||||||
|
\begin{columns}
|
||||||
|
\column[t]{0.35\linewidth}
|
||||||
|
\lstinputlisting[xleftmargin=0.5cm, basicstyle=\ttfamily\fontsize{7pt}{8pt}\selectfont, language=verilog, lastline=24]{PRESENTATION_ExAdv/red_or3x1_map.v}
|
||||||
|
\column[t]{0.65\linewidth}
|
||||||
|
\lstinputlisting[xleftmargin=0.5cm, basicstyle=\ttfamily\fontsize{7pt}{8pt}\selectfont, language=verilog, firstline=25]{PRESENTATION_ExAdv/red_or3x1_map.v}
|
||||||
|
\end{columns}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
|
\begin{frame}[t]{\subsubsecname -- Example 2/2}
|
||||||
|
\vbox to 0cm{
|
||||||
|
\hfil\includegraphics[width=10cm,trim=0 0cm 0 0cm]{PRESENTATION_ExAdv/red_or3x1.pdf}
|
||||||
|
\vss
|
||||||
|
}
|
||||||
|
\begin{columns}
|
||||||
|
\column[t]{6cm}
|
||||||
|
\column[t]{4cm}
|
||||||
|
\vskip-0.6cm\lstinputlisting[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=ys, firstline=4, lastline=4, frame=single]{PRESENTATION_ExAdv/red_or3x1_test.ys}
|
||||||
|
\vskip-0.2cm\lstinputlisting[basicstyle=\ttfamily\fontsize{8pt}{10pt}\selectfont, language=verilog]{PRESENTATION_ExAdv/red_or3x1_test.v}
|
||||||
|
\end{columns}
|
||||||
|
\end{frame}
|
||||||
|
|
||||||
\subsubsection{TBD}
|
\subsubsection{TBD}
|
||||||
|
|
||||||
\begin{frame}{\subsubsecname}
|
\begin{frame}{\subsubsecname}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
|
|
||||||
all: select_01.pdf
|
all: select_01.pdf red_or3x1.pdf
|
||||||
|
|
||||||
select_01.pdf: select_01.v select_01.ys
|
select_01.pdf: select_01.v select_01.ys
|
||||||
../../yosys select_01.ys
|
../../yosys select_01.ys
|
||||||
|
|
||||||
|
red_or3x1.pdf: red_or3x1_*
|
||||||
|
../../yosys red_or3x1_test.ys
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
module OR3X1(A, B, C, Y);
|
||||||
|
input A, B, C;
|
||||||
|
output Y;
|
||||||
|
assign Y = A | B | C;
|
||||||
|
endmodule
|
|
@ -0,0 +1,48 @@
|
||||||
|
module \$reduce_or (A, Y);
|
||||||
|
|
||||||
|
parameter A_SIGNED = 0;
|
||||||
|
parameter A_WIDTH = 0;
|
||||||
|
parameter Y_WIDTH = 0;
|
||||||
|
|
||||||
|
input [A_WIDTH-1:0] A;
|
||||||
|
output [Y_WIDTH-1:0] Y;
|
||||||
|
|
||||||
|
function integer min;
|
||||||
|
input integer a, b;
|
||||||
|
begin
|
||||||
|
if (a < b)
|
||||||
|
min = a;
|
||||||
|
else
|
||||||
|
min = b;
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
genvar i;
|
||||||
|
generate begin
|
||||||
|
if (A_WIDTH == 0) begin
|
||||||
|
assign Y = 0;
|
||||||
|
end
|
||||||
|
if (A_WIDTH == 1) begin
|
||||||
|
assign Y = A;
|
||||||
|
end
|
||||||
|
if (A_WIDTH == 2) begin
|
||||||
|
wire ybuf;
|
||||||
|
OR3X1 g (.A(A[0]), .B(A[1]), .C(1'b0), .Y(ybuf));
|
||||||
|
assign Y = ybuf;
|
||||||
|
end
|
||||||
|
if (A_WIDTH == 3) begin
|
||||||
|
wire ybuf;
|
||||||
|
OR3X1 g (.A(A[0]), .B(A[1]), .C(A[2]), .Y(ybuf));
|
||||||
|
assign Y = ybuf;
|
||||||
|
end
|
||||||
|
if (A_WIDTH > 3) begin
|
||||||
|
localparam next_stage_sz = (A_WIDTH+2) / 3;
|
||||||
|
wire [next_stage_sz-1:0] next_stage;
|
||||||
|
for (i = 0; i < next_stage_sz; i = i+1) begin
|
||||||
|
localparam bits = min(A_WIDTH - 3*i, 3);
|
||||||
|
assign next_stage[i] = |A[3*i +: bits];
|
||||||
|
end
|
||||||
|
assign Y = |next_stage;
|
||||||
|
end
|
||||||
|
end endgenerate
|
||||||
|
endmodule
|
|
@ -0,0 +1,5 @@
|
||||||
|
module test (A, Y);
|
||||||
|
input [6:0] A;
|
||||||
|
output Y;
|
||||||
|
assign Y = |A;
|
||||||
|
endmodule
|
|
@ -0,0 +1,7 @@
|
||||||
|
read_verilog red_or3x1_test.v
|
||||||
|
hierarchy -check -top test
|
||||||
|
|
||||||
|
techmap -map red_or3x1_map.v;;
|
||||||
|
|
||||||
|
splitnets -ports
|
||||||
|
show -prefix red_or3x1 -format pdf -notitle -lib red_or3x1_cells.v
|
Loading…
Reference in New Issue