【精品】eda技术与vhdl设计(西电版第5章 vhdl基本语句(可编辑.ppt
《【精品】eda技术与vhdl设计(西电版第5章 vhdl基本语句(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】eda技术与vhdl设计(西电版第5章 vhdl基本语句(可编辑.ppt(219页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、EDA技术与VHDL设计(西电版)第5章 VHDL基本语句2 2第5章 VHDL基本语句 5.1 并并 行行 语语 句句VHDL中既具有并行语句(如元件例化语句),也具有顺序语句(如IF语句)。不同的语句使用在不同的地方。对于VHDL设计者来说,重要的是要知道哪些语句结构中需要使用并行语句,哪些语句结构中需要使用顺序语句。可以简单地概括为:结构体中除进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)结构内部以外的其他VHDL代码都是并行语句,如图5-1所示。需要注意的是,信号赋值语句既可以出现在进程中,也可以出现在结构体的并行语句部分,只是运行的含义不同(参考4.2.
2、3节)。3 3第5章 VHDL基本语句 图5-1 结构体中的语句使用示例 4 4第5章 VHDL基本语句 5.1.1 并行语句的特点并行语句的特点并行语句是硬件描述语言的一大特点,它与C语言等计算机高级程序设计语言最大的不同是:并行语句在结构体中的执行是并行的,不会因为书写顺序的前后而产生执行顺序的先后。例5-1和例5-2结构体内都含有3条相同的并行语句,它们体现了在不同的描述顺序下,仍然能够综合出一致的电路结构,如图5-2所示。5 5第5章 VHDL基本语句 图5-2 例5-1和例5-2综合后电路结构 6 6第5章 VHDL基本语句 7 7第5章 VHDL基本语句 8 8第5章 VHDL基本
3、语句 正如图5-2的硬件电路图所表明的,只有当信号a或者b的值改变后才能执行赋值语句“x=a AND b;”,即信号a或b的值改变之前信号x的值不会发生变化。同样,信号x的值改变之前,y的值也不会发生变化;信号c或y的值改变之前,z的值也不会发生变化。由此可以看出,VHDL代码的执行是由事件控制的,这就意味着并行VHDL语句可以按任意顺序书写,其设计的功能不变。例5-3再次显示了并行语句的特点,L13L15这3条语句对应生成了3个加法器(见图5-3),即3个加法器同时在进行加法操作,没有顺序关系,而不是一个加法器顺序执行3条加法操作指令。VHDL代码最终实现的是具体的硬件电路,而不是在CPU中
4、的逐条指令执行,这是VHDL语言相对于传统软件语言的不同。9 9第5章 VHDL基本语句【例5-3】10 10第5章 VHDL基本语句 图5-3 例5-3综合后电路结构 11 11第5章 VHDL基本语句 在一个结构体内部,可以有一种或是几种类型的并行语句。并行语句之间通过信号进行信息的传递。图5-4所示是结构体中并行语句的结构示意图,从图中可以看到,VHDL支持的并行语句主要有进程语句、元件例化语句(包括类属参数传递映射语句)、并行信号赋值语句、生成语句、并行过程(或函数)调用语句以及块语句。下面分别讲述每一种语句的结构和应用。12 12第5章 VHDL基本语句 图5-4 并行语句结构示意图
5、 13 13第5章 VHDL基本语句 5.1.2 进程语句进程语句在一个结构体内可以有一个或多个进程,不同进程的地位是相同的。进程间的执行是并行的、独立的,由各自敏感信号的变化触发。一个进程有两个状态:等待状态和执行状态。在等待状态下,当任一敏感信号发生变化时,进程立即启动进入执行状态。当进程顺序执行到END PROCESS语句时,重新进入等待状态,等待下一次敏感信号的改变。进程语句内部结构由一系列顺序语句构成,能够很好地体现VHDL语言的行为描述能力。进程语句的语法格式已在3.5.3节中讲述,这里不再赘述。14 14第5章 VHDL基本语句 VHDL中的进程有两种类型:组合进程和时序进程。组
6、合进程用于设计组合逻辑电路,时序进程用于设计引入了触发器的时序逻辑电路。在组合进程中,所有输入信号必须都包含到敏感信号参数表中,包括赋值符号“=”右边的所有信号以及IF语句、CASE语句的判断表达式中的所有信号。如果有一个信号没有包含在敏感信号参数表中,则当这个被忽略的信号变化时,该进程不会被激活,输出信号也不会得到新的赋值。15 15第5章 VHDL基本语句 时序进程又可分为同步和异步两类。同步进程只对时钟信号敏感,即仅在时钟的边沿启动;异步进程除了对时钟信号敏感外,还对影响异步行为的输入信号敏感,即该输入信号的变化也能启动进程。例5-4显示了一个带有异步复位信号reset的D触发器。当信号
7、reset取值为“1”时,输出q立即被复位为“0”,而不管此时是否有时钟信号clk的上升沿到来,即信号reset的变化也能够启动进程。当信号reset取值为“0”时,如果有时钟信号的上升沿到来,则输出q被赋值为d,仿真结果如图5-5所示。16 16第5章 VHDL基本语句【例5-4】17 17第5章 VHDL基本语句 图5-5 例5-4异步复位D触发器时序仿真波形 18 18第5章 VHDL基本语句 例5-5是同步时序进程,只有时钟信号的上升沿到来时才能启动进程,即使信号reset发生改变(从“0”变化到“1”)也不能启动进程。例5-5的仿真结果见图5-6。可以看到,当复位信号reset从“0
8、”变为“1”时,由于此时并无时钟信号clk的上升沿到来,所以进程仍处于等待状态,输出q维持原值。当clk上升沿到来后,进程被启动,此时再判断信号reset的取值,如果为“1”,则输入q被复位为“0”。19 19第5章 VHDL基本语句【例5-5】2020第5章 VHDL基本语句 图5-6 例5-5同步复位D触发器时序仿真波形 21 21第5章 VHDL基本语句 电路系统有时既需要利用到时钟信号的上升沿又需要利用到下降沿,即在两个边沿时刻都需要处理数据;然而VHDL一般不允许对同一信号在时钟的两个边沿进行数据的赋值处理,且不论是在一个进程中(见例5-6)还是在不同的进程中(见例5-7)。例5-6
9、的本意是想实现当时钟信号clk上升沿到来时,将数据d1赋值给q;当时钟下降沿到来时,将数据d2赋值给q。编译后出现图5-7所示错误,显示无法在时钟的边沿实现寄存器的操作。例5-7省略了实体描述,它在不同的进程中对同一信号q赋值,可以看成是两条并行语句(一个进程可以看做一条并行语句)对同一信号赋值,这也是错误的。2222第5章 VHDL基本语句【例5-6】2323第5章 VHDL基本语句【例5-7】2424第5章 VHDL基本语句 图5-7 例5-6编译出现错误 2525第5章 VHDL基本语句 例5-8是一个正确的示例,虽然它也同时用到了时钟信号的上升沿和下降沿,但由于不是对同一信号赋值所以能
10、够通过编译。在时钟信号clk上升沿到来时刻,将输入信号d赋值给信号q1;而在时钟信号clk下降沿到来时刻,输出信号q得到信号q1的赋值,即输出信号q在时钟信号clk下降沿到来时刻才能得到输入信号d的值,仿真波形如图5-8所示。2626第5章 VHDL基本语句【例5-8】2727第5章 VHDL基本语句 图5-8 例5-8时序仿真波形2828第5章 VHDL基本语句 5.1.3 元件例化语句元件例化语句元件例化就是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前设计实体中指定的端口连接,从而为当前设计实体引入一个新的低一级的设计层次。元件例化可以是多层次的,即在当前设计实体
11、中调用的元件本身也是一个低层次的设计实体,它也可以通过调用其他的元件来实现。元件可以是一个已经设计好的设计实体(采用VHDL语言或者采用Verilog语言设计的实体),也可以是来自FPGA元件库中的元件,或是LPM模块、IP核等。元件例化语句一般由两部分组成:元件声明和元件例化。元件声明放在结构体说明语句部分(关键词ARCHITECTURE和BEGIN之间),元件例化放于结构体功能描述语句部分(关键词BEGIN后),其基本语法格式已在3.7节中讲述,这里不再赘述。2929第5章 VHDL基本语句 5.1.4 并行信号赋值语句并行信号赋值语句并行信号赋值语句有三种形式,分别是简单信号赋值语句、条
12、件信号赋值语句(WHEN/ELSE语句)和选择信号赋值语句(WITH/SELECT/WHEN语句)。这三种语句的共同点是:赋值目标都必须是信号,且语句在结构体内的执行是并行的。3030第5章 VHDL基本语句 1简单信号赋值语句简单信号赋值语句简单信号赋值语句是VHDL并行语句结构中最基本的单元,在前面的章节中已经多次用到该语句,如例5-1(L12L14)、例5-2(L12L14)和例5-3(L13L15)都使用了简单信号赋值语句。需要注意的是,赋值符号“=”左右两边的数据类型必须一致。每一条简单信号赋值语句都相当于一条缩写的进程语句,而这条语句的所有输入(或读入)信号都被隐形地列入此缩写进程
13、的敏感信号参数表中。任何输入信号的变化都将启动相关并行语句的赋值操作,而这种启动是完全独立于其他语句的。31 31第5章 VHDL基本语句 2条件信号赋值语句(WHEN/ELSE语句)例5-9是采用WHEN/ELSE语句实现的4选1多路选择器,其元件图见图5-9。该设计实体有4个数据输入端a、b、c、d,数据类型为STD_LOGIC;有一个数据选择控制端sel,数据类型是STD_LOGIC_VECTOR,可以有“00”、“01”、“10”、“11”4个取值。当sel取值为“00”时,输出y被赋值a;当sel取值为“01”时,y被赋值b;当sel取值为“10”时,y被赋值c;当sel取值为“11
14、”时,y被赋值d。仿真结果如图5-10所示。3232第5章 VHDL基本语句 图5-9 4选1多路选择器3333第5章 VHDL基本语句【例5-9】3434第5章 VHDL基本语句 图5-10 4选1多路选择器时序仿真波形 3535第5章 VHDL基本语句 WHEN/ELSE语句的功能与在进程中的IF语句功能相似,它通过判别条件是否为真来决定是否执行与该条件相对应的表达式的赋值,其一般语句格式如下:赋值目标=表达式1 WHEN 条件1 ELSE表达式2 WHEN 条件2 ELSE表达式3 WHEN 条件3 ELSE.表达式n;3636第5章 VHDL基本语句 WHEN/ELSE语句使用中要注意
15、以下几点:(1)“WHEN 条件 ELSE”称为条件子句,条件子句后不需要加分号(或逗号)。(2)条件的判别是按照书写的顺序逐项进行测定的,一旦发现条件为TRUE,即将对应表达式的值赋予赋值目标。也就是说,执行赋值的表达式是第一个满足布尔条件为真所对应的表达式。(3)当所有条件都不满足时,执行最后一条表达式的赋值。最后一条表达式没有条件子句,需要加分号,代表WHEN/ELSE语句的结束。(4)条件中允许使用不同的信号,这使得WHEN/ELSE语句在设计时非常灵活。3737第5章 VHDL基本语句 例5-10是一个简单的3选1数据选择器,再次显示了WHEN/ELSE语句条件判别的顺序性。此例条件
16、中的信号不同,分别是s1和s2,代表两个选择控制端。当s1和s2同时取值“1”时,由于书写的顺序性,导致第一条子句具有最高的优先级,即y获得的赋值是a。图5-11是利用Quartus软件综合后的电路结构,由两个2选1选择器构成。当选择控制端s2取值“1”时,第一个选择器输出b,则第2个选择器在a和b这两个数据中选择。当选择控制端s1也取值“1”时,第2个选择器输出a,功能与WHEN/ELSE语句的优先级相同。时序仿真波形见图5-12。虽然WHEN/ELSE语句的条件判别具有顺序性,但其实质是生成硬件电路,语句本身是并行的;即当有多条WHEN/ELSE语句时,由各自的敏感信号(语句的所有输入信号
17、,如例5-10中的a、b、c、s1、s2)触发。总结来说,在多条WHEN/ELSE语句之间,书写顺序并不重要;但在WHEN/ELSE语句内部,顺序是重要的,决定了赋值的结果。3838第5章 VHDL基本语句【例5-10】3939第5章 VHDL基本语句 图5-11 例5-10 3选1数据选择器综合后电路结构 4040第5章 VHDL基本语句 图5-12 例5-10 3选1数据选择器时序仿真波形 41 41第5章 VHDL基本语句 3选择信号赋值语句选择信号赋值语句(WITH/SELECT/WHEN语句语句)例5-11是利用WITH/SELECT/WHEN语句实现的4选1多路选择器。从中可以发现
18、选择信号赋值语句与条件信号赋值语句类似,都是根据条件选择相应的表达式对目标信号进行赋值的。4242第5章 VHDL基本语句【例5-11】4343第5章 VHDL基本语句 选择信号赋值语句的一般格式如下:WITH 选择表达式 SELECT赋值目标=表达式1 WHEN 选择值1,表达式 2 WHEN 选择值2,表达式 n-1 WHEN 选择值n,表达式 n WHEN OTHERS;4444第5章 VHDL基本语句 WITH/SELECT/WHEN语句使用中要注意以下几点:(1)关键词WITH后的选择表达式是选择信号赋值语句的敏感量。每当选择表达式的值发生变化时,就将启动语句对各子句的选择值进行对比
19、,当发现有满足条件的子句时,就将此子句中的表达式的值赋给目标信号。(2)选择值需要覆盖选择表达式的所有可能取值,如果不能将其覆盖,最后必须加上WHEN OTHERS子句。(3)选择信号赋值语句对子句选择值的对比具有同期性,不像条件信号赋值语句那样按照书写顺序从上至下逐条测试。因此,选择信号赋值语句中的选择值不能出现重复的情况。4545第5章 VHDL基本语句(4)与条件信号赋值语句相比,选择信号赋值语句只允许一个选择表达式;而条件信号赋值语句允许在条件中使用不同的信号。(5)特别注意选择信号赋值语句的每一子句结尾用逗号分割,最后一条子句结尾用分号表示结束;而条件信号赋值语句每一子句的结尾没有任
20、何标点,只有最后一条子句的结尾用分号表示结束。4646第5章 VHDL基本语句 5.1.5 块语句块语句块语句(BLOCK语句)是并行语句,内部所包含的语句也是并行语句。块语句可以将结构体中的并行语句进行分割和组合,有利于对较长代码的管理和提高可读性。块语句有两种基本形式:简单块语句和保护块语句。1简单块语句简单块语句简单块语句的语句格式如下:标号:BLOCK块声明部分;BEGIN并行语句;END BLOCK标号;4747第5章 VHDL基本语句 标号是设计者自定义的标识符,是块的名称。在关键词BLOCK前的标号是必需的,而在END BLOCK后的标号可以省略。块声明部分可以声明块的局部对象,
21、包括数据类型、常量、信号、子程序等,块声明部分也不是必需的。例5-12是一个简单的块语句的示例。4848第5章 VHDL基本语句【例5-12】ARCHITECTURE construct OF ex ISBEGIN b1:BLOCK SIGNAL y:BIT;BEGIN y=a AND b;END BLOCK;END;4949第5章 VHDL基本语句 块语句(不管是简单块语句还是保护块语句)能够嵌套在另一个块语句中。例5-13显示了三个嵌套的块语句b1、b2和b3,其中块b2嵌套在块b1中,块b3嵌套在块b2中。块中声明的对象对这个块以及嵌套在其中的所有块都是可见的,且当子块声明的对象与父块声
22、明的对象具有相同的名称时,子块将忽略父块的声明。5050第5章 VHDL基本语句【例5-13】b1:BLOCK SIGNAL s:BIT;-声明块b1中的信号sBEGIN s=a AND b;-此处的信号s是块b1所声明的 b2:BLOCK SIGNAL s:BIT -声明块b2中的信号s BEGIN s=c AND d;-此处的信号s是块b2中声明的 b3:BLOCK BEGIN x=s;-此处的信号s是块b2中声明的 END BLOCK b3;END BLOCK b2;y 实参表达式,形参名=实参表达式,);形参名是待调用过程中已经声明的参数名。在调用过程时,形参名和连接符号“=”可以省略
23、,类似于元件例化时端口映射语句PORT MAP的两种映射方式:名称映射和位置映射。例5-15中声明了一个过程halfadd,该过程用于实现半加器的功能。随后进行了两次调用,一次是并行过程调用,使用名称映射的方式;一次是在进程中的顺序调用,使用位置映射的方式。这两条过程调用语句是并行的,且完成的功能一致。5757第5章 VHDL基本语句【例【例5-15】PROCEDURE halfadd(SIGNAL a,b:IN STD_LOGIC;-声明一个名为halfadd的过程SIGNAL sum:OUT STD_LOGIC);halfadd(a=a1,b=b1,sum=sum1);-并行过程调用 PR
24、OCESS(x1,x2)BEGIN halfadd(x1,x2,s1);-顺序过程调用END PROCESS;并行过程的调用可以获得被调用过程的多个复制电路。函数与过程类似,也可以实现并行调用和顺序调用,函数的调用将在第7章中讲述。5858第5章 VHDL基本语句 5.1.7 生成语句生成语句生成语句(GENERATE 语句)与LOOP语句类似,可以实现某一段代码的重复多次执行。这意味着生成语句有一种复制作用,能够产生多个完全相同的元件。生成语句有FOR/GENERATE和IF/GENERATE两种使用形式。1FOR/GENERATE语句FOR/GENERATE语句的格式如下:标号:FOR 循
25、环变量 IN 取值范围 GENERATE 并行语句END GENERATE 标号;5959第5章 VHDL基本语句 需要注意的是,关键词前的标号是设计者自行定义的标识符,它是必需的。循环变量是自动由生成语句声明的,不需要事先声明,它仅是一个局部变量,根据取值范围自动递增或递减。取值范围必须是一个可计算的整数范围,它的语句格式有两种形式,分别是:(1)表达式 TO 表达式;-递增方式(2)表达式 DOWNTO 表达式;-递减方式6060第5章 VHDL基本语句 FOR/GENERATE语句中的并行语句可以是本节中讲述的任何并行语句,包括:进程语句、元件例化语句、并行信号赋值语句、块语句、并行过程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 【精品】eda技术与vhdl设计西电版第5章 vhdl基本语句可编辑 eda 技术 vhdl 设计 西电版第 基本 语句 编辑
限制150内