📄 ch05.1.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML EXPERIMENTAL 970324//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 5.5/HTML Export Filter">
<TITLE> 5.1 Actel ACT</TITLE></HEAD><!--#include file="top.html"--><!--#include file="header.html"-->
<DIV>
<P>[ <A HREF="CH05.htm">Chapter start</A> ] [ <A HREF="CH05.htm">Previous page</A> ] [ <A HREF="CH05.2.htm">Next page</A> ]</P><!--#include file="AmazonAsic.html"--><HR></DIV>
<H1 CLASS="Heading1">
<A NAME="pgfId=3640">
</A>
5.1 <A NAME="34815">
</A>
Actel ACT</H1>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=3646">
</A>
The basic logic cells in the Actel ACT family of FPGAs are called <A NAME="marker=3644">
</A>
<SPAN CLASS="Definition">
Logic Modules</SPAN>
. The ACT 1 family uses just one type of Logic Module and the ACT 2 and ACT 3 FPGA families both use two different types of Logic Module. </P>
<DIV>
<H2 CLASS="Heading2">
<A NAME="pgfId=3650">
</A>
5.1.1 <A NAME="18217">
</A>
ACT 1 Logic Module</H2>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=3652">
</A>
The functional behavior of the Actel ACT 1 Logic Module is shown in <A HREF="CH05.1.htm#17629" CLASS="XRef">
Figure 5.1</A>
(a). <A HREF="CH05.1.htm#17629" CLASS="XRef">
Figure 5.1</A>
(b) represents a possible circuit-level implementation. We can build a logic function using an Actel Logic Module by connecting logic signals to some or all of the Logic Module inputs, and by connecting any remaining Logic Module inputs to VDD or GND. As an example, <A HREF="CH05.1.htm#17629" CLASS="XRef">
Figure 5.1</A>
(c) shows the connections to implement the function F = A · B + B' · C + D. How did we know what connections to make? To understand how the Actel Logic Module works, we take a detour via multiplexer logic and some theory.</P>
<TABLE>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFigure">
<A NAME="pgfId=85116">
</A>
<IMG SRC="CH05-1.gif" ALIGN="BASELINE">
</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFigureTitle">
<A NAME="pgfId=85119">
</A>
FIGURE 5.1 <A NAME="17629">
</A>
The Actel ACT architecture. (a) Organization of the basic logic cells. (b) The ACT 1 Logic Module. (c) An implementation using pass transistors (without any buffering). (d) An example logic macro. (Source: Actel.)</P>
</TD>
</TR>
</TABLE>
</DIV>
<DIV>
<H2 CLASS="Heading2">
<A NAME="pgfId=43784">
</A>
5.1.2 <A NAME="28748">
</A>
Shannon’s Expansion Theorem</H2>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=43785">
</A>
In logic design we often have to deal with functions of many variables. We need a method to break down these large functions into smaller pieces. Using the <A NAME="marker=43786">
</A>
<SPAN CLASS="Definition">
Shannon expansion theorem, </SPAN>
we can <SPAN CLASS="Definition">
expand</SPAN>
<A NAME="marker=43787">
</A>
a Boolean logic function F in terms of (or with respect to) a Boolean variable A,</P>
<P CLASS="EquationNumbered">
<A NAME="pgfId=40222">
</A>
<A NAME="39060">
</A>
F = A · F (A = '1') + A' · F (A = '0'),(5.1)</P>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=40223">
</A>
where F (A = 1) represents the function F evaluated with A set equal to '1'. </P>
<P CLASS="Body">
<A NAME="pgfId=69537">
</A>
For example, we can expand the following function F with respect to (I shall use the abbreviation <SPAN CLASS="Emphasis">
wrt</SPAN>
<A NAME="marker=40256">
</A>
) A,</P>
<P CLASS="EquationAlign">
<A NAME="pgfId=40224">
</A>
F = A' · B + A · B · C' + A' · B' · C</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=88281">
</A>
<A NAME="23662">
</A>
= A · (B · C') + A' · (B + B' · C).(5.2)</P>
<P CLASS="Body">
<A NAME="pgfId=88282">
</A>
We have split F into two smaller functions. We call F (A = '1') = B · C' the <A NAME="marker=88283">
</A>
<SPAN CLASS="Definition">
cofactor</SPAN>
of F <SPAN CLASS="Emphasis">
wrt</SPAN>
A in Eq. <A HREF="CH05.1.htm#23662" CLASS="XRef">
5.2</A>
. I shall sometimes write the cofactor of F <SPAN CLASS="Emphasis">
wrt</SPAN>
A as F<SUB CLASS="Subscript">
A</SUB>
(the cofactor of F <SPAN CLASS="Emphasis">
wrt</SPAN>
A' is F<SUB CLASS="Subscript">
A'</SUB>
). We may expand a function <SPAN CLASS="Emphasis">
wrt</SPAN>
any of its variables. For example, if we expand F <SPAN CLASS="Definition">
wrt</SPAN>
B instead of A,</P>
<P CLASS="EquationAlign">
<A NAME="pgfId=40228">
</A>
F = A' · B + A · B · C' + A' · B' · C</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=40229">
</A>
<A NAME="35645">
</A>
= B · (A' + A · C') + B' · (A' · C).(5.3)</P>
<P CLASS="Body">
<A NAME="pgfId=40230">
</A>
We can continue to expand a function as many times as it has variables until we reach the <SPAN CLASS="Definition">
canonical form</SPAN>
<A NAME="marker=40257">
</A>
(a unique representation for any Boolean function that uses only minterms. A <SPAN CLASS="Definition">
minterm</SPAN>
<A NAME="marker=85571">
</A>
is a product term that contains all the variables of F—such as A · B' · C). Expanding Eq. <A HREF="CH05.1.htm#35645" CLASS="XRef">
5.3</A>
again, this time <SPAN CLASS="Emphasis">
wrt</SPAN>
C, gives</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=67041">
</A>
F = C · (A' · B + A' · B') + C' · (A · B + A' · B).(5.4)</P>
<P CLASS="Body">
<A NAME="pgfId=100965">
</A>
As another example, we will use the Shannon expansion theorem to implement the following function using the ACT 1 Logic Module:</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=100970">
</A>
F = (A · B) + (B' · C) + D.(5.5)</P>
<P CLASS="Body">
<A NAME="pgfId=100971">
</A>
First we expand F <SPAN CLASS="Emphasis">
wrt</SPAN>
B:</P>
<P CLASS="EquationAlign">
<A NAME="pgfId=88142">
</A>
F = B · (A + D) + B' · (C + D)</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=88144">
</A>
<A NAME="13520">
</A>
= B · F2 + B' · F1.(5.6)</P>
<P CLASS="Body">
<A NAME="pgfId=101564">
</A>
Equation <A HREF="CH05.1.htm#13520" CLASS="XRef">
5.6</A>
describes a 2:1 MUX, with B selecting between two inputs: F (A = '1') and F (A = '0'). In fact Eq. <A HREF="CH05.1.htm#13520" CLASS="XRef">
5.6</A>
also describes the output of the ACT 1 Logic Module in <A HREF="CH05.1.htm#17629" CLASS="XRef">
Figure 5.1</A>
! Now we need to split up F1 and F2 in Eq. <A HREF="CH05.1.htm#13520" CLASS="XRef">
5.6</A>
. Suppose we expand F2 = F<SUB CLASS="Subscript">
B</SUB>
<SPAN CLASS="Emphasis">
wrt</SPAN>
A, and F1 = F<SUB CLASS="Subscript">
B'</SUB>
<SPAN CLASS="Emphasis">
wrt</SPAN>
C:</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=101589">
</A>
<A NAME="27368">
</A>
F2 = A + D = (A · 1) + (A' · D),(5.7)</P>
<P CLASS="EqnNmbrdAlign">
<A NAME="pgfId=101591">
</A>
<A NAME="21538">
</A>
F1 = C + D = (C · 1) + (C' · D).(5.8)</P>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=43965">
</A>
From Eqs. <A HREF="CH05.1.htm#13520" CLASS="XRef">
5.6</A>
–<A HREF="CH05.1.htm#21538" CLASS="XRef">
5.8</A>
we see that we may implement F by arranging for <SPAN CLASS="Hidden">
A, B, C to appear on the select lines and '1' and D to be the data inputs of the MUXes in the ACT 1 Logic Module. </SPAN>
This is the implementation shown in <A HREF="CH05.1.htm#17629" CLASS="XRef">
Figure 5.1</A>
(d), with <SPAN CLASS="Hidden">
connections: </SPAN>
A0 = D, A1 = '1', B0 = D, B1 = '1', SA = C, SB = A, S0 = '0', and S1 = B.</P>
<P CLASS="Body">
<A NAME="pgfId=66877">
</A>
Now that we know that we can implement Boolean functions using MUXes, how do we know which functions we can implement and how to implement them?</P>
</DIV>
<DIV>
<H2 CLASS="Heading2">
<A NAME="pgfId=44101">
</A>
5.1.3 Multiplexer Logic as Function Generators</H2>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=83887">
</A>
<A HREF="CH05.1.htm#23959" CLASS="XRef">
Figure 5.2</A>
illustrates the 16 different ways to arrange ‘1’s on a Karnaugh map corresponding to the 16 logic functions, F (A, B), of two variables. Two of these functions are not very interesting (F = '0', and F = '1'). Of the 16 functions, <A HREF="CH05.1.htm#23832" CLASS="XRef">
Table 5.1</A>
shows the 10 that we can implement using just one 2:1 MUX. Of these 10 functions, the following six are useful: </P>
<UL>
<LI CLASS="BulletFirst">
<A NAME="pgfId=44740">
</A>
INV. The MUX acts as an inverter for one input only.</LI>
<LI CLASS="BulletList">
<A NAME="pgfId=44741">
</A>
BUF. The MUX just passes one of the MUX inputs directly to the output.</LI>
<LI CLASS="BulletList">
<A NAME="pgfId=44742">
</A>
AND. A two-input AND.</LI>
<LI CLASS="BulletList">
<A NAME="pgfId=44743">
</A>
OR. A two-input OR.</LI>
<LI CLASS="BulletList">
<A NAME="pgfId=44745">
</A>
AND1-1. A two-input AND gate with inverted input, equivalent to an NOR-11.</LI>
<LI CLASS="BulletLast">
<A NAME="pgfId=44744">
</A>
NOR1-1. A two-input NOR gate with inverted input, equivalent to an AND-11.</LI>
<TABLE>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFigTitleSide">
<A NAME="pgfId=79915">
</A>
FIGURE 5.2 <A NAME="23959">
</A>
The logic functions of two variables.</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFigure">
<A NAME="pgfId=79921">
</A>
<IMG SRC="CH05-2.gif" ALIGN="BASELINE">
</P>
</TD>
</TR>
</TABLE>
<TABLE>
<TR>
<TD ROWSPAN="1" COLSPAN="10">
<P CLASS="TableTitle">
<A NAME="pgfId=92247">
</A>
TABLE 5.1 <A NAME="23832">
</A>
Boolean functions using a 2:1 MUX.</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="2" COLSPAN="2">
<P CLASS="TableFirst">
<A NAME="pgfId=92267">
</A>
<SPAN CLASS="TableHeads">
Function, F</SPAN>
</P>
</TD>
<TD ROWSPAN="2" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92271">
</A>
<SPAN CLASS="TableHeads">
F</SPAN>
<SPAN CLASS="TableHeads">
=</SPAN>
</P>
</TD>
<TD ROWSPAN="2" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92273">
</A>
<SPAN CLASS="TableHeads">
Canonical form</SPAN>
</P>
</TD>
<TD ROWSPAN="2" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92278">
</A>
<SPAN CLASS="TableHeads">
Minterms</SPAN>
<SUP CLASS="Superscript">
<A HREF="#pgfId=92277" CLASS="footnote">
1</A>
</SUP>
</P>
</TD>
<TD ROWSPAN="2" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92280">
</A>
Minterm code<SUP CLASS="Superscript">
<A HREF="#pgfId=92283" CLASS="footnote">
2</A>
</SUP>
</P>
</TD>
<TD ROWSPAN="2" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92285">
</A>
Function number<SUP CLASS="Superscript">
<A HREF="#pgfId=92288" CLASS="footnote">
3</A>
</SUP>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="3">
<P CLASS="TableFirst">
<A NAME="pgfId=92296">
</A>
<SPAN CLASS="TableHeads">
M1</SPAN>
<SUP CLASS="Superscript">
<A HREF="#pgfId=92295" CLASS="footnote">
4</A>
</SUP>
</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92316">
</A>
<SPAN CLASS="TableHeads">
A0</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92318">
</A>
<SPAN CLASS="TableHeads">
A1</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92320">
</A>
<SPAN CLASS="TableHeads">
SA</SPAN>
</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92322">
</A>
1</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=92324">
</A>
'0'</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92326">
</A>
'0'</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92328">
</A>
'0'</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92330">
</A>
none</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92332">
</A>
0000</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92334">
</A>
0</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92336">
</A>
0</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92338">
</A>
0</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92340">
</A>
0</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=92342">
</A>
2</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=92344">
</A>
NOR1-1(A, B)</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92346">
</A>
(A + B')'</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92348">
</A>
A' · B</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="Table">
<A NAME="pgfId=92350">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -