VHDL语言描述语句_第1页
VHDL语言描述语句_第2页
VHDL语言描述语句_第3页
VHDL语言描述语句_第4页
VHDL语言描述语句_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、整理课件整理课件VHDLVHDL语言描述语句语言描述语句一、VHDL语句分类;二、基本的VHDL顺序语句三、基本的VHDL并行语句四、常用组合单元电路VHDL设计五、常用时序单元电路VHDL设计整理课件一、一、VHDLVHDL语句分类语句分类l 按照功能分类:按照功能分类:n 赋值语句;n 数据流控制语句(转向控制语句):uCase when ( 顺序 );uIf else ( 顺序 );uwith select when ( 并 );uWhen else ( 并 );n 模块化设计语句:process ; component ; generate ; block ;forloop ; 子程序

2、调用语句n 仿真语句: wait ; n 按照语句的执行方式特点分为:按照语句的执行方式特点分为:n 并行语句:u 按动作特点:语句执行顺序与书写顺序无关;u 使用范围 :进程语句外部的语句都是并行的;u 实际应用 :对应于各自独立运行的逻辑电路;n 顺序语句:u 按动作特点:照语句书写顺序执行;u 使用范围 :进程、函数和过程内部出现;1. 实际应用 :时序电路、数据流控制电路;整理课件整理课件基本的基本的VHDLVHDL顺序语句顺序语句l VHDL中的顺序语句用于描述进程或子程序的内部功能,且只能出现在PROCESS、FUNCTION、PROCEDURE等语句中。l 可以用来设计 时序电路

3、、组合电路。l 主要作用:时序流控制、程序控制、条件和迭代等,行为描述代码。l 常用的顺序语句见下表。顺序语句顺序语句语句作用语句作用是否可综合是否可综合顺序赋值语句信号或变量赋值可综合IF语句条件控制可综合CASE语句条件控制可综合LOOP语句循环控制循环次数有限时可综合WAIT语句描述延迟WAIT ON和WAIT UNTIL可综合NULL语句空操作可综合ASSERT语句仿真时报告错误不可综合整理课件1 1、processprocess( (进程进程) );2 2、信号和变量;、信号和变量;3 3、IFIF语句;语句;4 4、C ASEC ASE语句;语句;5 5、CASECASE语句和语句

4、和IFIF语句的比较;语句的比较;6 6、LOOPLOOP语句;语句;7 7、WAITWAIT语句;语句;8 8、使用顺序代码设计组合逻辑电路;、使用顺序代码设计组合逻辑电路;基本的基本的VHDL顺序语句顺序语句整理课件5.3.1 进程(PROCESS)语句语法说明:1、Process为过程语句,定义如下:进程标号: Process 触发信号1,触发信号2, 定义区 Begin顺序语句End Process 进程标号 ;注: 方括号内容可以省略;触发信号将决定该过程是否执行;一个结构体当中可以有多个过程;多个进程语句之间是并行执行,进程内部属于顺序执行语句。整理课件2.2.进程语句进程语句语法

5、说明语法说明l进程标号进程标号:用于标识进程,可选。多个进程时,提高程序可读性;l敏感信号列表敏感信号列表:敏感信号发生变化(上升沿或者下降沿)变化(上升沿或者下降沿),进程被 激活,从而执行内部顺序语句。 注意:可以有多个敏感信号,用逗号隔开,任何一个变化都激活进 程,否则进程挂起。l进程声明区:进程声明区: 用于定义进程内部的局部变量,信号不可在此声明。进程之间数据 交流通过全局信号。l顺序语句: 进程内部语句顺序执行。l用处:适合描述时序电路。也可用于组合逻辑电路的设计。整理课件例例1 1:进程语句例程:进程语句例程带异步复位的带异步复位的D D触发器触发器LIBRARY IEEE ;U

6、SE IEEE.STD_LOGIC_1164.ALL ;ENTITY cydff ISPORT ( d,clk,rst : IN STD_LOGIC ; q : OUT STD_LOGIC ) ;END ENTITY cydff ;ARCHITECTURE behave OF cydff ISBEGINcydff_inst : PROCESS ( clkclk,rstrst ) BEGIN IF (rst=1) then q=0; elsIF ( clk=1 AND clkLAST_VALUE=0 AND clkEVENT ) THEN q=d; END IF ; END PROCESS cy

7、dff_inst ;END ARCHITECTURE behave ;整理课件l 语法说明:n 时钟沿的VHDL描述方法总结(3种): clkevent and clk=1 ; clkevent and clk=0 ; clk=1 AND clkEVENT AND clkLAST_VALUE=0 clk=0 AND clkEVENT AND clkLAST_VALUE=1 rising_edge(clk) ; falling_edge(clk);Clkevent ?上升沿描述上升沿描述1:下降沿描述下降沿描述1:上升沿描述上升沿描述2:下降沿描述下降沿描述2:上升沿描述上升沿描述3:下降沿描述

8、下降沿描述3:整理课件进程语句总结:进程语句总结:l 进程仅在敏感信号发生变化时才执行。l 特点:进程内部,顺序语句;进程语句之间,并行。l 不同进程内不可以对同一信号赋值,即不可多重赋值。l 进程内信号和变量赋值效果不同。l 一个进程内不能同时扑捉同一个时钟信号的上升沿或者下降沿。例如下面语句是错误的:PROCESS(clk)BEGINIF rising_edge(clk) then elsif falling_edge(clk) then end if; end peocess;整理课件entity mul isport (a,b,c,selx,sely : IN bit; data_ou

9、t: OUT BIT);end mul;ARCHITECTURE ex OF mul IS SIGNAL temp :BIT ; BEGIN p_a: PROCESS(a a,b b,selxselx) BEGIN IF(SELX=0) THEN temp=a; ELSE temp=b; END IF; END PROCESS p_a; p_b: PROCESS(temptemp,c c,selysely) BEGIN IF(SELy=0) THEN data_out=temp; ELSE temp=c; END IF; END PROCESS p_b;end ex;整理课件1、信号和变量异同

10、:(1)、声明范围:。 信号:ENTITY,ARCHITECTURE,PACKAGE(ALL) 变量:顺序语句中(PROCESS、子程序)(2)、作用:动态数值传递,存储运算中间结 果(变量)。(3)、使用范围:全局(sig),局部(var)。(4)、变量结果只能由信号传递到外部。(5)、动作特点: 变量:立即更新。 信号:process执行完毕才生效。(允许多驱动源,仅最后 一个有效)(6)、操作符: 信号: = 变量: :=2 2、信号和变量、信号和变量整理课件例2 :ARCHITECTURE behavioral OF example_duibi ISSIGNAL d0, d1, d2,

11、 d3 : STD_LOGIC ; - 定义信号 SIGNAL q0, q1 : STD_LOGIC ;BEGINli_1 :PROCESS (d0, d1, d2, d3 ) BEGIN d2 = d0 ; - 信号量代入 q0 = d2 OR d3 ; d2 = d1 ; - 信号量代入 q1 = d2 OR d3 ; END PROCESS cduibi_1 ;li_2 : PROCESS (d0, d1, d3 ) VARIABLE m2 : STD_LOGIC ; BEGIN m2 : = d0 ; - 变量赋值 q0 = m2 OR d3 ; m2 : = d1 ; - 变量赋值

12、q1 = m2 OR d3 ; END PROCESS cduibi_2 ;END behavioral ;进程li_1的运行结果:q0 = d1 OR d3 并且 q1 = d1 OR d3进程li_2的运行结果:q0 = d0 OR d3 而 q1 = d1 OR d3整理课件 语法说明:进程当中的赋值:变量:立即更新。信号:process执行完毕赋值才生效。同时,进程中的信号赋值语句允许有多个不同的赋值驱动源,但仅最后 一个驱动源有效整理课件3 3、IFIF语句语句IF语句 IF语句是根据所指定的条件来确定执行哪些语句,适用于比较器、译码器等需要条件控制的逻辑电路设计,通常有以下三种类型

13、。(1)用作门阀控制时的IF语句书写格式为 IF (条件) THEN 顺序处理语句; END IF; 例程: PROCESS(clk) BEGIN IF clkevent and clk=1 THEN q=d; qb=NOT d; END IF; END PROCESS;整理课件(2)用作选择控制时的IF语句书写格式为 IF (条件) THEN 顺序处理语句1; ELSE 顺序处理语句2; END IF;PROCESS(a,b,en) BEGIN IF (en=1) THEN c=a; ELSE c=b; END IF;END PROCESS;整理课件(3)用作多选择控制时的IF语句书写格式为

14、 IF 条件1 THEN 顺序处理语句1; ELSIF 条件2 THEN 顺序处理语句2; ELSIF 条件N-1 THEN 顺序处理语句N-1; ELSE 顺序处理语句N; END IF;整理课件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT( input:IN STD_LOGIC_VECTOR(3 DOWNTO 0); en:IN STD_LOGIC_VECTOR(1 DOWNTO 0); y:OUT STD_LOGIC);END mux4;ARCHITECTURE aa OF mux4 ISBEGIN PROCES

15、S(input,en) BEGIN IF (en=00) THEN y=input(0); ELSIF (en=01) THEN y=input(1); ELSIF (en=10) THEN y=input(2); ELSE y=input(3); END IF; END PROCESS;END aa; 例例2(例(例5-9)四选一数据选择器)四选一数据选择器整理课件IFIF语句应用例语句应用例2 2l 8-3优先编码器(74HC148)整理课件课堂练习课堂练习11l 模10计数器;l N位移位寄存器(右移);作业1: (1)、N位移位寄存器(左移); (2)、通用模n计数器;CLKDQCDQ

16、CDQCq3q2q1DQCq0d整理课件IF IF 语句使用总结语句使用总结 If语句必须要有else,尤其组合逻辑 嵌套计数不能太多,否则关键路径会很长,会严重影响性能; 分支较多的if应想办法采用case代替; If条件判断不能太长,若逻辑比较复杂,尽量用新产生信号代替; 注意if的优先级; 尽量不使用 、=比较符。整理课件4 4、CASECASE语句语句CASE语句的一般格式为: CASECASE 表达式表达式 ISIS WHENWHEN 值值1= 1= 多条赋值语句;多条赋值语句; WHENWHEN 值值2= 2= 语句语句2 2; WHENWHEN OTHERSOTHERS = =

17、语句语句3 3(nullnull、unaffectedunaffected);); END CASE END CASE;当需要对多个条件进行判断时:(1)、WHEN 值= 语句; -单个值(2)、WHEN 值 | 值 | 值 | 值=语句;-多个值的“或”(3)、WHEN 值 TO 值=语句; -取值范围,枚举整理课件例5-10 用CASE语句描述4选1电路。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(s1,s2,a,b,c,d:IN STD_LOGIC; z:OUT STD_LOGIC);END mux4;ARCH

18、ITECTURE a OF mux4 IS SIGNAL s :STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN SZZZZZZ 相当于 THEN (3)、分支入口条件必须唯一,且取值在表达式范围内。 (4)、分支入口选择(并行),与书写顺序无关。 (5)、OTHERS (必须列出条件表达式的所有可能) , NULL 。Case语句的条件没有优先级,综合后是一个并行多路选择器。注意:如果if语句太长,应该尽可能用case语句代替。适用于编写组合逻辑电路:译码器,编码器等。语法说明:语法说明:整理课件5、语句与语句比较: 1、有优先级的电路,用IF语句。 2、CASE语句可提

19、高程序可读性,经常用来设计状态机电路。整理课件6、LOOP及相关语句l 用途:当一段代码需要多次重复执行时。l LOOP语句的语法结构有以下两种。l 顺序语句,使用范围:进程、函数、过程。lFOR/LOOP :循环固定次数 label: FOR 循环变量 IN 范围 LOOP 顺序处理语句; END LOOP 循环标号; (2)WHILE/LOOP:循环执行直到某个条件不再满足 label : WHILE (条件) LOOP 顺序处理语句; END LOOP 循环标号;整理课件6 6、LOOPLOOP及相关语句及相关语句(3)、NEXT:跳出本次循环 label: NEXT loop_labe

20、l when 条件表达式;(4)、EXIT:结束整个循环操作 label: EXIT loop_label when 条件表达式;例: FOR I IN 0 TO LOOP temp : = temp XOR cdata ( i ) ; END LOOP ; FOR I IN 0 TO LOOP不可综合,静态参数。循环次数必须为确定值或者用属性语句来定义 整理课件例:VARIABLE sum_temp : INTEGER : = 0 ;VARIABLE i : INTEGER : = 0 ;BEGINsum_examplesum_example : WHILE ( i count:=count

21、+1; WHEN others =EXIT; -跳出当前循环,使LOOP循环结束。 END CASE;END LOOP ;整理课件1、利用LOOP/EXIT语句设计一个连0检测器对输入矢量中连续出现的零的个数进行统计(从矢量左端开始统计)课堂练习课堂练习22整理课件课堂练习课堂练习22l 2、利用loop语句描述一个n位的逐级进位加法器:FAS3A3 B3C4FAS2A2 B2C3FAS1A1 B1C2FAS0A0 B0C10整理课件7. WAIT7. WAIT语句语句1、作用:替代PROCESS敏感信号列表。2、WAIT语句语法格式: WAIT -无限等待(仿真) WAIT FOR time

22、 -时间到(仿真,不可综合) WAIT UNTIL signal_condition -条件满足(可综合) WAIT ON signal1,signal2,; -敏感信号发生变化(可综合) 整理课件7.17.1、WAIT WAIT 语句说明语句说明 作用:仿真复位信号的产生:作用:仿真复位信号的产生: reset_proc:process reset_proc:process begin begin reset=1 ; reset=1 ; wait for reset_period; wait for reset_period; reset=0 ; reset=0 ; wait; wait;

23、end process; end process;整理课件7.27.2、 WAIT FOR WAIT FOR 语句语句作用:常用于描述仿真激励信号,产生时钟信号;例: constant clk_period : time:=10ns clk_process : process begin clk=0 ; wait for clk_period/2; clk=1; wait for clk_period/2; END PROCESS ; 或者: Clk_process:process(clk) begin clk=NOT clk AFTER period/2; end process;整理课件7

24、.3 WAIT UNTIL7.3 WAIT UNTIL使进程语句进入等待状态,直到UNTIL之后的条件满足后才激活。例:带同步复位端的D出触发器 PROCESS BEGIN WAIT UNTIL (clkevent and clk=1); if (rst=1) then output0); elsif clkevent and clk=1 then output= input; end if; end process;整理课件7.4 WAIT ON WAIT ON 语句使进程进入等待状态,直到ON之后信号状态发生变化才被激活,相当于进程的敏感信号列表。 WAIT ON clk,reset; -相当于在进程敏感信号列

温馨提示

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

评论

0/150

提交评论