⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch02.16.htm

📁 介绍asci设计的一本书
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<HTML>

<HEAD>

  <META NAME="GENERATOR" CONTENT="Adobe PageMill 2.0 Mac">

  

  <TITLE> 2.6.4&nbsp;&nbsp;&nbsp;Multipliers</TITLE>

</HEAD><!--#include file="top.html"--><!--#include file="header.html"-->





<P><A NAME="pgfId=167904"></A><HR ALIGN=LEFT></P>



<P><A HREF="CH02.12.htm">Chapter&nbsp;&nbsp;start</A>&nbsp;&nbsp;&nbsp;<A

HREF="CH02.15.htm">Previous&nbsp;&nbsp;page</A>&nbsp;&nbsp;<A HREF="CH02.17.htm">Next&nbsp;&nbsp;page</A></P>



<H2>2.6.4&nbsp;&nbsp;&nbsp;Multipliers</H2>



<P><P CLASS="BodyAfterHead"><A NAME="pgfId=167910"></A>Figure&nbsp;2.27

shows a symmetric 6-bit array <B>multiplier</B> (an <SPAN CLASS="EquationVariables">

n</SPAN> -bit multiplier multiplies two <SPAN CLASS="EquationVariables">

n</SPAN> -bit numbers; we shall use <SPAN CLASS="EquationVariables"> n</SPAN>

-bit by <SPAN CLASS="Emphasis"> m</SPAN> -bit multiplier if the lengths

are different). Adders a0f0 may be eliminated, which then eliminates adders

a1a6, leaving an asymmetric CSA array of 30 (5<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="Symbol">

&yen;</SPAN> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>6)

adders (including one half adder). An <SPAN CLASS="EquationVariables"> n</SPAN>

-bit array multiplier has a delay proportional to <SPAN CLASS="EquationVariables">

n</SPAN> plus the delay of the CPA (adders b6f6 in Figure&nbsp;2.27). There

are two items we can attack to improve the performance of a multiplier:

the number of partial products and the addition of the partial products.</P>



<P><TABLE BORDER="0" CELLSPACING="2" CELLPADDING="0">

<TR>

<TD><P CLASS="TableFigure"><A NAME="pgfId=169274"></A><IMG SRC="CH02-69.gif"

ALIGN="BASELINE" WIDTH="448" HEIGHT="470" NATURALSIZEFLAG="3"> &nbsp;</TD></TR>

<TR>

<TD><P CLASS="TableFigureTitle"><A NAME="pgfId=169277"></A>FIGURE&nbsp;2.27&nbsp;&nbsp;Multiplication.

A 6-bit array multiplier using a final carry-propagate adder (full-adder

cells a6f6, a ripple-carry adder). Apart from the generation of the summands

this multiplier uses the same structure as the carry-save adder of Figure&nbsp;2.23(d).</TD></TR>

</TABLE>

<P CLASS="Body"><A NAME="pgfId=215738"></A>Suppose we wish to multiply 15

(the <B>multiplicand</B> ) by 19 (the <B>multiplier</B> ) mentally. It is

easier to calculate 15<SPAN CLASS="White">&nbsp;</SPAN>&yen;<SPAN CLASS="White">&nbsp;</SPAN>20

and subtract 15. In effect we complete the multiplication as 15<SPAN CLASS="White">&nbsp;</SPAN>&yen;<SPAN CLASS="White">&nbsp;</SPAN>(20<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>1)

and we could write this as 15<SPAN CLASS="White">&nbsp;</SPAN>&yen;<SPAN CLASS="White">&nbsp;</SPAN><IMG SRC=

"CH02-70.gif" ALIGN="BASELINE" WIDTH="15" HEIGHT="18" NATURALSIZEFLAG="3">

, with the overbar representing a minus sign. Now suppose we wish to multiply

an 8-bit binary number, A, by B<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>00010111

(decimal 16<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>4<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>2<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>23).

It is easier to multiply A by the canonical signed-digit vector<B> </B>(<B>

CSD vector</B> ) D<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN><IMG SRC=

"CH02-71.gif" ALIGN="BASELINE" WIDTH="47" HEIGHT="18" NATURALSIZEFLAG="3">

(decimal <SPAN CLASS="White">&nbsp;</SPAN>32<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>8<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>

23) since this requires only three add or subtract operations (and a subtraction

is as easy as an addition). We say B has a <B>weight</B> of 4 and D has

a weight of 3. By using D instead of B we have reduced the number of partial

products by 1 (=<SPAN CLASS="White">&nbsp;</SPAN>4<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>3).</P>



<P><P CLASS="Body"><A NAME="pgfId=215750"></A>We can <B>recode</B> (or encode)

any binary number, B, as a CSD vector, D, as follows (canonical means there

is only one CSD vector for any number):</P>



<P><P CLASS="EqnNmbrdAlign"><A NAME="pgfId=168527"></A>&nbsp;&nbsp;D<SUB CLASS="SubscriptVariable">

i</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="SubscriptVariable">

i</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>C<SUB CLASS="SubscriptVariable">

i</SUB> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>2C<SUB CLASS="SubscriptVariable">

i</SUB> <SUB CLASS="Subscript"> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1</SUB>

,(2.58)</P>



<P><P CLASS="BodyAfterHead"><A NAME="pgfId=168561"></A>where C<SUB CLASS="SubscriptVariable">

i</SUB> <SUB CLASS="Subscript"> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1</SUB>

is the carry from the sum of B<SUB CLASS="SubscriptVariable"> i<SPAN CLASS="White">&nbsp;</SPAN></SUB>

<SUB CLASS="Subscript"> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1</SUB>

<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="SubscriptVariable">

i</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>C<SUB CLASS="SubscriptVariable">

i</SUB> (we start with C<SUB CLASS="Subscript"> 0</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>0).</P>



<P><P CLASS="Body"><A NAME="pgfId=168566"></A>As another example, if B<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>011

(B<SUB CLASS="Subscript"> 2</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>0,

B<SUB CLASS="Subscript"> 1</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>1,

B<SUB CLASS="Subscript"> 0</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>1;

decimal 3), then, using Eq.&nbsp;2.58,</P>



<P><P CLASS="EquationAlign"><A NAME="pgfId=168562"></A>&nbsp;&nbsp;D<SUB CLASS="Subscript">

0</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

0</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>C<SUB CLASS="Subscript">

0</SUB> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>2C<SUB CLASS="Subscript">

1</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>0<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>2<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN><IMG SRC=

"CH02-72.gif" ALIGN="BASELINE" WIDTH="9" HEIGHT="18" NATURALSIZEFLAG="3">

,</P>



<P><P CLASS="EquationAlign"><A NAME="pgfId=168576"></A>&nbsp;&nbsp;D<SUB CLASS="Subscript">

1</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

1</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>C<SUB CLASS="Subscript">

1</SUB> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>2C<SUB CLASS="Subscript">

2</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>2<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>0,</P>



<P><P CLASS="EqnNmbrdAlign"><A NAME="pgfId=168571"></A>&nbsp;&nbsp;D<SUB CLASS="Subscript">

2</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

2</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>C<SUB CLASS="Subscript">

2</SUB> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>2C<SUB CLASS="Subscript">

3</SUB> <SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>0<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>0<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>1,(2.59)</P>



<P><P CLASS="BodyAfterHead"><A NAME="pgfId=168605"></A>so that D<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN><IMG SRC=

"CH02-73.gif" ALIGN="BASELINE" WIDTH="21" HEIGHT="18" NATURALSIZEFLAG="3">

(decimal 4<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>1<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>3).

CSD vectors are useful to represent fixed coefficients in digital filters,

for example.</P>



<P><P CLASS="Body"><A NAME="pgfId=168645"></A>We can recode using a <B>radix</B>

other than 2. Suppose B is an (<SPAN CLASS="EquationVariables"> n<SPAN CLASS="White">&nbsp;</SPAN></SPAN>

+<SPAN CLASS="White">&nbsp;</SPAN>1)-digit two's

complement number,</P>



<P><P CLASS="EqnNmbrdAlign"><A NAME="pgfId=168646"></A>&nbsp;&nbsp;B<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

0</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

1</SUB> 2<SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

2</SUB> 2<SUP CLASS="Superscript"> 2</SUP> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>.<SPAN CLASS="White">&nbsp;</SPAN>.<SPAN CLASS="White">&nbsp;</SPAN>.<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>B<SPAN CLASS="EquationVariables">

i</SPAN> 2<SUP CLASS="SuperscriptVariable"> i<SPAN CLASS="White">&nbsp;</SPAN></SUP>

+<SPAN CLASS="EquationVariables"> <SPAN CLASS="White">&nbsp;</SPAN></SPAN>

.<SPAN CLASS="White">&nbsp;</SPAN>.<SPAN CLASS="White">&nbsp;</SPAN>.<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="SubscriptVariable">

n</SUB> <SUB CLASS="Subscript"> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>1</SUB>

2<SUP CLASS="SuperscriptVariable"> n</SUP> <SUP CLASS="Superscript"> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>1</SUP>

<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="SubscriptVariable">

n</SUB> 2<SUP CLASS="SuperscriptVariable"> n</SUP> .(2.60)</P>



<P><P CLASS="Body"><A NAME="pgfId=168859"></A>We can rewrite the expression

for B using the following sleight-of-hand:</P>



<P><P CLASS="EquationAlign"><A NAME="pgfId=168648"></A>&nbsp;&nbsp;2B<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>B<SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SPAN CLASS="White">&nbsp;</SPAN>=<SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

0</SUB> <SPAN CLASS="White">&nbsp;</SPAN>+<SPAN CLASS="White">&nbsp;</SPAN>(B<SUB CLASS="Subscript">

0</SUB> <SPAN CLASS="White">&nbsp;</SPAN><SPAN CLASS="White">&nbsp;</SPAN>B<SUB CLASS="Subscript">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -