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

📄 ch13.c.htm

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

		if (count = 0) then carry &lt;= 1; else carry &lt;= 0; end if;</P>

<P CLASS="Computer">

<A NAME="pgfId=58084">

 </A>

		end case;</P>

<P CLASS="Computer">

<A NAME="pgfId=58085">

 </A>

	end if;</P>

<P CLASS="Computer">

<A NAME="pgfId=58086">

 </A>

end process;</P>

<P CLASS="ComputerLast">

<A NAME="pgfId=58087">

 </A>

end behave;</P>

<P CLASS="ExerciseHead">

<A NAME="pgfId=67569">

 </A>

13.27&nbsp;(***VITAL flip-flop)&nbsp;The following VITAL code models a D flip-flop:</P>

<P CLASS="ComputerFirstLabel">

<A NAME="pgfId=67570">

 </A>

LIBRARY ieee; USE ieee.Std_Logic_1164.all; </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67571">

 </A>

USE ieee.Vital_Timing.all; USE ieee.Vital_Primitives.all;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67572">

 </A>

ENTITY dff IS </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67573">

 </A>

	GENERIC (</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67574">

 </A>

	TimingChecksOn : BOOLEAN := TRUE;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67575">

 </A>

	XGenerationOn : BOOLEAN := TRUE;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67576">

 </A>

	InstancePath : STRING := &quot;*&quot;;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67577">

 </A>

	tipd_Clock :  DelayType01 := (0 ns, 0 ns);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67578">

 </A>

	tipd_Data :  DelayType01 := (0 ns, 0 ns);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67579">

 </A>

	tsetup_Data_Clock : DelayType01 := (0 ns, 0 ns);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67580">

 </A>

	thold_Data_Clock : DelayType01 := (0 ns, 0 ns);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67581">

 </A>

	tpd_Clock_Q : DelayType01 := (0 ns, 0 ns);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67582">

 </A>

	tpd_Clock_Qbar : DelayType01 := (0 ns, 0 ns));</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67583">

 </A>

	PORT (Clock, Data: Std_Logic; Q,Qbar:OUT Std_Logic);</P>

<P CLASS="ComputerLastLabel">

<A NAME="pgfId=67584">

 </A>

END dff;</P>

<P CLASS="ComputerFirstLabel">

<A NAME="pgfId=67586">

 </A>

ARCHITECTURE Gate OF dff IS</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67587">

 </A>

	ATTRIBUTE Vital_Level1 of gate : ARCHITECTURE IS TRUE;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67588">

 </A>

	SIGNAL Clock_ipd : Std_Logic := 'X';</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67589">

 </A>

	SIGNAL Data_ipd  : Std_Logic := 'X';</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67590">

 </A>

BEGIN</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67591">

 </A>

Wire_Delay:BLOCK BEGIN --  INPUT PATH DELAYs</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67592">

 </A>

	VitalPropagateWireDelay</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67593">

 </A>

		(Clock_ipd, Clock, VitalExtendToFillDelay(tipd_Clock));</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67594">

 </A>

	VitalPropagateWireDelay </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67595">

 </A>

		(Data_ipd, Data, VitalExtendToFillDelay(tipd_Data));</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67596">

 </A>

END BLOCK;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67597">

 </A>

VitalBehavior : PROCESS (Clock_ipd, Data_ipd)</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67598">

 </A>

	CONSTANT Dff_tab:VitalStateTableType:= (</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67599">

 </A>

--Vio   CLOCK DATA  IQ     Q    QBAR</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67600">

 </A>

( 'X',  '-',  '-',  '-',  'X',  'X' ), -- Timing Violation</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67601">

 </A>

( '-',  '\',  '0',  '-',  '0',  '1' ), -- Active Clock Edge</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67602">

 </A>

( '-',  '\',  '1',  '-',  '1',  '0' ),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67603">

 </A>

( '-',  '\',  'X',  '-',  'X',  'X' ),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67604">

 </A>

( '-',  '-',  '0',  '0',  '0',  '1' ), -- X Reduction</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67605">

 </A>

( '-',  '-',  '1',  '1',  '1',  '0' ),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67606">

 </A>

( '-',  'D',  '-',  '-',  'X',  'X' ), -- X Generation</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67607">

 </A>

( '-',  'B',  '-',  '-',  'S',  'S' ), -- Non-Active Clock Edge</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67608">

 </A>

( '-',  'X',  '-',  '-',  'S',  'S' ));</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67609">

 </A>

-- Anything else generates X on Q and QBAR</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67610">

 </A>

-- Timing Check Results</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67611">

 </A>

	VARIABLE Tviol_Data_Clock : X01 := '0';</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67612">

 </A>

	VARIABLE Tmkr_Data_Clock  : TimeMarkerType;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67613">

 </A>

-- Functionality Results</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67614">

 </A>

	VARIABLE Violation:X01:='0';</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67615">

 </A>

	VARIABLE PrevData:Std_Logic_Vector(1 to 3):=(OTHERS=&gt;'X');</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67616">

 </A>

	VARIABLE Results:Std_Logic_Vector(1 to 2):=(OTHERS =&gt;'X');</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67617">

 </A>

	ALIAS Q_zd:Std_Logic IS Results(1);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67618">

 </A>

	ALIAS Qbar_zd:Std_Logic IS Results(2);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67619">

 </A>

-- Output Glitch Detection Variables</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67620">

 </A>

	VARIABLE Q_GlitchData : GlitchDataType;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67621">

 </A>

	VARIABLE Qbar_GlitchData : GlitchDataType;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67622">

 </A>

BEGIN --  Timing Check Section</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67623">

 </A>

	IF (TimingChecksOn) THEN</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67624">

 </A>

	VitalTimingCheck (</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67625">

 </A>

	Data_ipd, &quot;Data&quot;, Clock_ipd, &quot;Clock&quot;,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67626">

 </A>

	t_setup_hi =&gt; tsetup_Data_Clock(tr01),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67627">

 </A>

	t_setup_lo =&gt; tsetup_Data_Clock(tr10),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67628">

 </A>

	t_hold_hi =&gt; thold_Data_Clock(tr01),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67629">

 </A>

	t_hold_lo =&gt; thold_Data_Clock(tr10),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67630">

 </A>

	CheckEnabled  =&gt; TRUE,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67631">

 </A>

	RefTransition =&gt; (Clock_ipd = '0'),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67632">

 </A>

	HeaderMsg =&gt; InstancePath &amp; &quot;/DFF&quot;,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67633">

 </A>

	TimeMarker =&gt; Tmkr_Data_Clock, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67634">

 </A>

	Violation =&gt; Tviol_Data_Clock);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67635">

 </A>

	END IF;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67636">

 </A>

--  Functionality Section</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67637">

 </A>

	Violation := Tviol_Data_Clock ;</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67638">

 </A>

	VitalStateTable(StateTable =&gt; Dff_tab,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67639">

 </A>

	DataIn =&gt; (Violation, Clock_ipd, Data_ipd),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67640">

 </A>

	NumStates  =&gt; 1,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67641">

 </A>

	Result =&gt; Results,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67642">

 </A>

	PreviousDataIn =&gt; PrevData);</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67643">

 </A>

--  Path Delay Section</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67644">

 </A>

	VitalPropagatePathDelay (Q, &quot;Q&quot;, Q_zd,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67645">

 </A>

	Paths =&gt; (0 =&gt; (Clock_ipd'LAST_EVENT, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67646">

 </A>

	VitalExtendToFillDelay(tpd_Clock_Q), TRUE),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67647">

 </A>

		1 =&gt; (Clock_ipd'LAST_EVENT, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67648">

 </A>

	VitalExtendToFillDelay(tpd_Clock_Q), TRUE)),</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67649">

 </A>

		GlitchData =&gt; Q_GlitchData, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67650">

 </A>

		GlitchMode =&gt; MessagePlusX, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67651">

 </A>

		GlitchKind =&gt; OnEvent );</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67652">

 </A>

	VitalPropagatePathDelay ( Qbar, &quot;Qbar&quot;, Qbar_zd,</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67653">

 </A>

		Paths =&gt; (0 =&gt; (Clock_ipd'LAST_EVENT, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67654">

 </A>

	VitalExtendToFillDelay(tpd_Clock_Qbar), TRUE), </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67655">

 </A>

		1 =&gt; (Clock_ipd'LAST_EVENT, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67656">

 </A>

	VitalExtendToFillDelay(tpd_Clock_Qbar), TRUE)), </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67657">

 </A>

		GlitchData =&gt; Qbar_GlitchData, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67658">

 </A>

		GlitchMode =&gt; MessagePlusX, </P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67659">

 </A>

		GlitchKind =&gt; OnEvent );</P>

<P CLASS="ComputerLabel">

<A NAME="pgfId=67660">

 </A>

	END PROCESS;</P>

<P CLASS="ComputerLastLabel">

<A NAME="pgfId=67661">

 </A>

END Gate;</P>

<UL>

<LI CLASS="ExercisePartFirst">

<A NAME="pgfId=118447">

 </A>

a.&nbsp;(120  min.)&nbsp;Build a testbench for this model.</LI>

<LI CLASS="ExercisePart">

<A NAME="pgfId=118450">

 </A>

b.&nbsp;(30  min.)&nbsp;Simulate and check the model using your testbench. </LI>

<LI CLASS="ExercisePart">

<A NAME="pgfId=118451">

 </A>

c.&nbsp;(60  min.)&nbsp;Explain the function of each line.</LI>

<LI CLASS="ExercisePart">

<A NAME="pgfId=118452">

 </A>

d.&nbsp;(60  min.)&nbsp;Explain the glitch detection. </LI>

<LI CLASS="ExercisePart">

<A NAME="pgfId=118453">

 </A>

e.&nbsp;(120  min.) Explain the unknown propagation behavior.</LI>

</UL>

<P CLASS="ExerciseHead">

<A NAME="pgfId=68242">

 </A>

13.28&nbsp;(VCD, 30  min.)&nbsp;Verilog can create a <SPAN CLASS="Definition">

value change dump </SPAN>

<A NAME="marker=76322">

 </A>

(<SPAN CLASS="Definition">

VCD</SPAN>

<A NAME="marker=76323">

 </A>

<A NAME="marker=76324">

 </A>

) file:</P>

<P CLASS="ComputerFirst">

<A NAME="pgfId=68243">

 </A>

<B CLASS="Keyword">

module</B>

 waves; <B CLASS="Keyword">

reg</B>

 clock; <B CLASS="Keyword">

integer</B>

 count;</P>

<P CLASS="Computer">

<A NAME="pgfId=68244">

 </A>

<B CLASS="Keyword">

initial</B>

 <B CLASS="Keyword">

begin </B>

clock = 0; count = 0; $dumpvars; #340 $finish; <B CLASS="Keyword">

end</B>

</P>

<P CLASS="Computer">

<A NAME="pgfId=68245">

 </A>

<B CLASS="Keyword">

always</B>

 #10 clock = ~ clock;</P>

<P CLASS="Computer">

<A NAME="pgfId=68246">

 </A>

<B CLASS="Keyword">

always begin </B>

@ (<B CLASS="Keyword">

negedge</B>

 clock); <B CLASS="Keyword">

if</B>

 (count == 7) count = 0;</P>

<P CLASS="Computer">

<A NAME="pgfId=68247">

 </A>

		<B CLASS="Keyword">

else </B>

count = count + 1; <B CLASS="Keyword">

end</B>

 </P>

<P CLASS="ComputerLast">

<A NAME="pgfId=68248">

 </A>

<B CLASS="Keyword">

endmodule</B>

 </P>

<P CLASS="ExerciseNoIndent">

<A NAME="pgfId=68252">

 </A>

A VCD file contains header information, variable definitions, and the value changes for variables [Verilog LRM 15]. Try and explain the format of the file that results.</P>

<P CLASS="ExerciseHead">

<A NAME="pgfId=100551">

 </A>

13.29&nbsp;<A NAME="20482">

 </A>

(*Formal verification, 60  min.)&nbsp;(Based on an example by Browne, Clarke, Dill, and Mishra.)&nbsp;A designer needs to fold an 8-bit ripple-carry adder into a small space on an ASIC and check the circuit extracted from the layout. With two 8-bit inputs, <SPAN CLASS="BodyComputer">

A</SPAN>

 and <SPAN CLASS="BodyComputer">

B</SPAN>

, and a 1-bit carry <SPAN CLASS="BodyComputer">

Cin</SPAN>

, exhaustively testing all possible inputs requires 2<SUP CLASS="Superscript">

17</SUP>

⌨️ 快捷键说明

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