vhdl语言
vhdl if else语句

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语言

ARCHITECTURE activ OF mux41 IS
SIGNAL sel : INTEGER RANGE 0 TO 15; BEGIN
接下页
第8章 VHDL基本语句
PROCESS (sel ,s4,s3,s2,s1 ) BEGIN sel<= 0 ; -- 输入初始值 IF (s1 ='1') THEN sel <= sel+1 ; ELSIF (s2 ='1') THEN sel <= sel+2 ; ELSIF (s3 ='1') THEN sel <= sel+4 ; ELSIF (s4 ='1') THEN sel <= sel+8 ; ELSE NULL; -- 注意,这里使用了空操作语句 END IF ; z1<='0' ; z2<='0'; z3<='0'; z4<='0';--输入初始值 CASE sel WHEN 0 => z1<='1' ; -- 当sel=0时选中
第8章 VHDL基本语句
三、 LOOP语句、NEXT语句、EXIT语句、WAIT语句 1、 LOOP语句:就是循环语句,它可使所包含的一组顺序语句被循
环执行,其执行次数可由设定的循环参数决定,常用表达方式有两种。 (1)单个LOOP语句,其语法格式如下: [ LOOP标号:] LOOP 顺序语句 END LOOP [ LOOP标号 ]; 这种循环方式是一种最简单的语句形式,其循环方式需引入其它控 制语句(如EXIT语句)后才能确定;‚LOOP标号‛可任选。 用法示例如下: ... L2 : LOOP a := a+1; EXIT L2 WHEN a >10 ; -- 当a大于10时跳出循环 END LOOP L2; ...
vhdl条件赋值语句

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。
第2章 VHDL语言基础

End 实体名;
端口名
端口模式
数据类型
(2)ENTITY
端口模式(MODE)有以下几种类型: IN ;OUT;INOUT ;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)
IN
OUT
BUFFER
INOUT
二输入与门电路设计范例
Library std; Use std.standard.all;
(4)CONFIGURATION定义区
定义格式: Configuration 配置名 of 实体名 is for 选用的结构体名 end for; end configuration 配置名 ;
二输入与门电路设计范例
a c
b电Leabharlann 真值表abc
0
0
0
1
0
0
0
1
0
1
1
1
二输入与门电路设计范例
Architecture Na of and2 is
‘1’; 符号<=为信号直接赋值符。
End Na;
--结构体Na
Architecture Nb of and2 is
Begin
c <= a and b;
--and 为逻辑与操作
End Nb; --结构体Nb
Library ieee; Use ieee.std_logic_1164.all;
Entity half_adder is Port( x,y : in std_logic;sum,carry : out hlf_adder); End half_adder;
(4)CONFIGURATION定义区
一个完整VHDL电路设计必须有一个实体 和对应的结构体,即实体和结构体对构成一个 完整的VHDL设计。
vhdl if else语句

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语句,需要熟悉它的语法和注意事项。
VHDL语言要素

标准数据类型
10、自然数(NATURAL) 正整数(POSITIVE) 自然数是整数的一个子类型,包括0和正整数;
正整数也是整数的一个子类型。 只能是正整数数据除定义类型外,有时还需
要定义约束范围。 INTEGER RANGE 100 DOWNTO 0 BIT_ VECTOR (3 DOWNTO 0) REAL RANGE 2.0 TO 30.0
信号与变量区别
信号赋值可以有延迟时间,变量赋值无时间延迟 信号除当前值外还有许多相关值,如历史信息等,变量
只有当前值 进程对信号敏感,对变量不敏感 信号可以是多个进程的全局信号,但变量只在定义它之
后的顺序域可见 信号可以看作硬件的一根连线,但变量无此对应关系 赋值的形式不同;声明的位置不同
TYPE current IS REAL RANGE -1E4 TO 1E4
VARIABLE A:CURRENT; A:=1E3;
A:=1E10;
用户自定义的数据类型
4、数组(ARRAY) 格式:TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型名; 例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC; TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC; 数组常在总线、ROM和RAM中使用。
第三讲要点回顾
有效标识符 变量信号的区别 三种数据类型 三类属性 四种操作符
标识符
标识符(Identifiers)由英文字母“a”到“z”、 “A”到“Z”、数字“0”到“9”以及下划线 “_”组成 使用时注意: 1、VHDL不区分大小写 2、标识符一定要以字母开头 3、下划线不能放在结尾 4、下划线不能连用 5、保留字(关键字)不能做标识符
VHDL语言详解

q : OUT STD_LOGIC); END mux4;
case muxval is when 0 => q <= i0; when 1 => q <= i1; when 2 => q <= i2; when 3 => q <= i3;
muxval := muxval + 1;
end if;
if (b = '1') then
muxval := muxval + 2;
end if;
VHDL语言的数据对象(四)
文件
VHDL-93语法把文件也当作对象; 不能被赋值; 通过规定的过程和函数对文件对象进行读出
和写作的操作; 说明的格式
File 文件名 : 文件类型 is [方向] 路径表达式; Type 文件类型名 is file of 数据类型; 例: type filetype is file of std_logic_vector;
file myfile : filetype is in “/myproject/vector.in”
基本概念(6/7)
结构体(architecture)说明的相关概念
结构体是由一个或多个并行语句构成的,他们的书 写顺序并不代表他们的执行顺序。
Entity test1 Is Port ( a, b : in bit;
输出只和输入有关
c, d : out bit);
end test1;
architecture test1_body of test1 is
VHDL硬件描述语言

Posedge 和 negedge 关键字
对于时序电路,事件通常是由时钟边沿触发的,为表 达边沿这个概念,Verilog提供了posedge和negedge关 键字来描述。比如: 【例】同步置数、同步清零的计数器
module count(out,data,load,reset,clk); output[7:0] out; input[7:0] data; input load,clk,reset; reg[7:0] out; always @(posedge clk) //clk上升沿触发 begin if(!reset) out=8'h00; //同步清0,低电平有效 else if(load) out=data; //同步预置 else out=out+1; //计数 end endmodule
b)
有符号数和无符号数在设计中,先按无符号数进行。
4.2.2关系运算符
1. 关系运算符:>、<、>=、<=、==、!= 2. 在关系运算符的使用中,还需要注意以下3个问题
a) 关系操作符的结果为真(1)或假(0)。如果操作数中有一位为x或z,那么 结果x(未知)。 例:23>45 结果为0 52<8‘hxFF 结果为x 如果操作数长度不同,则长度较短的操作数在最重要的位方向(左方)添 0补齐。 例:‘b1000>=‘b01110 等价于 ‘b01000>=‘b01110 在逻辑相等与不等的比较中,只要一个操作数含有x或z,比较结果就为 x。 其结果不定,其值 例:Data=‘b11x0; 为x Addr=‘b11x0; Data==Addr;
举例:initial语句用于为电路仿真生成激励波形
input变量的变化情况
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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 基本数据类型; 或写成下面的格式: