%\documentclass[dvipdfmx,t,serif,mathserif,14pt]{beamer} % t: from top; serif: rmdefault
\documentclass[dvipdfmx,t,14pt]{beamer} % t: from top; serif: rmdefault
\usepackage{mybeamer}

\newcommand{\PDFTITLE}{論理回路入門（６）}
\newcommand{\PDFSUBJECT}{一年生秋学期}
\newcommand{\PDFAUTHOR}{法政大学情報科学部}
\newcommand{\PDFKEYWORDS}{マルチビット、マルチビットの加算、リップルキャリー加算器、桁上げ先見加算器、ツリー型桁上げ先見加算器の回路}

\date{2023 年 10 月 31 日 (火)}

\title{\PDFTITLE} % bottom PDFTITLE
\subtitle{マルチビット加算回路}
\author[\PDFAUTHOR]{李　亜民} % bottom PDFAUTHOR; titlepage Yamin Li

\hypersetup{
  pdftitle=\PDFTITLE,
  pdfsubject=\PDFSUBJECT,
  pdfauthor=\PDFAUTHOR,
  pdfkeywords=\PDFKEYWORDS
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\everymath={\sf}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{\PDFTITLE}
\begin{frame}
  \titlepage
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------------ SLIDE -
\input{mybackgroundcolor.tex}
%------------------------------------------------ SLIDE -
\section{マルチビット加算回路}
\begin{frame}\frametitle{\secname}
\color{blue}
ポイント

\begin{itemize}
\color{blue}
\setlength{\itemsep}{4mm}
\item マルチビット
\item マルチビットの加算
\item リップルキャリー加算器~(RCA)

\vspace{2mm}
RCA: Ripple-Carry Adder
\item 桁上げ先見加算器~(CLA)

\vspace{2mm}
CLA: Carry-Look-ahead Adder
\item ツリー型桁上げ先見加算器の回路
\end{itemize}

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：２進数の加算}
\begin{frame}\frametitle{\secname}
  \includegraphics[scale=1.5]{figs/add-1bit-calc.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：半加算器設計}
\begin{frame}\frametitle{\secname}
  \renewcommand{\arraystretch}{1.4}
  \fontsize{11pt}{13}\selectfont
  \setlength{\tabcolsep}{20pt}
  \begin{tabular}{cc||cc|c}
    \multicolumn{5}{c}{真理値表}\\\hline
    $a$&$b$&$c$&$s$&コメント\\\hline\hline
    0&0&\color{red}0&\color{blue}0&$0+0=\textcolor{red}{0}~\textcolor{blue}{0}$ ~(加算)\\\hline
    0&1&\color{red}0&\color{blue}1&$0+1=\textcolor{red}{0}~\textcolor{blue}{1}$ ~(加算)\\\hline
    1&0&\color{red}0&\color{blue}1&$1+0=\textcolor{red}{0}~\textcolor{blue}{1}$ ~(加算)\\\hline
    1&1&\color{red}1&\color{blue}0&$1+1=\textcolor{red}{1}~\textcolor{blue}{0}$ ~(加算)\\\hline
  \end{tabular}

  \vspace{6mm}
  論理式

  \color{red}
  \vspace{3mm}
  $c=a\cdot b$

  \color{blue}
  \vspace{3mm}
  $s = \overline{a}\cdot b + a\cdot \overline{b} = a\oplus b$

  \vspace{-17mm}
  \hspace*{55mm}
  \includegraphics[scale=.93]{figs/half_adder_karnaugh.pdf}

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：半加算器設計 (回路)}
\begin{frame}[fragile]\frametitle{\secname}
  論理式~~~~~~
  $c=a\cdot b$

  \vspace{3mm}
  \hspace*{23.15mm}
  $s = \overline{a}\cdot b + a\cdot \overline{b} = a\oplus b$

\vspace{5.9mm}
Verilog HDLによる回路（\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/half_adder.v}{\color{blue}\underline{half\_adder.v}}）

\fontsize{11pt}{12}\selectfont

\vspace{2.7mm}
\begin{code}
`timescale 1ns/1ns

module half_adder (a, b, c, s);
    input  a, b;
    output c, s;

    assign c = a & b; // AND
    assign s = a ^ b; // XOR

endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/half_adder.v}{\color{blue}\underline{half\_adder.v}}~~~

\vspace{-71mm}
\hspace*{90mm}
\includegraphics[]{figs/halfadd.pdf}

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：半加算器設計 (テストベンチ)}
\begin{frame}[fragile]\frametitle{\secname}
\fontsize{11pt}{12}\selectfont

\begin{code}
`timescale 1ns/1ns
module half_adder_tb;
    reg  a, b;
    wire c, s;
    half_adder ha (a, b, c, s);
    initial begin
        #0 a = 0;
        #0 b = 0;
        #4 $finish;
    end
    always #1 a = ~a;
    always #2 b = ~b;
    initial begin
        $dumpfile ("half_adder.vcd");
        $dumpvars;
    end
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/half_adder_tb.v}{\color{blue}\underline{half\_adder\_tb.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：半加算器設計 (波形)}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o half_adder \
  half_adder_tb.v half_adder.v
% ./half_adder
% gtkwave half_adder.vcd
\end{verbatim}

  \includegraphics[width=.8\textwidth]{figs/half_adder_vcd.png}

    \fontsize{8pt}{10}\selectfont
    \hspace{23.0mm}$a$\phantom{$+$}$b$\phantom{$=$}\,$cs$
    \hspace{03.8mm}$a$\phantom{$+$}$b$\phantom{$=$}\,$cs$
    \hspace{03.8mm}$a$\phantom{$+$}$b$\phantom{$=$}\,$cs$
    \hspace{03.8mm}$a$\phantom{$+$}$b$\phantom{$=$}\,$cs$

  \mbox{
    \color{red}\hspace{22.0mm}$0$$+$$0$$=$$00$
    \color{blue}\hspace{2.8mm}$1$$+$$0$$=$$01$
    \color{red} \hspace{2.8mm}$0$$+$$1$$=$$01$
    \color{blue}\hspace{2.8mm}$1$$+$$1$$=$$10$
  }

  \fontsize{7pt}{9}\selectfont
  \color{magenta}
  \vspace{-26.6mm}
  \hspace*{28mm}
  0\hspace{15mm}1\hspace{15mm}0\hspace{15mm}1

  \vspace{.15mm}
  \hspace*{28mm}
  0\hspace{15mm}0\hspace{15mm}1\hspace{15mm}1

  \vspace{.15mm}
  \hspace*{28mm}
  0\hspace{15mm}0\hspace{15mm}0\hspace{15mm}1

  \vspace{.15mm}
  \hspace*{28mm}
  0\hspace{15mm}1\hspace{15mm}1\hspace{15mm}0

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器設計}
\begin{frame}\frametitle{\secname}
\fontsize{11pt}{13}\selectfont
  \includegraphics[width=.95\textwidth]{figs/4bit_add.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器の真理値表}
\begin{frame}\frametitle{\secname}
\fontsize{10pt}{13}\selectfont
  input $a$, $b$, $ci$; // $ci$: carry in ({\small{下位桁からの繰り上がり}})

  output $co$, $s$; // $co$: carry out ({\small{上位桁への繰り上がり}}), $s$: sum ({\small{和}})

  \vspace{3mm}
  \small
  \renewcommand{\arraystretch}{.8}
  \setlength{\tabcolsep}{13pt}
  \begin{tabular}{ccc||cc|c}\hline
    \rule{0pt}{.8\normalbaselineskip}$a$&$b$&$ci$&$co$&$s$&コメント\\\hline\hline
    \rule{0pt}{.8\normalbaselineskip}0&0&0&\color{red}0&\color{blue}0&$0+0+0=\textcolor{red}{0}~\textcolor{blue}{0}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}0&0&1&\color{red}0&\color{blue}1&$0+0+1=\textcolor{red}{0}~\textcolor{blue}{1}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}0&1&0&\color{red}0&\color{blue}1&$0+1+0=\textcolor{red}{0}~\textcolor{blue}{1}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}0&1&1&\color{red}1&\color{blue}0&$0+1+1=\textcolor{red}{1}~\textcolor{blue}{0}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}1&0&0&\color{red}0&\color{blue}1&$1+0+0=\textcolor{red}{0}~\textcolor{blue}{1}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}1&0&1&\color{red}1&\color{blue}0&$1+0+1=\textcolor{red}{1}~\textcolor{blue}{0}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}1&1&0&\color{red}1&\color{blue}0&$1+1+0=\textcolor{red}{1}~\textcolor{blue}{0}$ ~(加算)\\\hline
    \rule{0pt}{.8\normalbaselineskip}1&1&1&\color{red}1&\color{blue}1&$1+1+1=\textcolor{red}{1}~\textcolor{blue}{1}$ ~(加算)\\\hline
  \end{tabular}

  \vspace{3mm}
%  出力の\,co、s\,は\,$a+b+ci$\,の結果~(和) を２進数で表した数値。

%  $00_2 = 0_{10}$ ~~~~~~~~ $01_2 = 1_{10}$ ~~~~~~~~ $10_2 = 2_{10}$ ~~~~~~~~ $11_2 = 3_{10}$  

  \hspace*{3mm}$s=
  \overline{a} \ \overline{b} \ ci +
  \overline{a} \ b \ \overline{ci} +
  a \ \overline{b} \ \overline{ci} +
  a \ b \ ci$ \hfill 最小項の論理和~

  $co=
  \overline{a} \ b \ ci +
  a \ \overline{b} \ ci +
  a \ b \ \overline{ci} +
  a \ b \ ci$ \hfill 最小項の論理和~

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器設計}
\begin{frame}\frametitle{\secname}
  真理値表から論理式をつくる

  \textcolor{blue}{\ \ \ \ \ \ \ \ --- どの組み合わせで出力が\,１\,になるか}

  \vspace{2mm}
  カルノー図による論理式を簡単化する~(co)

  \vspace{-2mm}
  \begin{center}
    \includegraphics{figs/add1karnaugh.pdf}
  \end{center}

  \vspace{-2mm}
  \setlength{\tabcolsep}{2pt}
  \begin{tabular}{rcl}
    $co$ & $=$ & $a \ b + a \ ci + b \ ci$  \textcolor{magenta}{(二つの入力が11であれば)}\\
    $s$ & $=$ & $a \ \overline{b} \ \overline{ci} + \overline{a} \ b \ \overline{ci}
    + \overline{a} \ \overline{b} \ ci + a \ b \ ci$\\
  \end{tabular}
\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器設計 (回路)}
\begin{frame}[fragile]\frametitle{\secname}
  \setlength{\tabcolsep}{2pt}
  \begin{tabular}{rcl}
    $co$ & $=$ & $a \ b + a \ ci + b \ ci$  \textcolor{magenta}{(二つの入力が11であれば)}\\
    $s$ & $=$ & $a \ \overline{b} \ \overline{ci} + \overline{a} \ b \ \overline{ci}
    + \overline{a} \ \overline{b} \ ci + a \ b \ ci$\\
  \end{tabular}

  \vspace{2.49mm}
  \begin{center}
    \includegraphics{figs/add-1bit-circuit.pdf}
  \end{center}
  
\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器設計 (回路)}
\begin{frame}[fragile]\frametitle{\secname}
  \setlength{\tabcolsep}{2pt}
  \begin{tabular}{rcl}
    $co$ & $=$ & $a \ b + a \ ci + b \ ci$  \textcolor{magenta}{(二つの入力が11であれば)}\\
    $s$ & $=$ & $a \ \overline{b} \ \overline{ci} + \overline{a} \ b \ \overline{ci}
    + \overline{a} \ \overline{b} \ ci + a \ b \ ci$\\
  \end{tabular}

  \vspace{2.48mm}
\fontsize{11pt}{12}\selectfont
\begin{code}
`timescale 1ns/1ns

module fa (a, b, ci, co, s);
    input  a, b, ci;
    output co, s;

    assign co = a & b | a & ci | b & ci;

    assign s =  a & ~b & ~ci |
               ~a &  b & ~ci | 
               ~a & ~b &  ci |
                a &  b &  ci;

endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/fa.v}{\color{blue}\underline{fa.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器設計 (テストベンチ)}
\begin{frame}[fragile]\frametitle{\secname}
\fontsize{11pt}{12}\selectfont
\begin{code}
`timescale 1ns/1ns
module fa_tb;
    reg  a, b, ci;
    wire co, s;
    fa fadder (a, b, ci, co, s);
    initial begin
        #0 a  = 0; b  = 0; ci = 0;
        #8 $finish;
    end
    always #1 a  = ~a;
    always #2 b  = ~b;
    always #4 ci = ~ci;
    initial begin
        $dumpfile ("fa.vcd");
        $dumpvars;
    end
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/fa_tb.v}{\color{blue}\underline{fa\_tb.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：全加算器設計 (波形)}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o fa fa_tb.v fa.v
% ./fa
% gtkwave fa.vcd
\end{verbatim}

  \includegraphics[width=.85\textwidth]{figs/fa_vcd.png}

  \color{red}
  \fontsize{11pt}{13}\selectfont
\vspace{-7mm}
  \hspace*{29mm} $\Uparrow$ \hspace{53mm} $\Uparrow$

  \hspace*{15mm} $0+0+0=00_2$ \hspace{26mm} $1+1+1=11_2$
\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：半加算器を用いた全加算器}
\begin{frame}\frametitle{\secname}
  全加算器は、２つの半加算器と１つの\,OR\,回路を用いて構成することができる。 

  \vspace{36mm}
  \includegraphics[width=\textwidth]{figs/fa_2ha.pdf}

  \vspace{-56mm}
  \fontsize{13pt}{15}\selectfont
  \setlength{\tabcolsep}{2pt}
  \begin{tabular}{rcl}
    $s$ & $=$ & $a \ \overline{b} \ \overline{ci} + \overline{a} \ b \ \overline{ci}
    + \overline{a} \ \overline{b} \ ci + a \ b \ ci$\\
    & $=$ & $\textcolor{red}{\mbox{(}a\oplus b\mbox{)} \oplus ci=s0 \oplus ci}$\\

    $co$ & $=$ & $\overline{a} \ b \ ci + a \ \overline{b} \ ci + a \ b \ \overline{ci} + a \ b \ ci$\\
    & $=$ & $\mbox{(}\overline{a} \ b + a \ \overline{b}\mbox{)} \ ci + a \ b \ \mbox{(}\overline{ci} + ci\mbox{)}$\\
    & $=$ & $\textcolor{red}{\mbox{(}a \oplus b\mbox{)} \ ci + a \ b = s0 \ ci + a \ b = c1 + c0}$ 
  \end{tabular}

\color{blue}

\vspace{-27.5mm}
\hspace*{93mm}
$s0=a\oplus b$

\hspace*{93mm}
$c0=a \ \ b$

\hspace*{93mm}
$c1=s0 \ \ ci$

\end{frame}
%------------------------------------------------ SLIDE -
\section{復習：半加算器を用いた全加算器}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-6mm}
\begin{verbatim}
% iverilog -Wall -o add1 \
  add1_tb.v add1.v half_adder.v
% ./add1
% gtkwave add1.vcd
\end{verbatim}

\vspace{-2mm}
  \includegraphics[width=.85\textwidth]{figs/add1_vcd.png}

  \color{red}
  \fontsize{11pt}{13}\selectfont
\vspace{-9mm}
  \hspace*{29mm} $\Uparrow$ \hspace{53mm} $\Uparrow$

  \hspace*{15mm} $0+0+0=00_2$ \hspace{26mm} $1+1+1=11_2$

\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (４ビットの加算)}
\begin{frame}\frametitle{\secname}
  ４ビットの加算

\includegraphics[scale=1.05]{figs/multibit-4.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (信号の名前と回路)}
\begin{frame}\frametitle{\secname}
  ４ビットの加算（信号の名前と回路）

\includegraphics[scale=1.05]{figs/multibit4.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (問題点)}
\begin{frame}\frametitle{\secname}
  ４ビットの加算（入力信号８本、出力信号４本）

\includegraphics[scale=1.05]{figs/multibit_41.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (ビットの幅)}
\begin{frame}\frametitle{\secname}
  ４ビットの加算（入力信号８本、出力信号４本）

\includegraphics[scale=1.05]{figs/multibit_4.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (add4 回路)}
\begin{frame}[fragile]\frametitle{\secname}
\includegraphics[width=\textwidth]{figs/add4.pdf}
\fontsize{8pt}{8.8}\selectfont

\vspace{1.85mm}
\begin{code}
`timescale 1ns/1ns
module add4 (A, B, CI, CO, S);
    input        CI;
    input  [3:0] A, B;
    output       CO;
    output [3:0] S;

    wire   [2:0] C;

    // add1 (a,    b,    ci,   co,   s);
    add1 i0 (A[0], B[0], CI,   C[0], S[0]);
    add1 i1 (A[1], B[ ],     ,     , S[ ]);
    add1 i2 (A[2], B[ ],     ,     , S[ ]);
    add1 i3 (A[3], B[ ],     , CO,   S[ ]);
endmodule
\end{code}

\vspace{-7mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add4.v}{\color{blue}\underline{add4.v}}~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (add4 テストベンチ)}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-2mm}
\fontsize{8pt}{8.8}\selectfont
\begin{code}
`timescale 1ns/1ns
module add4_tb;
    reg        CI;
    reg [3:0]  A, B;
    wire       CO;
    wire [3:0] S;
    add4 i0 (A, B, CI, CO, S);
    integer    i, j, k;
    initial begin
        for (i = 0; i < 16; i = i + 1) begin
            for (j = 0; j < 16; j = j + 1) begin
                for (k = 0; k < 2; k = k + 1) begin
                    A = i; B = j; CI = k; 
                    #1 ;
                end
            end
        end
        #1 $finish;
    end
    initial begin
        $dumpfile ("add4.vcd");
        $dumpvars;
    end
endmodule
\end{code}

\vspace{-7mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add4_tb.v}{\color{blue}\underline{add4\_tb.v}}~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット (add4 波形)}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o add4 add4_tb.v \
  add4.v add1.v half_adder.v
% ./add4
% gtkwave add4.vcd
\end{verbatim}

\blue

\includegraphics[width=\textwidth]{figs/add4_vcd1_crop.png}

\hspace*{18mm}
\{CO,S[3:0]\} $=$ A[3:0] $+$ B[3:0] $+$ CI

\vspace{3mm}
\includegraphics[width=\textwidth]{figs/add4_vcd2_crop.png}

\hspace*{18mm}
\{CO,S[3:0]\} $=$ A[3:0] $+$ B[3:0] $+$ CI

\end{frame}
%------------------------------------------------ SLIDE -
\section{リップルキャリー加算器~(RCA)}
\begin{frame}\frametitle{\secname}
\fontsize{13pt}{15}\selectfont
リップルキャリーアダー~(Ripple Carry Adder --- RCA)

\vspace{0.5mm}
\includegraphics[width=\textwidth]{figs/add32bit.pdf}

\vspace{2mm}
\mbox{\textcolor{red}{キャリー信号が下位の桁(右)から順番に上がってくる(左へ)。}}

\textcolor{red}{したがって計算速度が遅い。}

\color{blue}
\vspace{-64mm}
\hspace*{35mm}
又は：桁上げ伝搬加算器
\end{frame}
%------------------------------------------------ SLIDE -
\section{桁上げ先見加算器~(CLA)}
\begin{frame}\frametitle{\secname}
\fontsize{13pt}{15}\selectfont
桁上げ先見加算器~(Carry Lookahead Adder --- CLA)

\vspace{2mm}
\tabcolsep = 2pt
\renewcommand{\arraystretch}{1}
\begin{tabular}{lcl}
$C_{i}$ &$=$& $A_{i}\cdot B_{i} + A_{i}\cdot C_{i-1} + B_{i}\cdot C_{i-1}$\\
        &$=$& $A_{i}\cdot B_{i} + \mbox{(}A_{i} + B_{i}\mbox{)}\cdot C_{i-1}$\\
        &$=$& $\textcolor{red}{G_{i}} + \textcolor{red}{P_{i}}\cdot C_{i-1}$\\[7pt]

\textcolor{red}{$G_{i}$} &\textcolor{red}{$=$}& \textcolor{red}{$A_{i}\cdot B_{i}$} \hspace{18.2mm} Carry generator (桁上げ発生器)\\
\textcolor{red}{$P_{i}$} &\textcolor{red}{$=$}& \textcolor{red}{$A_{i} + B_{i}$} \ \ \ \ \ \ \ \ \ \ \ \ Carry propagator (桁上げ伝播器)\\[5.72pt]

%\color{blue}$C_{i}$   &\color{blue}$=$&\color{blue} $G_{i} + P_{i} \cdot C_{i-1}$\\
\color{blue}$C_{i-1}$ &\color{blue}$=$&\color{blue} $G_{i-1} + P_{i-1} \cdot C_{i-2}$\\
\color{blue}$C_{i-2}$ &\color{blue}$=$&\color{blue} $G_{i-2} + P_{i-2} \cdot C_{i-3}$\\
\color{blue}          &\color{blue}$\cdots$\\
\color{blue}$C_{1}$   &\color{blue}$=$&\color{blue} $G_{1} + P_{1} \cdot C_{0}$\\
\color{blue}$C_{0}$   &\color{blue}$=$&\color{blue} $G_{0} + P_{0} \cdot C_{-1}$ ~~~~~~~~~~~~~~~~~~~~~~~~~~\, ($C_{-1}$: Carry in CI)\\
\end{tabular}

\vspace{3mm}
すべての$C_{i}$、$i=0,1,\cdots, 31$を並列に(同時に)計算したい。
\end{frame}
%------------------------------------------------ SLIDE -
\section{桁上げ先見加算器~(CLA)}
\begin{frame}\frametitle{\secname}
\fontsize{13pt}{15}\selectfont
\tabcolsep = 2pt
\renewcommand{\arraystretch}{1}
\begin{tabular}{lcl}
\color{blue}$C_{i}$   &\color{blue}$=$&\color{blue} $G_{i} + P_{i} \cdot C_{i-1}$\\
\color{blue}$C_{i-1}$ &\color{blue}$=$&\color{blue} $G_{i-1} + P_{i-1} \cdot C_{i-2}$\\
\color{blue}$C_{i-2}$ &\color{blue}$=$&\color{blue} $G_{i-2} + P_{i-2} \cdot C_{i-3}$\\
\color{blue}          &\color{blue}$\cdots$\\
\color{blue}$C_{1}$   &\color{blue}$=$&\color{blue} $G_{1} + P_{1} \cdot C_{0}$\\
\color{blue}$C_{0}$   &\color{blue}$=$&\textcolor{blue}{$G_{0} + P_{0} \cdot C_{-1}$}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~代入\\[6pt]

$C_{i}$ &$=$& $G_{i}$\\
        &$+$& $P_{i}\cdot G_{i-1}$\\
        &$+$& $P_{i}\cdot P_{i-1}\cdot G_{i-2}$\\
        &$+$& $\cdots$\\
        &$+$& $P_{i}\cdot P_{i-1}\cdot \cdots\cdot P_{1}\cdot G_{0}$\\
        &$+$& $P_{i}\cdot P_{i-1}\cdot \cdots\cdot P_{1}\cdot P_{0}\cdot C_{-1}$ \hspace{6.21mm} \textcolor{blue}{($C_{-1}$: Carry in CI)}
\end{tabular}

\vspace{3mm}
$C_{i}$の式は複雑すぎる。$i$が大きくなければOKである。
\end{frame}
%------------------------------------------------ SLIDE -
\section{桁上げ先見加算器~(CLA4)}
\begin{frame}\frametitle{\secname}
\fontsize{13pt}{15}\selectfont
\tabcolsep = 2pt
\vspace{-1.1mm}
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{lclclcl}
$G_0$ &$=$& $A_0 \cdot B_0$ &~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~& $P_0$ &$=$& $A_0 + B_0$\\
$G_1$ &$=$& $A_1 \cdot B_1$ &~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~& $P_1$ &$=$& $A_1 + B_1$\\
$G_2$ &$=$& $A_2 \cdot B_2$ &~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~& $P_2$ &$=$& $A_2 + B_2$\\
$G_3$ &$=$& $A_3 \cdot B_3$ &~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~& $P_3$ &$=$& $A_3 + B_3$\\
\end{tabular}

\vspace{5.25mm}
\begin{tabular}{lcl}
$C_{0}$ &$=$& $G_{0}+P_{0}\cdot C_{-1}$\\
$C_{1}$ &$=$& $G_{1}+P_{1}\cdot G_{0}+P_{1}\cdot P_{0}\cdot C_{-1}$\\
$C_{2}$ &$=$& $G_{2}+P_{2}\cdot G_{1}+P_{2}\cdot P_{1}\cdot G_{0}+P_{2}\cdot P_{1}\cdot P_{0}\cdot C_{-1}$\\
$C_{3}$ &$=$& $G_{3}+P_{3}\cdot G_{2}+P_{3}\cdot P_{2}\cdot G_{1}+P_{3}\cdot P_{2}\cdot P_{1}\cdot G_{0}$\\[-1 pt]
 &$+$& $P_{3}\cdot P_{2}\cdot P_{1}\cdot P_{0}\cdot C_{-1}$ \hspace{21.91mm} \textcolor{blue}{($C_{-1}$: Carry in CI)}\\
\end{tabular}

\vspace{2.54mm}
$C_{0}$
$C_{1}$
$C_{2}$
$C_{3}$を並列に計算する。回路は次のページにある。
\end{frame}
%------------------------------------------------ SLIDE -
\section{桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-2mm}
\fontsize{8pt}{8.8}\selectfont
\begin{code}
`timescale 1ns/1ns
module cla4 (A, B, CI, CO, S);
    input        CI;
    input  [3:0] A, B;
    output       CO;
    output [3:0] S;

    wire   [3:0] G = A & B;
    wire   [3:0] P = A | B;

    wire   [3:0] C;

    assign C[0] = G[0] | P[0]&CI;
    assign C[1] = G[1] | P[1]&G[0] | P[1]&P[0]&CI;
    assign C[2] = G[2] | P[2]&G[1] | P[2]&P[1]&G[0] | P[2]&P[1]&P[0]&CI;
    assign C[3] = G[3] | P[3]&G[2] | P[3]&P[2]&G[1] | P[3]&P[2]&P[1]&G[0]
                                                    | P[3]&P[2]&P[1]&P[0]&CI;
    assign S[0]  = A[0] ^ B[0] ^ CI;
    assign S[1]  = A[1] ^ B[1] ^ C[0];
    assign S[2]  = A[2] ^ B[2] ^ C[1];
    assign S[3]  = A[3] ^ B[3] ^ C[2];

    assign CO = C[3];
endmodule
\end{code}

\vspace{-7mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/cla4.v}{\color{blue}\underline{cla4.v}}~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{桁上げ先見加算器のテストベンチ}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-2mm}
\fontsize{8pt}{8.8}\selectfont
\begin{code}
`timescale 1ns/1ns
module cla4_tb;
    reg        CI;
    reg [3:0]  A, B;
    wire       CO;
    wire [3:0] S;
    cla4 i0 (A, B, CI, CO, S);
    integer    i, j, k;
    initial begin
        for (i = 0; i < 16; i = i + 1) begin
            for (j = 0; j < 16; j = j + 1) begin
                for (k = 0; k < 2; k = k + 1) begin
                    A = i; B = j; CI = k; 
                    #1 ;
                end
            end
        end
        #1 $finish;
    end
    initial begin
        $dumpfile ("cla4.vcd");
        $dumpvars;
    end
endmodule
\end{code}

\vspace{-7mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/cla4_tb.v}{\color{blue}\underline{cla4\_tb.v}}~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{桁上げ先見加算器の波形}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o cla4 cla4_tb.v \
  cla4.v add1.v half_adder.v
% ./cla4
% gtkwave cla4.vcd
\end{verbatim}

\blue

\includegraphics[width=\textwidth]{figs/cla4_vcd1_crop.png}

\hspace*{18mm}
\{CO,S[3:0]\} $=$ A[3:0] $+$ B[3:0] $+$ CI

\vspace{3mm}
\includegraphics[width=\textwidth]{figs/cla4_vcd2_crop.png}

\hspace*{18mm}
\{CO,S[3:0]\} $=$ A[3:0] $+$ B[3:0] $+$ CI

\end{frame}
%------------------------------------------------ SLIDE -
\section{CLA4 を使用する 16 ビット加算器}
\begin{frame}[fragile]\frametitle{\secname}
\includegraphics[width=\textwidth]{figs/add16.pdf}

\fontsize{8pt}{10}\selectfont
%キャリーはcla4内で並列、cla4間で直列である。

\vspace{-0.1mm}
\begin{code}
`timescale 1ns/1ns
module add16 (A, B, CI, CO, S);
    input         CI;
    input  [15:0] A, B;
    output        CO;
    output [15:0] S;
    wire          C3, C7, C11;
    // cla4 (A,        B,        CI,  CO,  S);
    cla4 i0 (A[3:0],   B[3:0],   CI,  C3,  S[3:0]);
    cla4 i1 (A[7:4],   B[7:4],   C3,  C7,  S[7:4]);
    cla4 i2 (A[11:8],  B[11:8],  C7,  C11, S[11:8]);
    cla4 i3 (A[15:12], B[15:12], C11, CO,  S[15:12]);
endmodule
\end{code}

\vspace{-7mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add16.v}{\color{blue}\underline{add16.v}}~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{CLA4 を使用する 16 ビット加算器}
\begin{frame}[fragile]\frametitle{\secname}
\fontsize{8pt}{10}\selectfont
\begin{code}
`timescale 1ns/1ns
module add16_tb;
    reg         CI;
    reg  [15:0] A, B;
    wire        CO;
    wire [15:0] S;
    add16 i0 (A, B, CI, CO, S);
    initial begin
        #0 A  = 16'h5555; B  = 16'haaaa; CI = 0;
        #1 CI = 1;
        #1 B  = 16'haaab; CI = 0;
        #1 CI = 1;
        #1 $finish;
    end

    initial begin
        $dumpfile ("add16.vcd");
        $dumpvars;
    end
endmodule
\end{code}

\vspace{-7mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add16_tb.v}{\color{blue}\underline{add16\_tb.v}}~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{CLA4 を使用する 16 ビット加算器}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o add16 add16_tb.v \
  add16.v add1.v half_adder.v
% ./add16
% gtkwave add16.vcd
\end{verbatim}

\blue

\includegraphics[width=\textwidth]{figs/add16_vcd_bin_crop.png}

\hspace*{11mm}
2進\hfill\textcolor{red}{A、B、S 各 16 ビット}

\vspace{7mm}
\fontsize{10pt}{13}\selectfont
\setlength{\tabcolsep}{4pt}

\begin{tabular}{lrrcrr}
    &  A[15:0] & 0101010101010101 &~~~~~~&& 0101010101010101\\
    &  B[15:0] & 1010101010101010 &&& 1010101010101010\\
$+$ &  CI      & 0                &&$+$& 1\\\cline{1-3}\cline{5-6}
    &  S[15:0] & 1111111111111111 &&& 0000000000000000\\
\end{tabular}
\end{frame}
%------------------------------------------------ SLIDE -
\section{CLA4 を使用する 16 ビット加算器}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o add16 add16_tb.v \
  add16.v add1.v half_adder.v
% ./add16
% gtkwave add16.vcd
\end{verbatim}

\blue

\includegraphics[width=\textwidth]{figs/add16_vcd_bin_crop.png}

\hspace*{11mm}
2進\hfill\textcolor{red}{A、B、S 各 16 ビット}

\vspace{7mm}
\fontsize{10pt}{13}\selectfont
\setlength{\tabcolsep}{4pt}

\begin{tabular}{lrrcrr}
    &  A[15:0] & 0101010101010101 &~~~~~~&& 0101010101010101\\
    &  B[15:0] & 1010101010101011 &&& 1010101010101011\\
$+$ &  CI      & 0                &&$+$& 1\\\cline{1-3}\cline{5-6}
    &  S[15:0] & 0000000000000000 &&& 0000000000000001\\
\end{tabular}
\end{frame}
%------------------------------------------------ SLIDE -
\section{CLA4 を使用する 16 ビット加算器}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o add16 add16_tb.v \
  add16.v add1.v half_adder.v
% ./add16
% gtkwave add16.vcd
\end{verbatim}

\blue

\includegraphics[width=\textwidth]{figs/add16_vcd_hex_crop.png}

\hspace*{11mm}
16進 \phantom{()}\hfill\textcolor{red}{A、B、S 各 16 ビット}

\vspace{6.72mm}
\fontsize{10pt}{13}\selectfont
\setlength{\tabcolsep}{4pt}

\begin{tabular}{lrcrccrccrccr}
    &  A[15:0] && 5555 &~~~~~~~&   & 5555 &~~~~~~~&   & 5555 &~~~~~~~&   & 5555 \\
    &  B[15:0] && AAAA &~~~~~~~&   & AAAA &~~~~~~~&   & AAAB &~~~~~~~&   & AAAB \\
$+$ &  CI      &&    0 &~~~~~~~&$+$&    1 &~~~~~~~&$+$&    0 &~~~~~~~&$+$&    1 \\\cline{1-4}\cline{6-7}\cline{9-10}\cline{12-13}
    &  S[15:0] && FFFF &~~~~~~~&   & 0000 &~~~~~~~&   & 0000 &~~~~~~~&   & 0001 \\
\end{tabular}
\end{frame}
%------------------------------------------------ SLIDE -
\section{CLA4 を使用する 16 ビット加算器}
\begin{frame}[fragile]\frametitle{\secname}
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o add16 add16_tb.v \
  add16.v add1.v half_adder.v
% ./add16
% gtkwave add16.vcd
\end{verbatim}

\blue

\includegraphics[width=\textwidth]{figs/add16_vcd_dec_crop.png}

\hspace*{11mm}
10進 (絶対値)\hfill\textcolor{red}{A、B、S 各 16 ビット}

\vspace{3mm}
\includegraphics[width=\textwidth]{figs/add16_vcd_sig_crop.png}

\hspace*{11mm}
10進 (整数)\hfill\textcolor{red}{A、B、S 各 16 ビット}

\end{frame}
%------------------------------------------------ SLIDE -
\section{Radix の例}
\begin{frame}\frametitle{\secname}
\includegraphics[width=\textwidth]{figs/add32_emacs.png}

\vspace{-15mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add32.c}{\darkmagenta\underline{add32.c}}~~~~~

\darkmagenta
\vspace{-41.77mm}
\hspace*{38mm}
$s=a+b$
\end{frame}
%------------------------------------------------ SLIDE -
\section{Radix の例}
\begin{frame}\frametitle{\secname}
\includegraphics[width=\textwidth]{figs/add32_terminal.png}

\color{darkmagenta}

\vspace{-50.2mm}
\hspace*{38mm}
$s=a+b$

\vspace{18.6mm}
\hspace*{24mm}
$\leftarrow$ Overflow \cdotfill (絶対値の表現)~~~~~

\vspace{9.1mm}
\hspace*{12mm}
$\leftarrow$ Okay \cdotfill (2の補数の表現)~~~~~
\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}\frametitle{\secname}
\includegraphics[width=\textwidth]{figs/cla_tree.pdf}

\vspace{5mm}
\renewcommand{\arraystretch}{1.2}
\setlength{\tabcolsep}{3pt}
\begin{tabular}{llll}
\textcolor{blue}{add:} &\textcolor{teal}{$s = a\oplus b\oplus c$}&\textcolor{blue}{~~~~~gp:} &\textcolor{violet}{$co = g\mbox{[}0\mbox{]} + p\mbox{[}0\mbox{]}\cdot  ci$}\\
     &\textcolor{teal}{$g = a \cdot  b$} & &\textcolor{violet}{$go = g\mbox{[}1\mbox{]} + p\mbox{[}1\mbox{]}\cdot g\mbox{[}0\mbox{]}$}\\
     &\textcolor{teal}{$p = a + b$}      & &\textcolor{violet}{$po = p\mbox{[}1\mbox{]} \cdot p\mbox{[}0\mbox{]}$}\\
\end{tabular}
\end{frame}
%------------------------------------------------ SLIDE -
\section{加算器の遅延時間}
\begin{frame}\frametitle{\secname}
\includegraphics[width=\textwidth]{figs/ripple_tree.pdf}
\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}\frametitle{\secname}
\fontsize{12pt}{14}\selectfont
\includegraphics[width=\textwidth]{figs/cla_tree_recursive.pdf}

\vspace{3mm}
この回路は\textcolor{red}{階層的}に設計できる。設計順番: 

\vspace{1mm}
\textcolor{red}{tree2} (２ビット加算器、二つの \:\,\textcolor{darkgreen}{add}\:\, と一つの \textcolor{magenta}{gp} を使用) \textcolor{red}{$\Rightarrow$} 

\vspace{1mm}
\textcolor{blue}{tree4} (４ビット加算器、二つの \textcolor{red}{tree2} と一つの \textcolor{magenta}{gp} を使用) \textcolor{red}{$\Rightarrow$}

\vspace{1mm}
\textcolor{magenta}{tree8} (８ビット加算器、二つの \textcolor{blue}{tree4} と一つの \textcolor{magenta}{gp} を使用)
\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
１ビットツリー型桁上げ先見加算器の回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module add (a, b, c, g, p, s);
    input  a, b, c;
    output g, p, s;
    assign s = a ^ b ^ c;
    assign g = a & b;
    assign p = a | b;
endmodule




\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add.v}{\color{blue}\underline{add.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
ツリー型桁上げ先見加算器のGPの回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module g_p (g, p, c_in, g_out, p_out, c_out);
    input [1:0] g, p;
    input       c_in;
    output      g_out, p_out, c_out;
    assign      c_out = g[0] | p[0] & c_in;
    assign      g_out = g[1] | p[1] & g[0];
    assign      p_out = p[1] & p[0];
endmodule



\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/g_p.v}{\color{blue}\underline{g\_p.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
２ビットツリー型桁上げ先見加算器の回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module tree_2 (a, b, c_in, g_out, p_out, s);
    input  [1:0] a, b;
    input        c_in;
    output       g_out, p_out;
    output [1:0] s;
    wire   [1:0] g, p;
    wire         c_out;
    add a0 (a[0], b[0], c_in,  g[0], p[0], s[0]);
    add a1 (a[1], b[1], c_out, g[1], p[1], s[1]);
    g_p gp (g, p, c_in, g_out, p_out, c_out);
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_2.v}{\color{blue}\underline{tree\_2.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
４ビットツリー型桁上げ先見加算器の回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module tree_4 (a, b, c_in, g_out, p_out, s);
    input  [3:0] a, b;
    input        c_in;
    output       g_out, p_out;
    output [3:0] s;
    wire   [1:0] g, p;
    wire         c_out;
    tree_2 a0 (a[1:0], b[1:0], c_in,  g[0], p[0], s[1:0]);
    tree_2 a1 (a[3:2], b[3:2], c_out, g[1], p[1], s[3:2]);
    g_p    gp (g, p, c_in, g_out, p_out, c_out);
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_4.v}{\color{blue}\underline{tree\_4.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
８ビットツリー型桁上げ先見加算器の回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module tree_8 (a, b, c_in, g_out, p_out, s);
    input  [7:0] a, b;
    input        c_in;
    output       g_out, p_out;
    output [7:0] s;
    wire   [1:0] g, p;
    wire         c_out;
    tree_4 a0 (a[   ], b[   ], c_in,  g[0], p[0], s[   ]);
    tree_4 a1 (a[   ], b[   ], c_out, g[1], p[1], s[   ]);
    g_p    gp (g, p, c_in, g_out, p_out, c_out);
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_8.v}{\color{blue}\underline{tree\_8.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
16ビットツリー型桁上げ先見加算器の回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module tree_16 (a, b, c_in, g_out, p_out, s);
    input  [15:0] a, b;
    input         c_in;
    output        g_out, p_out;
    output [15:0] s;
    wire    [1:0] g, p;
    wire          c_out;
    tree_8 a0 (a[7:0], b[7:0], c_in,  g[0], p[0], s[7:0]);
    tree_8 a1 (a[15:8], b[15:8], c_out, g[1], p[1], s[15:8]);
    g_p    gp (g, p, c_in, g_out, p_out, c_out);
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_16.v}{\color{blue}\underline{tree\_16.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の回路}
\begin{frame}[fragile]\frametitle{\secname}
32ビットツリー型桁上げ先見加算器の回路

\vspace{2mm}
\fontsize{10pt}{13}\selectfont
\begin{code}
`timescale 1ns/1ns
module tree_32 (a, b, c_in, g_out, p_out, s);
    input  [31:0] a, b;
    input         c_in;
    output        g_out, p_out;
    output [31:0] s;
    wire    [1:0] g, p;
    wire          c_out;
    tree_16 a0 (a[15:0], b[15:0], c_in,  g[0], p[0], s[15:0]);
    tree_16 a1 (a[31:16], b[31:16], c_out, g[1], p[1], s[31:16]);
    g_p     gp (g, p, c_in, g_out, p_out, c_out);
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_32.v}{\color{blue}\underline{tree\_32.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器テストベンチ}
\begin{frame}[fragile]\frametitle{\resizebox{\textwidth}{!}{\secname}}
\fontsize{8pt}{8}\selectfont
%32ビットツリー型桁上げ先見加算器のテストベンチ
%
\vspace{-2mm}
\begin{code}
`timescale 1ns/1ns
module tree_32_tb;
    reg  [31:0] a,b;
    reg         ci;
    wire        g,p;
    wire [31:0] s;
    tree_32 adder_tree (a,b,ci,g,p,s);
    initial begin
            a  = 32'h77777777;
            b  = 32'hffffffff;
            ci = 0;
        #10 a  = 32'haaaaaaaa;
            b  = 32'h55555555;
        #10 a  = 32'hcccccccc;
            b  = 32'hcccccccc;
        #10 a  = 32'h00000000;
            b  = 32'h00000000;
        #10 $finish;
    end
    always #5 ci = ~ci;

    initial begin
        $dumpfile ("tree_32.vcd");
        $dumpvars;
    end
endmodule
\end{code}

\vspace{-9mm}
\hfill
\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_32_tb.v}{\color{blue}\underline{tree\_32\_tb.v}}~~~

\end{frame}
%------------------------------------------------ SLIDE -
\section{ツリー型桁上げ先見加算器の波形}
\begin{frame}[fragile]\frametitle{\secname}
\fontsize{12pt}{14}\selectfont
\vspace{-5mm}
\begin{verbatim}
% iverilog -Wall -o tree_32 tree_32_tb.v tree_32.v \
  tree_16.v tree_8.v tree_4.v tree_2.v add.v g_p.v
% ./tree_32
% gtkwave tree_32.vcd
\end{verbatim}

\blue

%\includegraphics[width=\textwidth]{figs/tree_32_vcd_hex_crop.png}
\includegraphics[width=\textwidth]{figs/tree_32_vcd_crop.png}

\hspace*{11mm}
3グループ信号：16進、10進(絶対値)、10進(整数)

\end{frame}
%------------------------------------------------ SLIDE -
\section{マルチビット加算回路}
\begin{frame}\frametitle{\secname}
\color{blue}まとめ

\begin{itemize}
\color{blue}
\setlength{\itemsep}{4mm}
\item マルチビット
\item マルチビットの加算
\item リップルキャリー加算器~(RCA)

\vspace{2mm}
RCA: Ripple-Carry Adder
\item 桁上げ先見加算器~(CLA)

\vspace{2mm}
CLA: Carry-Look-ahead Adder
\item ツリー型桁上げ先見加算器の回路
\end{itemize}

\end{frame}
%------------------------------------------------ SLIDE -
\section{課題~VI (100 点~+ 100 点)}
\begin{frame}\frametitle{\secname}
問題：P20-P22を参照し、全加算器~add1\,を使って、６ビットリップルキャリーアダー\,add6\,を設計し動作検証シミュレーションして下さい。

\vspace{4mm}
入力信号: A[5:0] \cdotfill 6-bit data~

入力信号: B[5:0] \cdotfill 6-bit data~

入力信号: CI     \cdotfill 1-bit carry in~

出力信号: S[5:0] \cdotfill 6-bit result~

出力信号: CO \cdotfill 1-bit carry out~

\phantom{出力信号: p\_out \cdotfill 1-bit carry propagator~}

\vspace{4mm}
モジュール名は~\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add6.v}{\textcolor{blue}{\underline{add6}}} にすること。\\
テストベンチ~\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/add6_tb.v}{\textcolor{blue}{\underline{add6\_tb.v}}} を使って下さい。

\end{frame}
%------------------------------------------------ SLIDE -
\section{課題~VI (100 点~+ 100 点)}
\begin{frame}\frametitle{\secname}
\textcolor{brown}{{オプション~($+100$ 点) :}} P36-P47を参照し、8 ビットツリー型桁上げ先見加算器の回路を設計し動作検証シミュレーションして下さい。

\vspace{4mm}
入力信号: a[7:0] \cdotfill 8-bit data~

入力信号: b[7:0] \cdotfill 8-bit data~

入力信号: c\_in  \cdotfill 1-bit carry in~

出力信号: s[7:0] \cdotfill 8-bit result~

出力信号: g\_out \cdotfill 1-bit carry generator~

出力信号: p\_out \cdotfill 1-bit carry propagator~

\vspace{4mm}
モジュール名は~\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_8.v}{\textcolor{blue}{\underline{tree\_8}}} にすること。\\
テストベンチ~\href{https://yamin.cis.k.hosei.ac.jp/lectures/logic/tree_8_tb.v}{\textcolor{blue}{\underline{tree\_8\_tb.v}}} を使って下さい。

%テストベンチを自分で作って下さい。
%この回路が機能する理由を説明して下さい。
%この回路がなぜ機能するのか説明して下さい。
\end{frame}
%------------------------------------------------ SLIDE -
\input{mybackground.tex}
%------------------------------------------------ SLIDE -
\end{document}
%------------------------------------------------ SLIDE -
