VHDL学习资料6优质PPT.ppt
《VHDL学习资料6优质PPT.ppt》由会员分享,可在线阅读,更多相关《VHDL学习资料6优质PPT.ppt(81页珍藏版)》请在冰豆网上搜索。
对于表中列出的任何进程赖以启动的敏感表。
对于表中列出的任何信号的改变,都将启动进程,执行进程内相应信号的改变,都将启动进程,执行进程内相应顺序语句。
顺序语句。
一些一些VHDL综合器,综合后,对应进程的硬件系综合器,综合后,对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不统对进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的信号都列人论在源程序的进程中是否把所有的信号都列人敏感表中。
敏感表中。
为了使软件仿真与综合后的硬件仿真对应起来,为了使软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输人信号都列入敏感表中。
应当将进程中的所有输人信号都列入敏感表中。
敏感表举例latchlabel:
PROCESS(oe)BEGINIFoe=1THENy=a;
ENDIF;
ENDPROCESSlatchlabel;
仿真结果错误仿真结果错误仿真结果错误仿真结果错误仿真结果错误仿真结果错误敏感表举例latchlabel:
PROCESS(oe,a)BEGINIFoe=1THENy=a;
仿真结果正确仿真结果正确仿真结果正确仿真结果正确仿真结果正确仿真结果正确进程的激活与挂起由敏感信号表或等待程的激活与挂起由敏感信号表或等待语句句wait控制。
控制。
敏感信号控制敏感信号控制:
敏感信号的:
敏感信号的变化激活化激活该进程。
程。
当当执行到最后一条行到最后一条语句句时,进程挂起,等待敏程挂起,等待敏感信号的感信号的变化。
化。
进程挂起程挂起时,进程中的信号、程中的信号、变量的状量的状态保持不保持不变。
wait控制控制:
运行开始(初始化):
运行开始(初始化)时,所有,所有进程程均被激活,并均被激活,并执行。
当行。
当执行到等待行到等待语句句时,进程挂起。
当等待程挂起。
当等待语句条件句条件满足足时,进程再次被程再次被激活,并从等待激活,并从等待语句句处接着运行,直到遇到下接着运行,直到遇到下一个等待一个等待语句,句,进程再次被挂起如此循程再次被挂起如此循环反复,反复,直到运行直到运行结束。
束。
对含有敏感信号表的含有敏感信号表的进程,其程,其执行行过程相当于程相当于进程末程末尾有一个关于敏感信号的尾有一个关于敏感信号的wait语句。
下面的两个句。
下面的两个进程是等价程是等价的:
的:
process(A,B)beginOutput=AorB;
endprocess;
processbeginOutput=AorB;
waitonA,B;
若有敏感信号表指定,若有敏感信号表指定,则不能有不能有wait语句。
句。
进程语句进程语句PROCESS1PROCESSnsignalsignalAARRCCHHIITTEECCTTUURREE一个构造体可以一个构造体可以一个构造体可以一个构造体可以有多个进程语句有多个进程语句有多个进程语句有多个进程语句进程和进程进程和进程进程和进程进程和进程之间是并行之间是并行之间是并行之间是并行的的的的进程和进程进程和进程进程和进程进程和进程之间的数据之间的数据之间的数据之间的数据交换通过信交换通过信交换通过信交换通过信号完成号完成号完成号完成进程内部是进程内部是进程内部是进程内部是顺序语句顺序语句顺序语句顺序语句一般用于组合电路进程模式一般用于组合电路进程模式l进程标记进程标记:
lPROCESS(信号名信号名1,信号名信号名2,信号名信号名n)lVARIABLE_变量名变量名:
STD_LOGIC;
lVARIABLE_变量名变量名:
lBEGINl-信号赋值信号赋值l-变量赋值变量赋值l-过程调用过程调用l-IF语句语句l-CASE语句语句l-LOOP语句语句lENDPROCESS进程标记进程标记;
用于时序电路进程模式用于时序电路进程模式l进程标记进程标记:
lPROCESSlVARIABLE变量名变量名:
lVARIABLE变量名变量名:
lBEGINlWAITUNTIL时钟信号时钟信号=1;
l或或CLKeventandCLK=1l-指定信号指定信号l-指定变量指定变量l-过程调用过程调用l-如果语句如果语句l-CASE语句语句l-循环语句循环语句lENDPROCESS进程标记进程标记;
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYif_caseISPORT(a,b,c,d:
INStd_Logic;
sel:
INStd_Logic_Vector(1downto0);
y,z:
OUTStd_Logic);
ENDif_case;
ARCHITECTURElogicOFif_caseISBEGINif_label:
PROCESS(a,b,c,d,sel)BEGINIFsel=00THENy=a;
ELSIFsel=01THENy=b;
ELSIFsel=10THENy=c;
ELSEyzzzzz=0;
ENDCASE;
ENDPROCESScase_label;
ENDlogic;
进程语句举例两个进程两个进程是并发的是并发的进程的运行进程的运行依赖于敏感依赖于敏感表内参数的表内参数的变化变化例:
一个构造体中有两个进程通信例:
一个构造体中有两个进程通信LibraryIEEE;
useieee.std_logic_1164.all;
entitycproisport(ina:
instd_logic;
outa,outb:
outstd_logic);
endentitycpr;
architecturedyofcproissignalcom_a,com_b:
STD_LOGIC:
=0;
beginJC1:
PROCESS(ina,com_a)beginif(inaorcom_a)thencom_b=1after25ns;
0after50ns;
outa=1after20ns;
0after20ns;
endif;
endprocessJC1;
JC2:
PROCESS(com_b)beginif(com_beventandcom_b=1)thencom_a=0after25ns;
1after50ns;
outb=1after20ns;
endprocessJC2;
endarchitecturedy;
进程A进程B信号inA启动进程A信号comm_A启动进程A信号comm_B启动进程B输出信号outB输出信号outA注意进程内的语句是顺序执行注意进程内的语句是顺序执行结果结果f总是总是等于等于a块语句(课本(课本29页)页)块语句(块语句(BLOCK)格式:
)格式:
(课本(课本29页)页)块标号:
块标号:
BLOCK(块保护表达式)块保护表达式)接口说明接口说明类属说明类属说明BEGIN并行语句并行语句ENDBLOCK块标号;
块标号;
说明说明块语句应用只是一种将结构体中的并行描述语块语句应用只是一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性语句及其结构的可读性从综合的角度来说,块语句的存在没有实际意从综合的角度来说,块语句的存在没有实际意义,综合器会略去所有的块语句义,综合器会略去所有的块语句保护表达式保护表达式是可选项,它是一个是可选项,它是一个布尔表达式。
保护表达式的作用布尔表达式。
保护表达式的作用是:
只有当其为真时,该块中的是:
只有当其为真时,该块中的语句才被启动执行;
否则,该块语句才被启动执行;
否则,该块中的语句不被执行。
中的语句不被执行。
【例例】a,b,c,d输入端口,输入端口,bit类型。
类型。
.b1:
BLOCKSIGNALs1:
BIT;
BEGINS1=aANDb;
b2:
BLOCKSIGNALs2:
BEGINs2=cANDd;
b3:
BLOCKBEGINZ=s2;
ENDBLOCKb3;
ENDBLOCKb2;
y=s1;
ENDBLOCKb1;
.块内定义的数据类型、块内定义的数据类型、数据对象(信号、变量、数据对象(信号、变量、常量)、子程序等都是常量)、子程序等都是局部的局部的。
例:
用BLOCK语句描述2选1电路的程序。
ENTITYmux2_1ISPORT(d0,d1,sel:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDmux2_1;
ARCHITECTUREamuxOFmux2_1ISSIGNALtmp1,tmp2,tmp3:
BEGINcale:
BLOCKBEGINtmp1=d0ANDsel;
tmp2=d1AND(notsel);
tmp3=tmp1ORtmp2;
q=tmp3;
ENDBLOCKcale;
ENDamux;
上述结构体中只有一个BLOCK块,若电路复杂时可由几个BLOCK块组成。
22选选11数据选择器数据选择器d1d0qselu2u1u3tmp1tmp2tmp3【例例】
(课本课本17页页)LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
ENTITYf_adderISPORT(ain,bin,cin:
INstd_logic;
sum,cout:
OUTstd_logic);
ENDf_adder;
ARCHITECTUREe_adOFf_adderISSIGNALe,d,f:
std_logic;
BEGINh_adder1:
BLOCK-半加器半加器u1BEGINPROCESS(ain,bin)BEGINe=(ainAND(NOTbin)OR(binAND(NOTain);
d=ainANDbin;
ENDPROCESS;
ENDBLOCKh_adder1;
【例例】
(课本课本17页页)h_adder2:
BLOCK-半加器半加器u2BEGINPROCESS(e,cin)BEGINsum=(eAND(NOTcin)OR(cinAND(NOTe);
f=ea