您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDL语言描述语句
VHDL语言描述语句一、VHDL语句分类;二、基本的VHDL顺序语句三、基本的VHDL并行语句四、常用组合单元电路VHDL设计五、常用时序单元电路VHDL设计一、VHDL语句分类按照功能分类:赋值语句;数据流控制语句(转向控制语句):1.Case…when…(顺序);2.If…else…(顺序);3.with…selectwhen(并);4.When…else(并);模块化设计语句:process;component;generate;block;for…loop;子程序调用语句仿真语句:wait;按照语句的执行方式特点分为:并行语句:按动作特点:语句执行顺序与书写顺序无关;使用范围:进程语句外部的语句都是并行的;实际应用:对应于各自独立运行的逻辑电路;顺序语句:按动作特点:照语句书写顺序执行;使用范围:进程、函数和过程内部出现;实际应用:时序电路、数据流控制电路;基本的VHDL顺序语句VHDL中的顺序语句用于描述进程或子程序的内部功能,且只能出现在PROCESS、FUNCTION、PROCEDURE等语句中。可以用来设计时序电路、组合电路。主要作用:时序流控制、程序控制、条件和迭代等,行为描述代码。常用的顺序语句见下表。顺序语句语句作用是否可综合顺序赋值语句信号或变量赋值可综合IF语句条件控制可综合CASE语句条件控制可综合LOOP语句循环控制循环次数有限时可综合WAIT语句描述延迟WAITON和WAITUNTIL可综合NULL语句空操作可综合ASSERT语句仿真时报告错误不可综合1、process(进程);2、信号和变量;3、IF语句;4、CASE语句;5、CASE语句和IF语句的比较;6、LOOP语句;7、WAIT语句;8、使用顺序代码设计组合逻辑电路;基本的VHDL顺序语句5.3.1进程(PROCESS)语句语法说明:1、Process为过程语句,定义如下:[进程标号:]Process[触发信号1,触发信号2,……][定义区]Begin顺序语句……EndProcess[进程标号];注:方括号内容可以省略;触发信号将决定该过程是否执行;一个结构体当中可以有多个过程;多个进程语句之间是并行执行,进程内部属于顺序执行语句。2.进程语句——语法说明a)进程标号:用于标识进程,可选。多个进程时,提高程序可读性;a)敏感信号列表:敏感信号发生变化(上升沿或者下降沿),进程被激活,从而执行内部顺序语句。注意:可以有多个敏感信号,用逗号隔开,任何一个变化都激活进程,否则进程挂起。c)进程声明区:用于定义进程内部的局部变量,信号不可在此声明。进程之间数据交流通过全局信号。d)顺序语句:进程内部语句顺序执行。e)用处:适合描述时序电路。也可用于组合逻辑电路的设计。例1:进程语句例程——带异步复位的D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcydffISPORT(d,clk,rst:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDENTITYcydff;ARCHITECTUREbehaveOFcydffISBEGINcydff_inst:PROCESS(clk,rst)BEGINIF(rst=‘1’)thenq=‘0’;elsIF(clk='1'ANDclk'LAST_VALUE='0'ANDclk'EVENT)THENq=d;ENDIF;ENDPROCESScydff_inst;ENDARCHITECTUREbehave;语法说明:时钟沿的VHDL描述方法总结(3种):clk’eventandclk=‘1’;clk’eventandclk=‘0’;clk='1'ANDclk'EVENTANDclk'LAST_VALUE='0‘clk=‘0'ANDclk'EVENTANDclk'LAST_VALUE=‘1‘rising_edge(clk);falling_edge(clk);Clk’event??上升沿描述1:下降沿描述1:上升沿描述2:下降沿描述2:上升沿描述3:下降沿描述3:进程语句总结:进程仅在敏感信号发生变化时才执行。特点:进程内部,顺序语句;进程语句之间,并行。不同进程内不可以对同一信号赋值,即不可多重赋值。进程内信号和变量赋值效果不同。一个进程内不能同时扑捉同一个时钟信号的上升沿或者下降沿。例如下面语句是错误的:PROCESS(clk)BEGINIFrising_edge(clk)then…elsiffalling_edge(clk)then…endif;endpeocess;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;ELSEtemp=c;ENDIF;ENDPROCESSp_b;endex;1、信号和变量异同:(1)、声明范围:。信号:ENTITY,ARCHITECTURE,PACKAGE(ALL)变量:顺序语句中(PROCESS、子程序)(2)、作用:动态数值传递,存储运算中间结果(变量)。(3)、使用范围:全局(sig),局部(var)。(4)、变量结果只能由信号传递到外部。(5)、动作特点:变量:立即更新。信号:process执行完毕才生效。(允许多驱动源,仅最后一个有效)(6)、操作符:信号:=变量::=2、信号和变量例2:ARCHITECTUREbehavioralOFexample_duibiISSIGNALd0,d1,d2,d3:STD_LOGIC;--定义信号SIGNALq0,q1:STD_LOGIC;BEGINli_1:PROCESS(d0,d1,d2,d3)BEGINd2=d0;--信号量代入q0=d2ORd3;d2=d1;--信号量代入q1=d2ORd3;ENDPROCESScduibi_1;li_2:PROCESS(d0,d1,d3)VARIABLEm2:STD_LOGIC;BEGINm2:=d0;--变量赋值q0=m2ORd3;m2:=d1;--变量赋值q1=m2ORd3;ENDPROCESScduibi_2;ENDbehavioral;进程li_1的运行结果:q0=d1ORd3并且q1=d1ORd3进程li_2的运行结果:q0=d0ORd3而q1=d1ORd3•语法说明:进程当中的赋值:变量:立即更新。信号:process执行完毕赋值才生效。同时,进程中的信号赋值语句允许有多个不同的赋值驱动源,但仅最后一个驱动源有效3、IF语句IF语句IF语句是根据所指定的条件来确定执行哪些语句,适用于比较器、译码器等需要条件控制的逻辑电路设计,通常有以下三种类型。(1)用作门阀控制时的IF语句书写格式为IF(条件)THEN顺序处理语句;ENDIF;例程:PROCESS(clk)BEGINIFclk’eventandclk=‘1’THENq=d;qb=NOTd;ENDIF;ENDPROCESS;(2)用作选择控制时的IF语句书写格式为IF(条件)THEN顺序处理语句1;ELSE顺序处理语句2;ENDIF;PROCESS(a,b,en)BEGINIF(en='1')THENc=a;ELSEc=b;ENDIF;ENDPROCESS;(3)用作多选择控制时的IF语句书写格式为IF条件1THEN顺序处理语句1;ELSIF条件2THEN顺序处理语句2;┆ELSIF条件N-1THEN顺序处理语句N-1;ELSE顺序处理语句N;ENDIF;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(input:INSTD_LOGIC_VECTOR(3DOWNTO0);en:INSTD_LOGIC_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREaaOFmux4ISBEGINPROCESS(input,en)BEGINIF(en=00)THENy=input(0);ELSIF(en=01)THENy=input(1);ELSIF(en=10)THENy=input(2);ELSEy=input(3);ENDIF;ENDPROCESS;ENDaa;例2(例5-9)四选一数据选择器IF语句应用例28-3优先编码器(74HC148)课堂练习—1模10计数器;N位移位寄存器(右移);作业1:(1)、N位移位寄存器(左移);(2)、通用模n计数器;CLKDQCDQCDQCq3q2q1DQCq0dIF语句使用总结If语句必须要有else,尤其组合逻辑嵌套计数不能太多,否则关键路径会很长,会严重影响性能;分支较多的if应想办法采用case代替;If条件判断不能太长,若逻辑比较复杂,尽量用新产生信号代替;注意if的优先级;尽量不使用、、=、=比较符。4、CASE语句CASE语句的一般格式为:CASE表达式ISWHEN值1=多条赋值语句;WHEN值2=语句2;WHENOTHERS=语句3(null、unaffected);ENDCASE;当需要对多个条件进行判断时:(1)、WHEN值=语句;--单个值(2)、WHEN值|值|值|…|值=语句;--多个值的“或”(3)、WHEN值TO值=语句;--取值范围,枚举例5-10用CASE语句描述4选1电路。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(s1,s2,a,b,c,d:INSTD_LOGIC;z:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREaOFmux4ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINS=S1&S2;PROCESS(s1,s2,a,b,c,d)BEGINCASESISWHEN“00”=Z=a;WHEN“01”=Z=b;WHEN“10”=Z=c;WHEN“11”=Z=d;WHENothers=Z=‘X’;ENDCASE;ENDPROCESS;ENDa;覆盖全部条件不能有重复条件只能在最后出现(1)、条件表达式:整数、枚举、数组。(2)、=相当于THEN(3)、分支入口条件必须唯一,且取值在表达式范围内。(4)、分支入口选择(并行),与书写顺序无关。(5)、OTHERS(必须列出条件表达式的所有可能),NULL。Case语句的条件没有优先级,综合后是一个并行多路选择器。注意:如果if语句太长,应该尽可能用case语句代替。适用于编写组合逻辑电路:译码器,编码器等。语法说明:5、CASE语句与IF语句比较:1、有优先级的电路,用IF语句。2、CASE语句可提高程序可读性,经常用来设计状态机电路。6、LOOP及相关语句用途:当一段代码需要多次重复执行时。LOOP语句的语法结构有以下两种。顺序语句,使用范围:进程、函数、过程。(1)FOR/LOOP:循环固定次数[label:]FOR循环变量IN范围LOOP顺序处理语句;ENDLOOP[循环标号];(2)WHILE/LOOP:循环执行直到某个条件不再满足[label:]WHILE(条件)LOOP顺序处理语句;ENDLOOP[循环标号];6、LOOP及相关语句(3)、NEXT:跳出本次循环[label:]NEXT[loop_label][when条件表达式];(4)、EXIT:结束整个循环操作[label:]EXIT[loop_label
本文标题:VHDL语言描述语句
链接地址:https://www.777doc.com/doc-5334997 .html