VHDL基本结构与语法

合集下载

VHDL课件

VHDL课件

2) 半加器的逻辑描述 LIBRARY IEEE; -- IEEE库的使用说明 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS --实体h_adder的说明 PORT(a,b:IN STD_LOGIC; co,so:OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE art2 OF h_adder IS -- 实体h_adder的结构体art2的说明 BEGIN so<=(a OR b) AND (a NAND b); co<=NOT (a NAND b); END ARCHITECTURE art2;
(5) 在结构体art3中,COMPONENT→END COMPONENT 语句结构对所要调用的或门和半加器两元件 作了声明(COMPONENT DECLARATION),并由SIGNAL 语句定义了三个信号d、e和f,作为中间信号转存点,以利于 几个器件间的信号连接。 “PORT MAP( )”语句称为元件例化语句(COMPONENT INSTANTIATION)。所谓例化,在电路板上,相当于往上 装配元器件;在逻辑原理图上,相当于从元件库中取了一个 元件符号放在电路原理图上,并对此符号的各引脚进行连线。 例化也可理解为元件映射或元件连接,MAP是映射的意思。 例如,语句“U2:h_adder PORT MAP(a=>e,b=>cin, co=>f,so=>sum)”表示将实体h_adder描述的元件U2的 引脚信号a、b、co和so分别连向外部信号e、cin、f和sum。 符号“=>”表示信号连接。
3.1.3 VHDL程序设计约定 为了便于程序的阅读和调试,对VHDL程序设计特作如下约 定: (1) 语句结构描述中方括号“[ ]”内的内容为可选内容。 (2) 对于VHDL的编译器和综合器来说,程序文字的大小 写是不加区分的。 (3) 程序中的注释使用双横线“--”。在VHDL程序的任何 一行中,双横线“--”后的文字都不参加编译和综合。 (4) 为了便于程序的阅读与调试,书写和输入程序时,使 用层次缩进格式,同一层次的对齐,低层次的较高层次的缩 进两个字符。 (5) 考虑到MAX+plusII要求源程序文件的名字与实体名 必须一致,因此为了使同一个VHDL源程序文件能适应各个 EDA开发软件上的使用要求,建议各个源程序文件的命名均 与其实体名一致。

vhdl语言 function用法

vhdl语言 function用法

vhdl语言function用法使用VHDL语言中的function功能,可以在设计数字电路时实现模块化和功能复用。

在本文中,我们将一步一步地讨论VHDL中function的用法和功能。

第一部分:VHDL语言简介在我们开始讨论VHDL中function的用法之前,让我们先对VHDL语言进行简要介绍。

VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,常用于数字电路设计和仿真等领域。

VHDL对于描述电路的结构和行为非常强大,能够提供高度的抽象,帮助设计人员快速而准确地描述复杂的数字电路。

第二部分:VHDL中的函数介绍在VHDL中,函数是一种定义在architecture块中的代码段,用于执行一些特定的计算或操作。

函数接受输入参数,并返回计算结果。

函数通常用于执行一些重复或复杂的计算任务,并帮助简化设计。

此外,函数还可以提高代码的可读性,因为可以将复杂的计算逻辑封装成一个简单的函数调用。

第三部分:VHDL函数的语法在VHDL中,函数的语法如下所示:vhdlfunction function_name(parameter_1 : data_type; parameter_2 : data_type) return return_type isvariable local_variable : data_type;beginfunction bodycalculate and assign value to local_variablereturn local_variable;end function_name;在上面的代码中,我们可以看到函数由三个部分组成。

首先是函数的声明,包括函数的名称以及输入参数和返回类型。

其次是变量声明部分,用于定义函数内部使用的局部变量。

在函数的body部分,我们可以执行特定的计算操作,并将结果赋值给局部变量。

然后,使用return语句返回结果。

VHDL入门易懂教程

VHDL入门易懂教程
5
VHDL语言特点 四、VHDL语言特点
1、VHDL具有强大的语言结构,系统硬件描述能 力强、设计效率高;具有较高的抽象描述能力。 如:一个可置数的16位计数器的电原理图:
6
用VHDL描述的可置数16位计数器:
7
2、VHDL语言可读性强,易于修改和发现错误。 3、VHDL具有丰富的仿真语句和库函数,可对 VHDL源代码进行早期功能仿真,有利于大 系统的设计与验证。 4、VHDL设计与硬件电路关系不大。 5、VHDL设计不依赖于器件,与工艺无关 。 6、移植性好。 7、VHDL体系符合TOP-DOWN和CE(并行工程)设计 思想。 8、VHDL设计效率高,产品上市时间快,成本低。 9、易于ASIC实现。
3
三、VHDL的作用 VHDL的作用
1、VHDL打破软、硬件的界限 传统的数字系统设计分为: 硬件设计(硬件设计人员) 软件设计(软件设计人员) VHDL是电子系统设计者和 EDA工具之 间的界面。 EDA工具及 HDL的流行,使电子系统向集 成化、大规模和高速度等方向发展。 美国硅谷约有80%的 ASIC和 FPGA/CPLD 已采用 HDL进行设计。
配置(Configuration)
16
实体(说明) 一、实体(说明)
实体(说明): 定义系统的输入输出端口 语法:
ENTITY <entity_name> IS Generic Declarations Port Declarations END <entity_name>; (1076-1987 version) END ENTITY <entity_name> ; ( 1076-1993 version)
80年代初由美国国防部在实施超高速集成电 路(VHSIC)项目时开发的。 1987年由 IEEE 协会批准为 IEEE 工业标准, 称为 IEEE1076-1987。 各EDA公司相继推出支持VHDL的设计环境。 1993年被更新为 93 标准,即IEEE1076-1993。 进一步提高抽象描述层次,扩展系统描述能力。

vhdl if else语句

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

VHDL

1.3 VHDL的作用
HDL打破软、硬件的界限 传统的数字系统设计分为:
硬件设计(硬件设计人员)
软件设计(软件设计人员) 是硬件设计者和 EDA工具之间的界面
EDA工具及 HDL的流行,使电子系 统向集成化、大规模和高速度等方向发 展。 美国硅谷约有80%的 ASIC和 FPGA/CPLD已采用 HDL进行设计。
一般情况下 USE定义区的格式写成
LIBRARY IEEE; USE IEE.STD_LOGIC_1164.ALL; USE IEE.STD_LOGIC_ARITH.ALL; USE IEE.STD_LOGIC_UNSIGNED.ALL;
2.2 实体声明
实体声明:定义系统的输入输出端口
语法:
ENTITY <entity_name> IS Generic Declarations(类属表); Port Declarations(端口表); END <entity_name>; (1076-1987 version) END ENTITY <entity_name> ; ( 1076-1993 version)
子类型声明;常量声明。
END <包名> ; (1076-1987) END PACKAGE BODY <包名> ; (1076-1993)
例:程序包声明
2、 库
含义:存放预先完成的程序包和数据集合体 的仓库,包含了包或包的汇集 格式:LIBRARY 库名; 种类: STD 库(默认库) IEEE库 WORK库(默认库) 面向ASIC的库 用户定义库
硬件描述语言VHDL
1 概述
1.1 什么是VHDL(HDL)?

VHDL语言复习

VHDL语言复习
6
1. VHDL语言程序的基本结构
1.2 构造体(Architecture)
❖ 功能:指明该设计单元的行为、元件及内部的连 接关系,定义设计单元的具体功能。
❖ 描述方式:行为描述(基本设计单元的数据模型 描述);寄存器描述(数据流描述);结构描述 (逻辑元件连接描述)。
7
1. VHDL语言程序的基本结构
由UNSIGNED、SIGNED转换为 INTEGER
由STD_LOGIC_VECTORR转换为 INTEGER
32
2. VHDL语言要素
2.5 VHDL属性(Attribute) (1)数值类属性
’left(左边界), ’right(右边界), ’low(下边 界), ’high(上边界), ’length(数组长度)
——为变量赋值时,变量值的改变立即发生。
25
2. VHDL语言要素
2.4 数据类型
(1)最常见的标准定义数据类型
VHDL最常用的数据类型包括以下几种: ——INTEGER:可用作循环的指针或常数,通常不用于 I/O信号; Signal typei: INTEGER range 0 to 15; ——BIT:可取值‘0’或‘1’;
sdown :IN std_logic_vector(8 DOWNTO 0); sup :IN std_logic_vector(0 TO 8);
这两个信号的各属性值如下: sdown’left=8;sdown’ right =0;sdown’low =0; sdown’high =8;sdown’length =9; sup’left=0;sup’ right =8;sup’low =0;sup’high =8; sup’length =9;

vhdl if else语句

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

VHDL语言

(5)布尔数据类型(BOOLEAN) )布尔数据类型( ) 属于枚举数据类型 取值为‘TRUE’和 FALSE’。 枚举数据类型, 属于枚举数据类型,取值为‘TRUE 和‘FALSE 。 常用来表示关系运算和关系运算结果。 常用来表示关系运算和关系运算结果。 (6)字符数据类型(CHARACTER) )字符数据类型( ) ASCII码的128个字符 书写时用单引号, 码的128个字符, ASCII码的128个字符,书写时用单引号,区分 大小写, 大小写,如‘a’、‘A’等。 、 等 (7)字符串数据类型(STRING) )字符串数据类型( ) 双引号括起来的一串字符 一串字符, abgh”。 双引号括起来的一串字符,如“abgh 。
SIGNAL 信号名 数据类型; 信号名:数据类型; 数据类型
[例1.4.6] 信号定义举例 例
SIGNAL A:INTEGER; ;
2.VHDL数据类型 2.VHDL数据类型 (1)整数数据类型(INTEGER) )整数数据类型( ) 取值范围: 2147483547~ 取值范围:-2147483547~ 2147483546 (2)实数数据类型(REAL) )实数数据类型( ) 取值范围: 1.0E38~ 取值范围:-1.0E38~ 1.0E38 (3)位数据类型(BIT) )位数据类型( ) 属于枚举数据类型 取值为‘ 和 枚举数据类型, 属于枚举数据类型,取值为‘1’和‘0’。 。 (4)位矢量数据类型(BIT_VECTOR) )位矢量数据类型( ) 用双引号括起来的一组位数据 一组位数据, 用双引号括起来的一组位数据,如“10011”, , 通常用来表示数据总线 表示数据总线。 通常用来表示数据总线。
(8)STD_LOGIC数据类型 ) 数据类型 属于枚举数据类型 取值有以下九种: 枚举数据类型, 属于枚举数据类型,取值有以下九种: ‘U’ 初始值 U ‘X’ 不定 ‘1’ ‘0 ’ 0 1 1 ‘Z’ 高阻 Z ‘W’ 弱信号不定 弱信号0 ‘H’ 弱信号1 ‘L’ 弱信号0 H 弱信号1 ‘-’ 不可能情况 (9)STD_LOGIC_VECTOR数据类型 ) 数据类型 用双引号括起来的一组 数据, 用双引号括起来的一组STD_LOGIC数据, 一组 数据 表示数据总线。 如“101011”,通常用来表示数据总线。 ,通常用来表示数据总线 注意:使用STD_LOGIC、 STD_LOGIC_VECTOR 注意:使用 、 数据类型时必须在库、程序包说明区进行说明。 数据类型时必须在库、程序包说明区进行说明。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章 VHDL 基本结构与语法本章通过几个例题介绍VHDL 语言的基本结构和语法规则5.1 VHDL 基本结构一个相对完整的VHDL 设计由以下四部分组成:(1) 库LIBRARY 、程序包PACKAGE :库用于存储预先完成的程序包和数据集合体;程序包用于声明在设计中将要用到的常数、数据类型、元件及子程序等。

(2) 实体ENTITY :定义设计的输入输出端口。

(3) 结构体ARCHITECTURE :定义实体的实现,即电路的具体描述。

可有多个结构体,但只有一个起作用。

(4) 配置CONFIGURA TION :为实体选定某个特定的结构体。

以上四个部分不是每个VHDL 程序必须的,但每个VHDL 程序至少含有1个实体和1个结构体。

1个实体可有多个结构体,通过配置选择1个结构体对实体起作用,其他结构体不起作用。

当只有1个结构体时不要实体。

【例5-1】2选1多路数据选择器,其功能见图5-1。

功能描述为当S=0时A 送Y , S=1时B 送Y 。

其对应的VHDL 描述为:ENTITY mux21a IS --给出实体名mux21a 和管脚定义 PORT (a,b : IN BIT ;s : INBIT ; y : OUT BIT );END mux21a ;ARCHITECTURE one OF mux21a IS --结构体,描述电路器件的内部逻辑 BEGIN功能或电路结构。

y <=a WHEN s=’0’ ELSE b;END one ;综合后结构体的门电路见图5-3。

5.1.1 实体ENTITY :定义本设计的输入输出端口/信号。

图5-1 例5-1功能示意图图5-3 例5-1综合后的门电路A S约定:[]表示为可选项;--开始的语句为注释,不参与编译和综合;黑体单词为保留字。

1、实体框架:ENTITY实体名IS--此处无分号[GENERIC(常数名:数据类型[:设定值]);]PORT - -端口定义(端口1:端口模式端口类型;…端口n:端口模式端口类型- -最后一个无分号);END[ENTITY] 实体名;注:END中带ENTITY、ARCHITECTURE为IEEESTDl076_1993版的语法要求,不带为IEEESTD1076 1987的语法要求。

通用。

2、实体定义:ENTITY实体名IS--此处无分号END[ENTITY] 实体名;要求实体名与文件名相同,且文件名后缀为.VHD3、端口定义:1)格式:端口名:端口模式端口类型;2)端口模式IN:输入信号:信号进入实体(不能给信号赋值)OUT:输出信号:信号离开实体(不能读入/反馈输出端口的数据)INOUT:双向信号,信号既可以离开实体,也可以进入实体BUFFER:缓冲信号:信号输出到实体外部,但也可在内部反馈。

BUFFER是INOUT 的子集,但不是由外部驱动,常用于计数器IN OUT BUFFER INOUT图5-4 端口模式示意图3)端口类型:定义端口的数据类型VHDL作为一种强类型语言,任何一种数据对象(信号、变量、常数)必须严格限定其类型和取值范围,相同类型才能相互传递。

这对于大规模电路描述的排错是十分有益的。

常用的有整数型integer、布尔型BOOLEAN、位数据类型BIT、标准逻辑位数据类型std_logic、std_logic_vector等。

参5.2节。

5.1.2结构体ARCHITECTURE用程序描述实体的功能。

1、一个实体可以有多个结构体,每个结构体代表该实体的不同实现方案。

2、结构体可采用行为描述、结构描述或数据流描述,是VHDL最主要的部分。

3、格式:ARCHITECTURE 结构体名OF 实体名IS[说明语句]BEGIN功能描述END 结构体名;注:说明语句声明将用到的信号、数据类型、常数、元件、子程序。

4、框架顺序语句与并行语句:并行语句:执行顺序与语句排列的先后顺序无关,是硬件描述语言与一般软件程序最大的区别所在,所有并行语句在结构体中的执行是同时执行的,即它的执行顺序与语句书写的顺序无关。

这种并行性是硬件本身的并行性决定的,即一旦电路接通电源,它的各部分就会按照事先设计好的方案同时工作。

顺序语句:与计算机程序类似,与指令的先后顺序有关。

5.1.3 例题5-1相关语句1、信号赋值语句/传输语句格式:信号<=表达式注意:为“<=”不是等号“=”.在VHDL仿真中赋值操作y<=a并非立即发生的,而是要经历一个模拟器的最小分辨时间δ后,才将a的值赋予y。

在此不妨将δ看成是实际电路存在的固有延时量。

VHDL 要求赋值符“<=”两边的信号的数据类型必须一致。

2、条件判断语句格式:位信号=表达式注意:非“= =”。

常用的关系操作符(Relational Operator)有“= ”等于、“/=”不等于、“< ”小于、“<= ”小于或等于、“> ”大于、“>= ”大于或等于。

适用的数据类型:= 、/=:任何数据类型;其余的:称为排序操作符,可用于枚举数据类型、整数数据类型以及由枚举型或整数型数据类型元素构成的一维数组。

不同长度的数组也可进行排序。

排序判断规则:1)整数值:从正无限到负无限,2)枚举型:排序方式与它们的定义方式一致,如:‘1’>’0’; TRUE>FALSE;a>b(若a=1,b=0)。

3)两个数组的排序判断是通过从左至右逐一对元素进行比较来决定的,注意定义时的顺序。

在比较过程中,若发现有一对元素不等,便确定了这对数组的排序情况,该位为大即为大数。

例位矢“1011”> "101011”,“1”> “011"。

4)改进:对以上判断错误可用STD_LOGIC_ARITH的UNSIGNED解决,如:UNSIG N’ “l”<UNSIGNED’ “011”,结果将判为TRUE。

5)就综合而言,=、/=在实现硬件结构时,比排序操作符构成的电路芯片资源利用率要高。

3、条件信号赋值语句WHEN-ELSE格式1:变量<=值1 WHEN 条件1 ELSE 值2;当满足条件1,变量=值1,否则变量=值2。

格式2:变量=值1 WHEN 条件1 ELSE值2 WHEN条件2 ELSE…值n-1 WHEN条件n-1 ELSE值n;在执行条件信号语句时,每一条件按书写先后关系逐项测定,一旦发现赋值条件=true 值赋给变量。

【例5-2】四选一数据选择器。

实体略。

ARCHITECTURE archmux OF mux4 IS BEGINy<=a0 WHEN s =“00”ELSEa1 WHEN s =“01”ELSE图5-5 例5-4功能a2 WHEN s =“10”ELSEa3;END archmux;由于条件测试的顺序性,条件信号赋值语句中的第一子句具有最高赋值优先级,第二句其次,如此类推。

例如在以下程序中,如果当P1和P2同时为'1'时,z获得的赋值是a 而不可能是b。

z<=a WHEN Pl='1' ELSEb WHEN P2='1' ELSE c;WHEN-ELSE 语句是一种并行赋值语句。

5.2 VHDL基本描述语句顺序语句和并行语句是VHDL程序设计中两大基本描述语句系列。

5.2.1并行语句并行语句是硬件描述语言与一般软件程序最大的区别所在,所有并行语句在结构体中的执行都是同时进行的,即它们的执行顺序与语句书写的顺序无关。

这种并行性是由硬件本身的并行性决定的,即一旦电路接通电源,它的各部分就会按照事先设计好的方案同时工作。

VHDL有几种主要并行语句:进程语句、块语句、并行信号赋值语句、元件例化语句、生成语句、并行过程调用语句。

1. 进程语句PROCESS进程语句是个复合语句,由一段程序构成。

各个进程是并发执行的,但进程内部的所有语句却都是顺序执行的。

一个结构体可以包括多个进程语句,多进程间的通信依靠信号来传递。

在VHDL中,所有合法的顺序描述的语句都必须放在进程语句中。

进程语句的语法格式:[标号:]PROCESS(敏感信号表)[声明区];------此处声明局部变量、数据类型及其他用于进程中的局部声明。

BEGIN-----进程开始[顺序语句];END PROCESS [标号];------进程结束。

进程敏感表由进程中的一些信号组成,各信号以逗号隔开。

进程平时不执行,当敏感表中的任一信号发生变化(从原来的‘1’跳变到‘0’,或者从原来的‘0’跳变到‘1’)时才启动执行进程。

而在执行一遍进程的顺序语句后,便进入等待状态,直到下一次敏感信号表中某一信号的跳变才再次进入“启动-运行”状态。

【例5-3】例5-1的IF THEN-ELSE-END IF实现。

实体同例5-1(略)。

由于IF THEN-ELSE-END IF是顺序语句,必须放在进程中,结构体改为ARCHITECTURE one OF mux2la ISBEGINPROCESS(a,b,s)BEGINIF S='O' THEN y<=a;ELSE y<=b;END IF;END PROCESS;END one;要求将能够改变进程输出结果的输入信号都放在敏感信号表中。

另外,WAIT语句在进程中作用同进程敏感表,有敏感表就不要WAIT语句,有WAIT就不要敏感表。

没敏感表的进程可有多个WAIT。

参6.2节WAIT语句*2. 块语句(BLOCK)块语句是将结构体中的并行语句组合在一起,其主要目的是改善并行语句及其结构的可读性,一般用于较复杂的VHDL程序中。

但从综合的角度看,BLOCK语句没有实用价值。

格式:块名:BLOCK[(表达式)][块声明项;]BEGIN并行语句;END BLOCK [块名];注意:块名必须有。

【例5-4】8位数字比较器ENTITY COMP ISPORT(a,b: IN INTEGER RANGE 0 T0 255;aequalb, agreatb, alessb : OUT STD_LOGIC);END COMP;ARCHITECTURE behave OF COMP ISBEGINp1 : BLOCKBEGINaequalb<=‘1’WHEN a=b ELSE‘0’;agreatb<=‘1’WHEN a>b ELSE‘0’;alessb<=‘1’WHEN a<b ELSE‘0’;END BLOCK;END behave;BLOCK是可以嵌套的,内层BLOCK块可以使用外层BLOCK块所定义的信号,而反之则不行。

3. 并行信号赋值语句并行信号赋值语句有3种形式:(1)简单信号赋值语句:见5.1节。

相关文档
最新文档