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">

==&nbsp;&nbsp;&nbsp;&nbsp;!=&nbsp;&nbsp;&nbsp;&lt;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;=&nbsp;&nbsp;&nbsp;&nbsp;&gt;=</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>

&quot;inputs</P>

<P CLASS="Computer">

<A NAME="pgfId=23802">

 </A>

A, B, /P1G1, /P1G2 pin 17,18,1,6 &quot;LS153 pins 14,2,1,15 </P>

<P CLASS="Computer">

<A NAME="pgfId=23803">

 </A>

P1C0, P1C1, P1C2, P1C3 pin 2,3,4,5 &quot;LS153 pins 6,5,4,3 </P>

<P CLASS="Computer">

<A NAME="pgfId=23804">

 </A>

P2C0, P2C1, P2C2, P2C3 pin 7,8,9,11 &quot;LS153 pins 10,11,12,13</P>

<P CLASS="Computer">

<A NAME="pgfId=23805">

 </A>

&quot;outputs</P>

<P CLASS="Computer">

<A NAME="pgfId=23809">

 </A>

P1Y, P2Y pin 19, 12 &quot;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&nbsp;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&nbsp;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&nbsp;9.3&nbsp;<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>

&nbsp;</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>

&nbsp;</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>

&nbsp;</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>

&nbsp;</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>

&nbsp;</P>

</TD>

<TD ROWSPAN="1" COLSPAN="1">

<P CLASS="TableLeft">

<A NAME="pgfId=451">

 </A>

&nbsp;</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>

&nbsp;</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>

&nbsp;</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>

&nbsp;</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 =&gt; output {00 =&gt; 01; 01 =&gt; 02; 10 =&gt; 04; 11 =&gt; 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&#8212;the software does it for us. Second, to make changes only requires simple text editing&#8212;fast and convenient.</P>

<P CLASS="Body">

<A NAME="pgfId=30737">

 </A>

<A HREF="#28099" CLASS="XRef">

Table&nbsp;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&nbsp;9.4&nbsp;<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>

&nbsp;</P>

</TD>

<TD ROWSPAN="1" COLSPAN="1">

<P CLASS="TableLeft">

<A NAME="pgfId=33768">

 </A>

<SPAN CLASS="BodyComputer">

A = B &amp; 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>

&nbsp;</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>

&nbsp;</P>

</TD>

<TD ROWSPAN="1" COLSPAN="1">

<P CLASS="TableLeft">

<A NAME="pgfId=33780">

 </A>

⌨️ 快捷键说明

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