vhdl语言
- 格式:doc
- 大小:81.50 KB
- 文档页数:9
vhdl if else语句VHDL是硬件描述语言,用于描述数字电路。
if-else语句是VHDL中的一种常见控制结构。
if-else语句用于在某些条件下执行不同的操作。
其语法如下:if (condition) then--执行语句1elsif (condition2) then--执行语句2else--执行语句3end if;上面的语法中,condition是一个布尔表达式,用于检查是否满足某个条件。
如果满足该条件,则执行语句1。
如果不满足该条件,则继续检查condition2。
如果满足condition2,则执行语句2。
如果都不满足条件,则执行语句3。
在VHDL中,if-else语句可以嵌套使用。
例如:if (condition) thenif (condition2) then--执行语句1else--执行语句2end if;else--执行语句3end if;此外,VHDL还提供了一种简化if-else语句的方式,称为when-else语句。
其语法如下:case variable iswhen value1 =>--执行语句1when value2 =>--执行语句2when others =>--执行语句3end case;在上面的语法中,variable是一个变量,value1和value2是变量的不同取值。
当variable的值等于value1时,执行语句1。
当variable的值等于value2时,执行语句2。
当variable的值不等于value1和value2时,执行语句3。
总之,if-else语句是VHDL中非常重要的控制结构,用于根据不同的条件执行不同的操作。
使用if-else语句可以使代码更加清晰易懂。
vhdl条件赋值语句vhdl是一种硬件描述语言,用于描述硬件电路的行为和结构。
在vhdl中,条件赋值语句是一种常用的语法结构,用于根据特定条件给变量赋值。
下面列举了10个关于vhdl条件赋值语句的例子。
1. 当输入信号X为1时,将输出信号Y赋值为0;否则将Y赋值为1。
```vhdlprocess (X)beginif X = '1' thenY <= '0';elseY <= '1';end if;end process;```2. 当输入信号A为0时,将输出信号B赋值为C的值;否则将B赋值为D的值。
```vhdlprocess (A, C, D)beginif A = '0' thenB <= C;elseB <= D;end if;end process;```3. 根据输入信号Sel的值,选择对应的输入信号并赋值给输出信号Out。
```vhdlprocess (Sel, In1, In2, In3)begincase Sel iswhen "00" =>Out <= In1;when "01" =>Out <= In2;when "10" =>Out <= In3;when others =>Out <= "0000";end case;end process;```4. 如果输入信号X大于等于Y,则将输出信号Z赋值为1;否则将Z赋值为0。
```vhdlprocess (X, Y)beginif X >= Y thenZ <= '1';elseZ <= '0';end if;end process;```5. 当输入信号Valid为1且输入信号Data的值为偶数时,将输出信号Even赋值为1;否则将Even赋值为0。
vhdl if else语句
VHDL
(VeryHigh-SpeedIntegratedCircuitHardwareDescriptionLanguag e)是一种硬件描述语言,它可以用来描述数字电路的行为。
if-else 语句是VHDL中常用的条件语句。
它用于根据一个条件是否成立来执
行不同的操作,语法如下:
if condition_1 then
--执行操作1
elsif condition_2 then
--执行操作2
else
--执行操作3
end if;
其中,condition_1是一个布尔表达式,如果它的值为TRUE,就执行第一个操作;如果值为FALSE,则继续判断condition_2,如果
它的值为TRUE,则执行第二个操作;如果condition_2的值也为FALSE,则执行第三个操作。
在VHDL中,if-else语句也可以嵌套使用,以实现更复杂的条
件判断。
在使用if-else语句时,需要注意以下几点:
1. 条件表达式必须是布尔型的,即只能取TRUE或FALSE两个值。
2. 在每个条件分支中,必须有且仅有一个操作被执行。
3. else语句是可选的,如果没有else语句,则当所有条件都
不成立时,不会执行任何操作。
4. 在VHDL中,if-else语句可以与选择语句(case语句)结合使用,以实现更灵活的条件判断。
总之,if-else语句是VHDL中常用的条件语句,用于根据一个条件是否成立来执行不同的操作。
要使用if-else语句,需要熟悉它的语法和注意事项。
第6章 VHDL硬件描述语言 本章要点 VHDL语言的数据结构 VHDL语言的顺序语句和并行语句 VHDL程序设计 6.1 VHDL概述 6.1.1 VHDL的特点 (1)作为HDL的第一个国际标准,VHDL具有很强的可移植性。 (2)具有丰富的模拟仿真语句和库函数 。 (3)VHDL有良好的可读性,接近高级语言,容易理解。 (4)系统设计与硬件结构无关。 (5)支持模块化设计。 (6)用VHDL完成的一个确定设计,可以利用EDA工具自动地把VHDL描述转变成门电路级网表文件。 (7)设计灵活,修改方便。 用VHDL设计电路主要的工作过程是:编辑 、编译、功能仿真(前仿真)、综合 、布局、布线 、后仿真(时序仿真)。 6.1.2 VHDL的基本结构 一个VHDL程序必须包括实体(ENTITY)和结构体(ARCHITECTURE)。除实体和结构体外,多数程序还要包含库和程序包部分。实体中定义了一个设计模块的外部输入和输出端口,即模块(或元件)的外部特征,描述了一个元件或一个模块与其他部分(模块)之间的连接关系,可以看作是输入输出信号和芯片管脚信息。结构体主要用来说明元件内部的具体结构,即对元件内部的逻辑功能进行说明,是程序设计的核心部分。库是程序包的集合,不同的库有不同类型的程序包。程序包用来定义结构体和实体中要用到的数据类型、元件和子程序等。 【例6-1】用VHDL设计一个非门(反向器)。 非门即 y = a,设反相器的VHDL的文件名是not1.vhd,其中的.vhd是VHDL程序文件的扩展名。程序结构如下: --库和程序包部分 LIBRARY IEEE; --打开IEEE库 USE IEEE.STD_LOGIC_1164.ALL; --调用库中STD_LOGIC_1164程序包 --实体部分 ENTITY not1 IS --实体名为 not1 PORT ( --端口说明 a:IN STD_LOGIC; --定义端口类型和数据类型 y:OUT STD_LOGIC); END not1: --实体结束 --结构体部分 ARCHITECTURE inv OF not1 IS --结构体名为 inv BEGIN y <= NOT a; --将a取反后赋值给输出端口y END inv; --结构体结束 这是一个完整的VHDL源程序实例。其中的第一部分是库和程序包,是用VHDL编写的共享文件,定义结构体和实体中要用到的数据类型、元件、子程序等,放在名为IEEE的库中。第二部分是实体,相当于定义电路单元的管脚信息。第三部分是结构体,用来描述电路的内部结构和逻辑功能。两条短划线是注释标识符,其右侧内容是对程序的具体注释,并不执行。所有语句都是以“;”结束,另外程序中不区分字母的大小写。 6.1.3 VHDL的库和程序包 1.库 库是专门用于存放预先编译好的程序包的地方,对应一个文件目录,程序包的文件就放在此目录中,其功能相当于共享资源的仓库,所有已完成的设计资源只有存入某个“库”内才可以被其他实体共享。常用的库有IEEE库、STD库和WORK库。库语句格式如下: LIBRARY 库名 ; 2.程序包 程序包是用VHDL语言编写的一段程序,可以供其他设计单元调用和共享,相当于公用的“工具箱”,各种数据类型、子程序等一旦放入了程序包,就成为共享的“工具”,类似于C语言的头文件,使用它可以减少代码的输入量,使程序结构清晰。程序包分为包头和包体两部分。 程序包格式如下。 包头格式:PACKAGE 程序包名 IS [包头说明语句] END 程序包名; 包体格式: PACKAGE BODY 程序包名 IS [包体说明语句] END 程序包名; 调用程序包的通用模式为:USE 库名.程序包名.ALL; 常用预定义程序包有以下四个: (1)STD_LOGIC_1164程序包 (2)STD_LOGIC_ARITH程序包 (3)STD_LOGIC_SIGNED程序包 (4)STD_LOGIC_UNSIGNED程序包 6.1.4 VHDL的实体 VHDL描述的对象称为实体,是设计中最基本的模块。实体的格式如下: ENTITY 实体名 IS [GENERIC(类属说明)] [PORT(端口说明)] END 实体名; 1.类属说明 类属说明是实体说明的一个可选项(可选项用[„]表示),主要为设计实体指定参数,可以用来定义端口宽度、实体中元件的数目、器件延迟时间等。 类属说明语句的格式如下: GENERIC(常数名1:数据类型1:= 设定值1; „„; 常数名n:数据类型n:= 设定值n); 2.端口说明 端口说明也是实体说明的一个可选项,负责对实体中输入和输出端口进行描述。端口说明语句格式如下: PORT(端口信号名1:端口模式1 数据类型1; „„; 端口信号名n:端口模式n 数据类型n); 6.1.5 VHDL的结构体 结构体用来描述设计实体的内部结构或行为,是实体的一个重要组成部分,定义了实体的具体功能,规定了实体中的信号数据流程,确定了实体中内部元件的连接关系。结构体用三种方式对设计实体进行描述,分别是行为描述、寄存器传输描述和结构描述。其格式如下: ARCHITECTURE 结构体名 OF 实体名 IS [结构体说明部分;] BEGIN 功能描述语句; END 结构体名; 【例6-4】通过中间信号m实现输入端到输出端的数据传输。 ENTITY mybody IS --实体名为mybody PORT( in1 :IN BIT; --定义端口 output1 :OUT BIT ); END mybody; ARCHITECTURE myprog OF mybody IS --结构体名为myprog SIGNAL m:BIT; --定义中间信号m BEGIN m <= in1; --输入信号传送给中间信号 output1 <= m; --中间信号送给输出信号 END myprog; 6.2 VHDL的数据结构 VHDL定义了常量、变量和信号三种数据对象,并规定每个对象都要有唯一确定的数据类型。 6.2.1 标识符 标识符是书写程序时允许使用的一些符号(字符串),主要由26个英文字母、数字0~9及下划线“_”的组合构成,允许包含图形符号(如回车符、换行符等)。可以用来定义常量、变量、信号、端口、子程序或参数的名字。标识符的命名规则如下: l 第一个字符必须以字母开头;下划线不能连用;最后一个字符不能是下划线;对大小写字母不敏感(英文字母不区分大小写);长度不能超过32个字符。 6.2.2 数据对象 VHDL中凡是可以赋予一个值的对象都可称为数据对象。 1.常量 常量是在设计实体中保持某一特定值不变的量。常量的格式如下: CONSTANT 常量名:数据类型:= 表达式; 注意:数值和单位之间要留空格 常量一旦赋值之后,在程序中就不能再改变了。常量的使用范围取决于被定义的位置。常量所赋的值应该与定义的表达式数据类型一致,否则将会出现错误。 2.变量 变量属于局部量,主要用来暂存数据。变量只能在进程和子程序中定义和使用,可以在变量定义语句中赋初值,但变量初值不是必需的。格式如下: VARIABLE 变量名:数据类型 约束条件:= 表达式;3.信号 信号是描述硬件系统的基本数据对象,是设计实体中并行语句模块间的信息交流通道。通常可认为信号是电路中的一根连接线。信号有外部端口信号和内部信号之分:外部端口信号是设计单元电路的管脚或称为端口,在程序实体中定义,有IN、OUT、INOUT、BUFFER四种信号流动方向,其作用是在设计的单元电路之间实现互连。外部端口信号供给整个设计单元使用,属于全局量;信号描述格式如下: SIGNAL 信号名:数据类型 约束条件:= 初始值; 在程序中,信号赋值使用符号<=,变量赋值使用符号:=,信号与变量都能被连续地赋值,其主要区别如下: l 信号赋值有附加延时,变量赋值则没有。 l 信号可看成硬件的一根连线,变量在硬件中没有类似的对应关系。 l 对于进程语句,进程只对信号敏感,不对变量敏感。 l 信号除了具有当前值外还具有一定的历史信息(保存在预定义属性中),变量只有当前值。 l 在进程中,信号和变量的赋值是不同的,信号的赋值在进程结束时起作用,而变量赋值是立即起作用。 6.2.3 数据类型 对于常量、变量和信号这三种数据对象,在为每一种数据对象赋值时都要确定其数据类型。VHDL对数据类型有着很强的约束性,不同的数据类型不能直接运算,相同的类型如果位长不同也不能运算。根据数据产生来源可将数据类型分为预定义类型和用户自定义类型两大类,这两类都在VHDL的标准程序包中作了定义,设计时可随时调用。 1.预定义数据类型 该类型是最常用、最基本的一种数据类型,在标准程序包STANDARD和STD LOGIC_ 1164及其他程序包中作了定义,已自动包含在VHDL源文件中,不必通过USE语句进行显示调用。 具体类型如下: (1)整数类型(INTEGER) (2)自然数(NATURAL)和正整数(POSITIVE)类型 (3)实数(REAL)类型 (4)位(BIT)类型(5)位向量(BIT_VECTOR)类型(6)布尔量(BOOLEAN)类型(7)字符(CHARACTER)类型 (8)字符串(STRING)类型 (9)时间(TIME)类型 (10)错误等级(SEVERITY LEVEL)类型 2.用户自定义数据类型 用户定义的数据类型格式如下: TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型; 或写成下面的格式: