ch09.2.htm
来自「介绍asci设计的一本书」· HTM 代码 · 共 3,048 行 · 第 1/5 页
HTM
3,048 行
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=24073">
</A>
<SPAN CLASS="BodyComputer">
K = [1, 0, 1] ;</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="3">
<P CLASS="TableLeft">
<A NAME="pgfId=24075">
</A>
<SPAN CLASS="BodyComputer">
K</SPAN>
is 5.</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=24081">
</A>
Relational</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=24083">
</A>
<SPAN CLASS="BodyComputer">
IO# = D == K5 ;</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="3">
<P CLASS="TableLeft">
<A NAME="pgfId=24085">
</A>
Operators: <SPAN CLASS="BodyComputer">
== != < > <= >=</SPAN>
</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=24091">
</A>
End</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=24093">
</A>
<SPAN CLASS="BodyComputer">
end MyModule<BR>
</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="3">
<P CLASS="TableLeft">
<A NAME="pgfId=24095">
</A>
Last statement in module</P>
</TD>
</TR>
</TABLE>
<P CLASS="ComputerFirst">
<A NAME="pgfId=23797">
</A>
module MUX4</P>
<P CLASS="Computer">
<A NAME="pgfId=23798">
</A>
title '4:1 MUX'</P>
<P CLASS="Computer">
<A NAME="pgfId=23799">
</A>
MyDevice device 'P16L8' ;</P>
<P CLASS="Computer">
<A NAME="pgfId=23800">
</A>
@ALTERNATE</P>
<P CLASS="Computer">
<A NAME="pgfId=23801">
</A>
"inputs</P>
<P CLASS="Computer">
<A NAME="pgfId=23802">
</A>
A, B, /P1G1, /P1G2 pin 17,18,1,6 "LS153 pins 14,2,1,15 </P>
<P CLASS="Computer">
<A NAME="pgfId=23803">
</A>
P1C0, P1C1, P1C2, P1C3 pin 2,3,4,5 "LS153 pins 6,5,4,3 </P>
<P CLASS="Computer">
<A NAME="pgfId=23804">
</A>
P2C0, P2C1, P2C2, P2C3 pin 7,8,9,11 "LS153 pins 10,11,12,13</P>
<P CLASS="Computer">
<A NAME="pgfId=23805">
</A>
"outputs</P>
<P CLASS="Computer">
<A NAME="pgfId=23809">
</A>
P1Y, P2Y pin 19, 12 "LS153 pins 7,9 </P>
<P CLASS="Computer">
<A NAME="pgfId=23810">
</A>
equations</P>
<P CLASS="Computer">
<A NAME="pgfId=23811">
</A>
P1Y = P1G*(/B*/A*P1C0 + /B*A*P1C1 + B*/A*P1C2 + B*A*P1C3);</P>
<P CLASS="Computer">
<A NAME="pgfId=23814">
</A>
P1Y = P1G*(/B*/A*P1C0 + /B*A*P1C1 + B*/A*P1C2 + B*A*P1C3);</P>
<P CLASS="ComputerLast">
<A NAME="pgfId=23817">
</A>
end MUX4</P>
</DIV>
<DIV>
<H3 CLASS="Heading2">
<A NAME="pgfId=3209">
</A>
9.2.2 CUPL</H3>
<P CLASS="BodyAfterHead">
<A NAME="pgfId=3213">
</A>
CUPL is a PLD design language from Logical Devices. We shall review the CUPL 4.0 language here. The following code is a simple CUPL example describing sequential logic:</P>
<P CLASS="ComputerFirst">
<A NAME="pgfId=3215">
</A>
SEQUENCE BayBridgeTollPlaza {</P>
<P CLASS="Computer">
<A NAME="pgfId=3217">
</A>
PRESENT red</P>
<P CLASS="Computer">
<A NAME="pgfId=3221">
</A>
IF car NEXT green OUT go; /* conditional synchronous output */</P>
<P CLASS="Computer">
<A NAME="pgfId=3225">
</A>
DEFAULT NEXT red; /* default next state */</P>
<P CLASS="Computer">
<A NAME="pgfId=3227">
</A>
PRESENT green</P>
<P CLASS="ComputerLast">
<A NAME="pgfId=3231">
</A>
NEXT red; } /* unconditional next state */</P>
<P CLASS="Body">
<A NAME="pgfId=3237">
</A>
This code describes a state machine with two states. <A HREF="#16657" CLASS="XRef">
Table 9.3</A>
shows the different state machine assignment statements.</P>
<TABLE>
<TR>
<TD ROWSPAN="1" COLSPAN="4">
<P CLASS="TableTitle">
<A NAME="pgfId=365">
</A>
TABLE 9.3 <A NAME="16657">
</A>
CUPL statements for state-machine entry.</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="3">
<P CLASS="TableFirst">
<A NAME="pgfId=381">
</A>
<SPAN CLASS="TableHeads">
Statement</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=383">
</A>
<SPAN CLASS="TableHeads">
Description</SPAN>
</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=401">
</A>
<SPAN CLASS="BodyComputer">
IF</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=403">
</A>
<SPAN CLASS="BodyComputer">
NEXT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=397">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=405">
</A>
Conditional next state transition</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=415">
</A>
<SPAN CLASS="BodyComputer">
IF</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=417">
</A>
<SPAN CLASS="BodyComputer">
NEXT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=419">
</A>
<SPAN CLASS="BodyComputer">
OUT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=421">
</A>
Conditional next state transition with synchronous output</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=423">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=431">
</A>
<SPAN CLASS="BodyComputer">
NEXT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=427">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=433">
</A>
Unconditional next state transition</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=435">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=443">
</A>
<SPAN CLASS="BodyComputer">
NEXT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=445">
</A>
<SPAN CLASS="BodyComputer">
OUT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=447">
</A>
Unconditional next state transition with asynchronous output</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=449">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=451">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=457">
</A>
<SPAN CLASS="BodyComputer">
OUT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=459">
</A>
Unconditional asynchronous output</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=469">
</A>
<SPAN CLASS="BodyComputer">
IF</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=463">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=471">
</A>
<SPAN CLASS="BodyComputer">
OUT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=473">
</A>
Conditional asynchronous output</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=483">
</A>
<SPAN CLASS="BodyComputer">
DEFAULT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=485">
</A>
<SPAN CLASS="BodyComputer">
NEXT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=479">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=487">
</A>
Default next state transition</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=497">
</A>
<SPAN CLASS="BodyComputer">
DEFAULT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=491">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=499">
</A>
<SPAN CLASS="BodyComputer">
OUT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=501">
</A>
Default asynchronous output</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=511">
</A>
<SPAN CLASS="BodyComputer">
DEFAULT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=513">
</A>
<SPAN CLASS="BodyComputer">
NEXT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=515">
</A>
<SPAN CLASS="BodyComputer">
OUT</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=517">
</A>
Default next state transition with synchronous output</P>
</TD>
</TR>
</TABLE>
<P CLASS="Body">
<A NAME="pgfId=22731">
</A>
You may also encode state machines as truth tables in CUPL. Here is another simple example:</P>
<P CLASS="ComputerFirst">
<A NAME="pgfId=3246">
</A>
FIELD input = [in1..0];</P>
<P CLASS="Computer">
<A NAME="pgfId=3248">
</A>
FIELD output = [out3..0];</P>
<P CLASS="ComputerLast">
<A NAME="pgfId=3250">
</A>
TABLE input => output {00 => 01; 01 => 02; 10 => 04; 11 => 08; }</P>
<P CLASS="Body">
<A NAME="pgfId=3264">
</A>
The advantage of the CUPL language, and text-based PLD languages in general, is now apparent. First, we do not have to enter the detailed logic for the state decoding ourselves—the software does it for us. Second, to make changes only requires simple text editing—fast and convenient.</P>
<P CLASS="Body">
<A NAME="pgfId=30737">
</A>
<A HREF="#28099" CLASS="XRef">
Table 9.4</A>
shows some examples of CUPL statements. In CUPL Boolean equations may use variables that contain a suffix, or an <A NAME="marker=3271">
</A>
<SPAN CLASS="Definition">
extension</SPAN>
, as in the following example:</P>
<P CLASS="ComputerOneLine">
<A NAME="pgfId=27645">
</A>
output.ext = (Boolean expression);</P>
<TABLE>
<TR>
<TD ROWSPAN="1" COLSPAN="3">
<P CLASS="TableTitle">
<A NAME="pgfId=33746">
</A>
TABLE 9.4 <A NAME="28099">
</A>
CUPL.</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=33754">
</A>
<SPAN CLASS="TableHeads">
Statement</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=33756">
</A>
<SPAN CLASS="TableHeads">
Example</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableFirst">
<A NAME="pgfId=33758">
</A>
<SPAN CLASS="TableHeads">
Comment</SPAN>
</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33760">
</A>
Boolean expression</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33762">
</A>
<SPAN CLASS="BodyComputer">
A = !B; </SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33764">
</A>
Logical negation </P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33766">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33768">
</A>
<SPAN CLASS="BodyComputer">
A = B & C; </SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33770">
</A>
Logical AND </P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33772">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33774">
</A>
<SPAN CLASS="BodyComputer">
A = B # C;</SPAN>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33776">
</A>
Logical OR</P>
</TD>
</TR>
<TR>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33778">
</A>
</P>
</TD>
<TD ROWSPAN="1" COLSPAN="1">
<P CLASS="TableLeft">
<A NAME="pgfId=33780">
</A>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?