第五章 VHDL设计进阶_第1页
第五章 VHDL设计进阶_第2页
第五章 VHDL设计进阶_第3页
第五章 VHDL设计进阶_第4页
第五章 VHDL设计进阶_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章VHDL设计进阶§5.1数据对象*§5.2VHDL设计实例及其语法内涵*§5.3顺序语句归纳§5.4并行赋值语句讨论§5.5IF语句概述例解§5.7仿真延时§5.8VHDL的RTL表述11本章例程多功能移位寄存器三态门与三态总线优先编码器7段数码显示译码器(实验与设计)8位数码扫描显示电路(实验与设计)数控分频器(实验与设计)22§5.1数据对象DATAOBJECTS5.1.1常数(CONSTANT)常数定义的一般表述:

CONSTANT常数名:数据类型:=表达式;定义:凡是可以被赋予一个数值的客体。是数据类型的载体。使用原则:分类:固定值,不能在程序中被改变;增强程序的可读性,便于修改程序时传递参数;相当于电路中的恒定电平,如GND或VCC接口;可在Library、Entity、Architecture、Process中进行定义,其有效使用范围也相应限定。例如:

constant

m

:std_logic_vector:=“0101”;

constant

i

:integer:=12;335.1.2变量(VARIABLE)定义变量的一般表述:

VARIABLE变量名:数据类型[:=表达式];

临时数据,没有物理意义;只能在Process和Function中定义,并只在其内部有效;要使其全局有效,先转换为Signal;用“:=”进行赋值。例如:

variable

x,y:integer;

variable

count:integerRange0to255:=10;其中Range0to255为约束条件,10为变量的初值。§5.1数据对象DATAOBJECTS445.1.3信号(SIGNAL)定义格式:

SIGNAL信号名:数据类型[:=初始值];--直接赋值

目标信号名<=表达式AFTER时间量;--代入赋值代表物理连线,Port也是一种信号;没有方向性,可给它赋值,也可当作输入;在Entity(端口)中和Architecture中定义,具有全局性;设定的初始值在综合时没有意义,只是在仿真时有效。基本赋值符是:<=。例如:

signal

sys_clk

:bit:=‘0’;

sys_clk

<=‘0’;

§5.1数据对象DATAOBJECTS55【例4-19】

1位二进制全加器顶层设计描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;

cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;ARCHITECTUREfd1OFf_adderIS

COMPONENT

h_adder

--元件例化之元件定义语句

PORT(a,b:INSTD_LOGIC;

co,so:OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTor2a--元件例化之元件定义语句

PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;

BEGIN--元件例化之端口映射语句

u1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);

u2:h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);

u3:or2aPORT

MAP(a=>d,b=>f,c=>cout);

ENDARCHITECTUREfd1;66SIGNALa,b,c,y,z:INTEGERrange0to255;

...PROCESS(a,b,c)BEGINy<=a+b;z<=c–a;y<=b;ENDPROCESS;只有信号能进入列表注意:同一信号有多个驱动源(赋值源)时,只有离ENDPROCESS最近的一项被启动进行赋值操作。§5.1数据对象DATAOBJECTS77三种数据对象的基本用法比较数据对象常数CONSTANT变量VARIABLE信号SIGNAL使用原则先定义(赋值)后使用定义和使用范围实体、结构体、程序包、模块、进程和子程序进程或子程序实体、结构体和程序包基本用法程序中用到的恒定常数进程中的暂存单元(可变)(仅用于顺序语句中)实体中的内部连线(延时)(用于并行模块间的信息传递)可视性原则(使用范围)全局或局部性(GLOBOL/LOCAL)局部性(LOCAL)全局性(GLOBOL)Attention:变量和信号可以被多次赋值,常量只能赋值一次。§5.1数据对象DATAOBJECTS885.1.4进程中的信号与变量赋值语句表5-1信号与变量赋值语句功能的比较信号SIGNAL变量VARIABLE基本用法用于作为电路中的信号连线用于作为进程中局部数据存储单元适用范围

在整个结构体内的任何地方都能适用只能在所定义的进程中使用行为特性在进程的最后才对信号赋值立即赋值§5.1数据对象DATAOBJECTS995.1.4进程中的信号与变量赋值语句【例5-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)

VARIABLEQQ:STD_LOGIC;--注意变量定义的位置

BEGINIFCLK'EVENTANDCLK='1'THEN

QQ:=D1;ENDIF;Q1<=QQ;

--变量必须通过信号方可传递出进程

ENDPROCESS;END;§5.1数据对象DATAOBJECTS10105.1.4进程中的信号与变量赋值语句【例5-2】...ARCHITECTUREbhvOFDFF3IS

SIGNALQQ:STD_LOGIC;--注意信号定义的位置

BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN

QQ<=D1;ENDIF;ENDPROCESS;

Q1<=QQ;END;以上两例表明:在不完整条件语句中,单独的变量赋值语句与信号赋值语句都能产生相同的时序电路。§5.1数据对象DATAOBJECTS1111【例5-3】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3IS

SIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN

A<=D1;B<=A;Q1<=B;ENDIF;ENDPROCESS;

END;5.1.4进程中的信号与变量赋值语句§5.1数据对象DATAOBJECTS1212【例5-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)

VARIABLEA,B:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THEN

A:=D1;B:=A;Q1<=B;ENDIF;ENDPROCESS;END;5.1.4进程中的信号与变量赋值语句§5.1数据对象DATAOBJECTS13135.1.4进程中的信号与变量赋值语句【例5-5】SIGNALin1,in2,e1,...:STD_LOGIC;...PROCESS(in1,in2,...)

VARIABLEc1,...:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFin1='1'THEN...–-第1行

e1<="1010";–-第2行

...IFin2='0'THEN...–-第15+n行

...c1:="0011";–-第30+m行

...

ENDIF;

ENDPROCESS;比较信号与变量赋值实现的先后!§5.1数据对象DATAOBJECTS1414【例5-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISsignalmuxval:integerrange7downto0;BEGINprocess(i0,i1,i2,i3,a,b)begin

muxval<=0;if(a='1')thenmuxval<=muxval+1;endif;if(b='1')thenmuxval<=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;无法实现的MUX4!信号多个赋值源情况muxval无初值1515图5-3例5-6的RTL电路时序电路1616【例5-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variablemuxval:integerrange7downto0;begin

muxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;正确的MUX4设计muxval有初值1717§5.1数据对象DATAOBJECTS例5-7的RTL电路1818图5-3例5-6的错误的工作时序图5-4例5-7的正确工作时序1919Signalsvs.Variables

SCOPE:BEHAVIOR:RepresentCircuitInterconnect(表示电路互联)GlobalScope(anywhere)(全局特征)UpdatedatendofPROCESS(newvaluenotavailableImmediately进程结束时赋值)Representlocalstorage(表示局部暂存)LocalScope(insideprocess:局部特征)UpdatedImmediately(newvalueavailableImmediately:立即赋值)补充:信号与变量的比较相关作业:P1755-42020§5.2VHDL设计实例及其语法内涵移位寄存器设计*位矢中‘1’码个数统计电路设计三态门与三态总线设计*21215.2.1含同步并行预置功能的8位并入串出右移位寄存器设计同步并行预置:CLK上升沿且LOAD=1时:输入并行预置同步输出:CLK上升沿且LOAD=0时:串行右移输出2222LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHFRTIS--8位右移寄存器

PORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);

DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);

QB:OUTSTD_LOGIC);ENDSHFRT;ARCHITECTUREbehavOFSHFRTISSIGNALREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLK,LOAD)BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD=‘1’THEN--同步装载新数据

REG8<=DIN;ELSE

REG8(6DOWNTO0)<=REG8(7DOWNTO1);ENDIF;ENDIF;ENDPROCESS;

QB<=REG8(0);--输出最低位

DOUT<=REG8;ENDbehav;【例5-8】移位方向?§5.2VHDL设计实例及其语法内涵2323(1)在第一个时钟到来时,实现移位和输出(QB)(2)第二个时钟,实现数据装载(3)第三个时钟及以后,实现右移移位和输出(QB)§5.2VHDL设计实例及其语法内涵2424【例5-9】LibraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTISPORT(CLK,C0:INSTD_LOGIC;--时钟和进位输入

MD

:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位模式控制字

D:INSTD_LOGIC_VECTOR(7DOWNTO0);--待加载的数据

QB:OUT

STD_LOGIC_VECTOR(7DOWNTO0);--移位数据输出

CN:OUTSTD_LOGIC);--进位输出ENDENTITY;ARCHITECTUREBEHAVOFSHIFTIS SIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALCY:STD_LOGIC;--进位输出暂存BEGIN PROCESS(CLK,MD,C0)BEGIN(接下页)5.2.2移位模式可控的8位移位寄存器设计§5.2VHDL设计实例及其语法内涵2525(接上页IFCLK'EVENTANDCLK='1'THENCASEMDIS--同步模式选择控制

WHEN"001"=>REG(0)<=C0;CY<=REG(7);REG(7DOWNTO1)<=REG(6DOWNTO0);--带进位左循环

WHEN“010”=>REG(0)<=REG(7);REG(7DOWNTO1)<=REG(6DOWNTO0);--自循环左移

WHEN"011"=> REG(7)<=REG(0);REG(6DOWNTO0)<=REG(7DOWNTO1);--自循环右移

WHEN"100"=> REG(7)<=C0;CY<=REG(0);REG(6DOWNTO0)<=REG(7DOWNTO1);--带进位循环右移

WHEN“101”=>REG(7DOWNTO0)<=D(7DOWNTO0);--数据加载

WHENOTHERS=>REG<=REG;CY<=CY;--保持

ENDCASE;ENDIF;ENDPROCESS;QB(7DOWNTO0)<=REG(7DOWNTO0);CN<=CY;--移位后并行输出ENDBEHAV;

§5.2VHDL设计实例及其语法内涵2626图5-6例5-9中带进位循环左移仿真波形(MD="001")

§5.2VHDL设计实例及其语法内涵2727补充设计:8位并入并出右移位寄存器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYRSHIFTISPORT(CLR,LOD,CLK:INBIT;D:INBIT_VECTOR(7DOWNTO0);Q:BUFFERBIT_VECTOR(7DOWNTO0));ENDRSHIFT;ARCHITECTUREONEOFRSHIFTISSIGNALQ_TMP:BIT_VECTOR(7DOWNTO0); BEGIN PROCESS(CLR,CLK,LOD)BEGIN IFCLR=‘0’THENQ_TMP<=“00000000”; ELSIFCLK’EVENTANDCLK=‘1’ THEN IFLOD=‘1’THENQ_TMP<=D;ELSEFORIIN7DOWNTO1LOOPQ_TMP(I-1)<=Q_TMP

(I);ENDLOOP;Q_TMP(7)<=D(7);ENDIF;ENDIF;Q<=Q_TMP;ENDPROCESS;ENDARCHITECTUREONE;循环语句§5.2VHDL设计实例及其语法内涵2828知识扩展:移位寄存器有哪些实际应用?串/并或并/串数据转换序列发生器设计:密码电路;环形计数器(循环移位寄存器):节拍器线性反馈移位寄存器:CRC校验电路29295.2.3位矢中‘1’码个数统计电路设计§5.2VHDL设计实例及其语法内涵Q只能定义为变量3030Q只能定义为变量;虽然采用不完全条件IF语句,但结果得到的是组合电路;而非时序电路;循环语句的使用§5.2VHDL设计实例及其语法内涵位矢中‘1’码个数统计电路设计要点5.2.3位矢中‘1’码个数统计电路设计3131§5.2VHDL设计实例及其语法内涵5.2.3位矢中‘1’码个数统计电路设计LOOP语句的常用两种表达方式:(1)单个LOOP语句(2)FOR_LOOP语句3232利用LOOP循环语句简化同类顺序语句的表达§5.2VHDL设计实例及其语法内涵等效于每次循环都将产生一个硬件模块;随循环次数增加,造成硬件资源大量耗用;相关作业:,5-7(用shift,VHDL),5-1333335.2.4三态门设计§5.2VHDL设计实例及其语法内涵三态门如果不设置高阻会如何?3434LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTRI_GATEISPORT(DIN,EN:INSTD_LOGIC; DOUT:OUTSTD_LOGIC);ENDTRI_GATE;ARCHITECTUREARCHOFTRI_GATEIS BEGIN PROCESS(DIN,EN) BEGIN

5.2.4三态门设计--补充的程序(一位(标量)型)IFEN=‘1’THEN DOUT<=DIN;ELSE DOUT<=‘Z’; ENDIF;ENDPROCESS;ENDARCH;§5.2VHDL设计实例及其语法内涵必须大写!3535【例5-12】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtri_sISport(enable:INSTD_LOGIC;

datain:INSTD_LOGIC_VECTOR(7DOWNTO0);

dataout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDtri_s;ARCHITECTUREbhvOFtri_sISBEGINPROCESS(enable,datain)BEGINIFenable='1'THENdataout<=datain;ELSEdataout<="ZZZZZZZZ";ENDIF;ENDPROCESS;ENDbhv;5.2.4三态门设计(矢量型:8位单向总线驱动器)图5-88位3态控制门电路§5.2VHDL设计实例及其语法内涵36365.2.5双向总线设计—利用inout端口§5.2VHDL设计实例及其语法内涵Inout:双向端口37375.2.5双向端口设计(使用INOUT端口模式)【例5-13】libraryieee;useieee.std_logic_1164.all;entitytri_stateis

port(control:instd_logic;in1:instd_logic_vector(7downto0);q:inoutstd_logic_vector(7downto0);x:outstd_logic_vector(7downto0));endtri_state;architecturebody_trioftri_stateisbeginprocess(control,q,in1)beginif(control='0')thenx<=q;elseq<=in1;x<="ZZZZZZZZ";

endif;endprocess;endbody_tri;BAD!§5.2VHDL设计实例及其语法内涵38385.2.5双向端口设计图5-10例5-13的仿真波形图§5.2VHDL设计实例及其语法内涵Why?INOUT端口作为输入端口用时必须把输出端设定为高阻态!39395.2.5双向端口设计图5-9例5-13的综合结果§5.2VHDL设计实例及其语法内涵40405.2.5双向端口设计【例5-14】(以上部分同上例)process(control,q,in1)beginif(control='0')thenx<=q;q<="ZZZZZZZZ";elseq<=in1;x<="ZZZZZZZZ";endif;endprocess;endbody_tri;图5-12例5-14的仿真波形图§5.2VHDL设计实例及其语法内涵正确设计的关键!41415.2.5双向端口设计图5-11例5-14的综合结果§5.2VHDL设计实例及其语法内涵4242libraryieee;useieee.std_logic_1164.all;entitytri_bigateisport(a,b:inoutstd_logic_vector(7downto0);control:instd_logic;

dr:instd_logic);endtri_bigate;architecturebody_trioftri_bigateis signalaout,bout:std_logic_vector(7downto0);Begin

5.2.5双向总线(利用双向端口)补充设计§5.2VHDL设计实例及其语法内涵输出缓冲器4343P1:process(control,dr,a)beginif(control='0')and(dr=‘1’)thenbout<=a;a<="ZZZZZZZZ";elsebout<="ZZZZZZZZ";

endif;b<=bout;endprocess;P2:process(control,dr,b)beginif(control='0')and(dr=‘0’)thenaout<=b;b<="ZZZZZZZZ";else

aout<="ZZZZZZZZ";

endif;a<=aout;endprocess;endbody_tri;§5.2VHDL设计实例及其语法内涵44445.2.6多驱动源三态单向总线电路设计4545多驱动源总线的应用?物联网:netofthings4646LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtristate2ISport(input3,input2,input1,input0:

INSTD_LOGIC_VECTOR(7DOWNTO0);enable:INSTD_LOGIC_VECTOR(1DOWNTO0);output:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDtristate2;ARCHITECTUREmultiple_driversOFtristate2ISBEGINPROCESS(enable,input3,input2,input1,input0)BEGINIFenable="00"THENoutput<=input3;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="01"THENoutput<=input2;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="10"THENoutput<=input1;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="11"THENoutput<=input0;

ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;ENDmultiple_drivers;5.2.6多驱动源三态单向总线电路设计【例5-15】--BADDesign同一进程中最好只用一个IF语句!47475.2.6三态总线电路设计图5-13例5-15错误的综合结果§5.2VHDL设计实例及其语法内涵48485.2.6三态总线电路设计libraryieee;useieee.std_logic_1164.all;entitytriisport(ctl:instd_logic_vector(1downto0);datain1,datain2,datain3,datain4:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endtri;architecturebody_trioftriisbeginq<=datain1whenctl="00"else(others=>'Z');q<=datain2whenctl="01"else(others=>'Z');q<=datain3whenctl="10"else(others=>'Z');q<=datain4whenctl="11"else(others=>'Z');endbody_tri;【例5-16】改进的设计使用并行赋值语句WHEN...ELSE等同于一个进程!§5.2VHDL设计实例及其语法内涵49495.2.6三态总线电路设计图5-14例5-16正确的综合结果5050在进程中,顺序等价的语句(如if语句),当它们列于同一进程敏感表中的输入信号同时发生变化时,只可能对进程结束前的一条赋值语句进行赋值操作,而忽略其上的所有的等价语句。一般情况下,同一进程中最好只放一个if语句结构。在结构体中,每一条并行语句都等同于一个独立运行的进程,它们独立检测各并行语句中作为敏感信号的输入值ctl。要设计出能产生独立控制的多通道的电路结构,必须使用并行语句结构。§5.2VHDL设计实例及其语法内涵5151知识扩展——基于LPM宏模块的总线设计§5.2VHDL设计实例及其语法内涵52525.2.7双边沿触发电路设计讨论VHDL不允许对同一时钟信号的两个边沿进行任何数据赋值操作。§5.2VHDL设计实例及其语法内涵相关作业:5-145353§5.3顺序(进程)语句归纳

5.3.1进程语句格式PROCESS语句结构的一般表达格式如下

[进程标号:]PROCESS[(敏感信号参数表)][IS][进程说明部分]BEGIN

顺序描述语句

ENDPROCESS[进程标号];5454进程举例【例3-10】ENTITYCOMP_GOODISPORT(a1,b1:INBIT; q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_GOODISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSEq1<='0';ENDIF;ENDPROCESS;END【例3-14】...PROCESSBEGINwaituntilCLK='1';--利用wait语句

Q<=D;ENDPROCESS;§5.3进程语句归纳

5555进程举例LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST=‘1’THENCQI:=(OTHERS=>‘0’);--计数器异步复位

ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿

IFEN=‘1’THEN--检测是否允许计数(同步使能)

IFCQI<“1001”THENCQI:=CQI+1;COUT<=‘0’;--允许计数,进位置1ELSECQI:=(OTHERS=>‘0’);COUT<=‘1’;--大于或等于9,

--计数值清零,进位置1ENDIF;ENDIF;ENDIF;CQ<=CQI;ENDPROCESS;ENDbehav;例3-20计数器设计§5.3进程语句归纳

5656进程举例【例5-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variable

muxval:integerrange7downto0;begin

muxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;muxval有初值57575.3.2PROCESS结构组成PROCESS语句结构进程说明顺序描述语句敏感信号参数表信号赋值语句变量赋值语句进程启动语句顺序描述语句子程序调用语句进程跳出语句详参§10-1§5.3进程语句归纳

58585.3.3进程要点1.PROCESS为一无限循环语句2.PROCESS中的顺序语句具有明显的顺序/并行运行双重性3.进程必须由敏感信号的变化来启动(“激活”)4.进程语句本身是并行语句§5.3进程语句归纳

5959【例5-17】ENTITYmulISPORT(a,b,c,selx,sely:INBIT;data_out:OUTBIT);ENDmul;ARCHITECTUREexOFmulISSIGNALtemp:BIT;BEGINp_a:PROCESS(a,b,selx)BEGINIF(selx='0')THENtemp<=a;ELSEtemp<=b;ENDIF;ENDPROCESSp_a;p_b:PROCESS(temp,c,sely)BEGINIF(sely='0')THENdata_out<=temp;ELSEdata_out<=c;ENDIF;ENDPROCESSp_b;ENDex;§5.3进程语句归纳

5.信号是多个进程间的通信线60606.一个进程中只允许描述对应于一个时钟信号的同步时序逻辑

例6-17的综合结果§5.3进程语句归纳

5.3.3进程要点61617、时序电路必须由进程中的不完全条件语句实现【例5-3】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENA<=D1;B<=A;Q1<=B;ENDIF;ENDPROCESS;END;【例5-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEA,B:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENA:=D1;B:=A;Q1<=B;ENDIF;ENDPROCESS;END;§5.3进程语句归纳

5.3.3进程要点6262§5.4并行赋值语句讨论结合§10.2.1并行语句学习!任何一条并行赋值语句等效于一条进程语句;!并行赋值的实现需要至少一个δ周期;!并行赋值语句的启动需要条件。!并行赋值语句的两种形式Data1<=aandb[例5-18]Signalselect:integerrange15downto0;…Select<=0whens0=‘0’ands1=‘0’else1whens0=‘0’ands1=‘0’else2whens0=‘0’ands1=‘0’else3;6363§5.5IF语句概述(1)不完全条件IF语句IF条件句Then

顺序语句ENDIF;(2)完全条件IF语句IF条件句Then

顺序语句ELSE

顺序语句ENDIF;(3)IF嵌套IF条件句Then

IF

条件句Then...

ENDIF

ENDIF

(4)多重条件(判断)IF语句**IF条件1Then

顺序语句1ELSIF

条件2Then

顺序语句2…ELSIF

条件nThen

顺序语句nELSE顺序语句n+1ENDIF

执行条件向上相与特征!用于具有不同优先级条件的电路(如优先编码器)设计。5.5.1IF语句分类6464【例5-19】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_stmtsISPORT(a,b,c:INBOOLEAN;output:OUTBOOLEAN);ENDcontrol_stmts;ARCHITECTUREexampleOFcontrol_stmtsISBEGINPROCESS(a,b,c)VARIABLEn:BOOLEAN;BEGINIFaTHENn:=b;ELSEn:=c;ENDIF;output<=n;ENDPROCESS;ENDexample;注意条件表达式的两种写法!§5.5IF语句概述65655.2多重条件IF语句——“向上相与”条件的应用表5-28线-3线优先编码器真值表

输入 输出din0din1din2din3din4din5din6din7 output0output1output2 xxxxxxx0000 xxxxxx01100 xxxxx011010 xxxx0111110 xxx01111001 xx011111101 x0111111011 01111111111 注:表中的“x”为任意,类似VHDL中的“-”值。§5.5IF语句概述6666知识扩展——普通8-3线编码器的设计8线-3线普通编码器真值表

输入 输出din0din1din2din3din4din5din6din7 output0output1output2 10000000000 01000000001 00100000010 00010000011 0000100010000000100101 00000010110 00000001111§5.5IF语句概述6767普通8-3线编码器的设计(补充)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoder8_3IS PORT(din:INSTD_LOGIC_VECTOR(0TO7); output:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder8_3;ARCHITECTUREbehavOFcoder8_3ISBEGIN PROCESS(din) BEGIN CASEDINIS WHEN“10000000”=>output<=“000"; WHEN“01000000”=>output<="001"; WHEN“00100000”=>output<="010"; WHEN“00010000”=>output<="011";WHEN“00001000”=>output<="100"; WHEN“00000100”=>output<="101"; WHEN“00000010”=>output<="110"; WHENOTHERS=>output<="111"; ENDCASE;ENDPROCESS;ENDbehav;§5.5IF语句概述6868【例5-20】**LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(0TO7);output:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder;ARCHITECTUREbehavOFcoderISSIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(din)BEGINIF(din(7)='0')THENoutput<="000";ELSIF(din(6)='0')THENoutput<="100";ELSIF(din(5)='0')THENoutput<="010";ELSIF(din(4)='0')THENoutput<="110";ELSIF(din(3)='0')THENoutput<="001";ELSIF(din(2)='0')THENoutput<="101";ELSIF(din(1)='0')THENoutput<="011";ELSEoutput<="111";ENDIF;

ENDPROCESS;

ENDbehav;§5.5IF语句概述8线-3线优先编码器6969§5.6半整数与奇数分频电路设计自学,可作为课程设计题目7070§5.7仿真延时信号延时:信号从发生到生效的时间间隔。延时模型:对实际电路运行中必然存在的延时特性的软件模拟。两种延时模型:固有(惯性)延时:INERTIAL

传输延时:TRANSPORT信号赋值语句的完整语法:信号<=延时模型/[REJECT时间表达式]/UNAFFECTEDREJECT:用于指定脉冲宽度;UNAFFECTED:用于表示事件无变化;无关键字默认为惯性延迟。综合器不支持延时语句!7171§5.7仿真延时5.7.1固有延时(惯性延时)InertialDelay是针对任何电子器件由于分布电容效应的普遍存在而具有的延时特性的仿真模型。

z<=xXORyAFTER5ns;

z<=xXORy;零延迟讨论:1、零延时存在吗?如何仿真零延时?2、定义固有延时时间有何用?

延时固有延迟可用于消除毛刺固有延时适用作开关电路的延时模型,省略REJECT子句时脉冲宽度为保留字AFTER定义的时间值。

B<=AAFTER20ns;固有延迟可近似器件的实际延时。72725.7.2传输延时(TransportDelay)表示信号从输入到输出的传输过程中的延时模型

B<=TRANSPORTAAFTER20ns;§5.7仿真延时传输延时适用于延时器件(如延时继电器、RC网络)、PCB板上的连线延时或ASIC上的通道延时的延时模型。73735.7.3仿真(延时)定义:进程(并行语句)重复执行的周期,也是仿真器的最小分辨时间。x<=9;y<=x;z<=xAFTER5ns;引入延时的目的是保证功能仿真时并行语句能够正确执行§5.7仿真延时7474知识扩展——电子电路中的延时与时序分析(参看P284~287)Tools→TimingAnalyzertool§5.7仿真延时7575QuartusII中的时序分析报告7676时序约束(TimingAssignments或TimingConstraints)的主要作用提高设计的工作频率(速度优化)

通过附加时序约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时,从而提高工作频率。获得正确的时序分析报告

QuartusII的静态时序分析(STA)工具以约束作为判断时序是否满足设计要求的标准,因此要求设计者正确输入时序约束,以便STA工具能输出正确的时序分析结果。7777静态时序分析与动态时序仿真的区别动态时序仿真:针对给定的仿真输入信号波形,模拟设计在器件实际工作时的功能和延时情况,给出相应的仿真输出信号波形。主要用于验证设计在器件实际延时情况下的逻辑功能。由动态时序仿真报告无法得到设计的各项时序性能指标,如最高时钟频率等。静态时序分析:通过分析每个时序路径的延时,计算出设计的各项时序性能指标,如最高时钟频率、建立保持时间等,发现时序违规。仅仅聚焦于时序性能的分析,并不涉及设计的逻辑功能,逻辑功能验证仍需通过仿真或其他手段(如形式验证等)进行。静态时序分析是最常用的分析、调试时序性能的方法和工具。7878设计中常用的时序概念时钟偏斜周期与最高频率建立时间保持时间时钟到输出延时管脚到管脚延时Slack7979定义为由输入引脚到输出引脚的最大延迟时间.知识扩展——电子电路中的延时Tsu:setuptime(建立时间)定义输入信号D在clockedge多久前就需稳定的最大需求;以上升沿触发的DFF为例,就是D要比CLK提前Tsu

时间以前就要准备好,此DFF才能正常工作.Th:holdtime(保持时间)Tco:clockoutputdelay(时钟输出延迟)Tpd:propagationdelay(传输延迟)定义输入信号在clockedge后多久内仍需稳定的最大要求;以上升沿触发的DFF为例,就是D要在CLK上升缘触发后Th时间内仍需要提供稳定的数据D,此DFF才能正常输出.定义由clocklatch/trigger到输出数据有效的最大延迟时间;以上升沿触发的DFF为例,就是Q要在CLK上升沿触发后至多Tco时间就会稳定输出.§5.7仿真延时8080时钟偏斜clockskew时钟偏斜clockskew

:指一个同源时钟到达两个不同的寄存器时钟端的时间差别。8181最小时钟周期与最高时钟频率最小时钟周期:

TCLK=Microtco

+tLOGIC

+tNET

+MicrotSU-tCLK_SKEW

tCLK_SKEW=tCD2-tCD1最高时钟频率: Fmax

=1/TCLK同步电路数据传输模型8282建立时间Tsu建立时间TSU

:在触发器的时钟信号有效沿到来以前,数据和使能信号必须保持稳定不变的最小时间。如果建立时间不够,数据将不能在该时钟沿被正确打入触发器。

TSU=DataDelay+MicrotSU

-ClockDelay

8383保持时间Th保持时间:在触发器的时钟信号有效沿到来以后,数据和使能信号必须保持稳定不变的最小时间。如果保持时间不够,数据同样不能被正确打入触发器。

Th=ClockDelay–

DataDelay+MicroTh8484时钟到输出延时Tco时钟到输出延时:从时钟信号有效沿到数据有效的时间间隔。

TCO=ClockDelay+MicrotCO

+

DataDelay8585管脚到管脚延时Tpd管脚到管脚延时

Tpd(pin-to-pindelay):指信号从输入管脚进来,穿过纯组合逻辑,到达输出管脚的延迟。由于CPLD的布线矩阵长度固定,所以常用最大管脚到管脚延时表示CPLD的速度等级。8686Slack(松弛部分:裕量)Slack用于表示设计是否满足时序:正的Slack表示满足时序(时序裕量),负的Slack表示不满足时序(时序的欠缺量)。slack=

<requiredmaximumpoint-to-pointtime>-<actualmaximumpoint-to-pointtime>8787Slack:setupslackSetupSlack=SlackClockPeriod –(Microtco

+DataDelay

+MicrotSU

)相关作业:5-1,5-28888§5.8VHDL的RTL表述VHDL描述形式(建模方法)行为描述RTL描述(数据流描述)结构描述8989§5.8VHDL的RTL表述5.8.1行为描述行为描述:结构体中只描述希望电路的功能或行为,不包含硬件结构信息。一般采用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论