VHDL语言要素
VHDL语言的基本要素(大全)

VHDL语言的基本要素一、数据对象VHDL语言的主要数据对象有信号,变量,常量。
信号—信号是电路中的物理量,对应于电路的连线、节点;信号说明全局量,用于描述中的构造体(Architecture), 实体(Intity),程序包(package)。
变量—变量是程序运算中的中间量,并不对应电路中的物理量。
变量说明局部量,用于进程语句(process), 函数(Function), 过程(procedure)。
常量—常数也不对应电路中的物理量,当常量说明全局量,在构造体(Architecture), 实体(Intity),程序包(package),进程语句(process), 函数(Function), 过程(procedure)中均可使用。
数据对象的定义格式:signal 信号名:数据类型,约束条件,表达式Variable 变量名:数据类型,约束条件:=表达式Constant 常量名:数据类型,约束条件:=表达式例如:Variable count:INTEGER RANGE 0 TO 255:=10Constant Daly:Time:=100ns信号代入和变量赋值的区别:两者形式不同,操作过程也不相同。
变量赋值符“:=”,信号的代入符“<=”。
在变量的赋值语句中,该语句一当执行,其值立即将赋予变量;而信号的代入,其语句执行后不会立即使信号发生代入,在下条语句执行时,仍使用原来的信号值,如进程语句中的敏感表的信号代入就是如此。
二、数据类型VHDL语言中的数据类型,一般而言可分为:标量类型和组合类型。
在实际使用中,也可分成予定义类型和用户定义类型。
VHDL语言是强类型的语言,主要可按如下分类和变换处理。
①标准数据类型⑴整数⑵实数(浮点数)-1.0E+38~+1.0E38 ⑶位bit(0,1)⑷位矢量⑸布尔量,“假”,“真”⑹字符(ASCⅡ)字符⑺时间⑻错误等级⑼自然数(大于等于0的整数)⑽字符串(字符矢量)②用户定义的数据类型TYPE 数据类型名{数据类型名} 数据类型定义⑴枚举类型⑵整数类型⑶实数类型⑷数组类型⑸存取类型⑹文件类型⑺记录类型⑻时间类型③用户定义子类型SUBTUPE 子类型名IS 数据类型名[范围]例:SUBTYPE digit is INTEGER RANGE 0 TO 9④数据类型转换数据类型的变换函数通常由“STD_LOGIC_1164”,“STD_LOGIC_ARITH”,“STD_LOGIC_UNSIGNED”的程序包提供例如,在STD_LOGIC_1164程序包中,TO_STD LOGIC VECTOR(A) 由BIT_VECTOR转换为STD_LOGIC_VECTORTO_BITVECTOR(A) 由STO_LOGIC_VECTOR转为BIT_VECTORTO_STDLOGIC(A) 由BIT转换为STD_LOGICTO_BIT(A) 由STD_LOGIC转换成BIT signal a: BIT_VECTOR(11 DOWNTO 0)signal b: STD_LOGIC_VECTOR(11 DOWNTO 0)a<=X”A8” 十六进制值可赋予位矢量b<=X”A8” 语法错,十六进制不能赋予.STD 矢量b<=TO_STDLOGICVECTOR(X“AF7”)b<=TO_STDLOGICVECTOR(O“5177”)八进制变换b<=TO_STDLOGICVECTCR(B“1010_1111_0111”)下表中也给出一些典型的类型变换函数三、运算符运算符的优先级如下表所示:运算符的优先级例如,并置运算符的使用:tmp_b<=b AND (en&en&en&en) y <= a & tmp_b第一个语句表示b 的4位位矢量由en 进行选择 得到一个4位位矢量输出第二个语句表示4位位矢量a 和4位位矢量b 再 次连接(并置)构成8位的位矢量y 输出 右图所示为并置运算符操作的电路示意。
第4章VHDL语言基础

结构体组成
结 构 体 说 明 结
数据类型说明 信号说明 例化元件说明 子程序说明
构 体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句
结构体描述风格
行为描述
描述该设计单元的功能,主要使用函数、过程和进程语
句,以算法形式描述数据的变换和传送 例4-4
Port (a,b: in std_logic_vector (3 downto 0);
Ci: in std_logic; Sum: out std_logic_vector (3 downto 0); Co: out std_logic); End add4;
4.1.3 结构体部分
结构体(ARCHITECTURE)
4.1.1 参数部分
库说明 存放已经编译的实体、结构体、程序包和配臵,用于 设计共享,是编程资源。 library <库名>; 程序包引用
使用USE子句指明要使用库中某一个设计单元。
use <库名>. <程序包名>.all; 【例4-2】 LIBRARY ieee; USE ieee.std_logic_1164.ALL;
结构体主要用来描述实体的内部结构,即 描述一个实体的功能。 描述方式 行为描述方式、数据流描述方式、结构描 述方式、混合描述方式
4.1.3 结构体部分
结构体格式
ARCHITECTURE 结构体名 OF 实体名 IS [结构体说明部分]; BEGIN 结构体描述部分; END 结构体名;
4.1.3 结构体部分
4.1 基本结构
模块结构
参数部分:库(LIBRARY)、程序包(USE); 实体(ENTITY):[类属]、端口(PORT);
第1章VHDL语言基础

位矢量(BIT_VECTOR)。若端口定义为BIT,则其信号值 是一个1位的二进制数,取值只能是0或1;若端口定义为 BIT_VECTOR,则其信号值是一组二进制数。
➢ 在电路中,如果实体代表一个器件符号,则结构体描述了 这个符号的内部行为。当把这个符号例化成一个实际的器 件安装到电路上时,则需用配置语句为这个例化的器件指 定一个结构体(即指定一种实现方案),或由编译器自动选一 个结构体。
1. 结构体的一般语句格式 ARCHITECTURE 结构体名 OF 实体名 IS [说明语句;] BEGIN [功能描述语句;] END [ARCHITECTURE] [结构体名];
1.1 VHDL程序基本结构
一、VHDL程序设计约定 ➢ 语句结构描述中方括号“[ ]”内的内容为可选内容。 ➢ 对于VHDL的编译器和综合器来说,程序文字的大小写是不
加区分的。 ➢ 程序中的注释使用双横线“- -”。 ➢ 源程序命名与实体同名(MAX+plus Ⅱ要求)。
二、VHDL程序设计引例( 74LS00的设计 )
③ 信号赋值语句将设计实体内的处理结果向定义的信号或界面 端口进行赋值。
④ 子程序调用语句用于调用一个已设计好的子程序。
⑤ 元件例化语句对其他的设计实体作元件调用说明,并将此元 件的端口与其他的元件、信号或高层次实体的界面端口进行 连接。
A
A NAND2
Y
Y
B
B
(a)
A1
A NAND2
U1 Y
Y1
B1
B
A2
A NAND2
3、VHDL语言要素

entity(实体)
architecture (结构体)
process(进程)
subprograms(子程序)
block(块)
二、变量(variable)
1、作用:存储临时数据。 2、声明格式: variable 变量名:数据类型; 3、赋值语句:变量名:=表达式; 4、注意: ★定义变量的位置:进程、子程序。 使用变量的位置:进程、子程序。 ★变量不能将值带出当前结构。 变量的赋值是立即发生的。
九、unsigned
定义前需打开ieee库和std_logic_arith程序包 定义时必须注明宽度(与矢量类似) 不能用integer的写法,应使用数位字符串 不能按位操作,必要时需进行类型转换
十、signed
注意事项同上
十一、类型转换函数
函数名
STD_LOGIC_1164程序包:
2、关系操作符
Байду номын сангаас
关系运算的结果是布尔类型:true或false。 不同长度的数组也可进行关系运算,规则是从左至 右逐一比较(与定义顺序to或downto无关),若发 现有一位不同即可确定结果。如:“101” <“110”。
举例:
entity relation_ops is port ( a,b : in bit_vector (0 to 3) ; c,d : in integer; m,n : out boolean) ; end relational_ops ; architecture example of relation_ops is begin
a<=b and c; --(1) d<=e or f or g ; --(2) h<=i nand j nand k ; --(3) l<=(m xor n) and (o xor p); --(4) h<=i and j and k ; --(5) h<=i and j or k ; --(6) a<=b and e ; --(7) h<=i or l ; --(8)
第四章 VHDL的语言要素

第四章VHDL的语言要素4.1 VHDL的数据对象与其他高级语言一样,VHDL中把用来承载数据的容器叫做VHDL的数据对象,VHDL的数据对象主要有信号、常量和变量三类。
1 常量在VHDL中,常量是一种不变的量,它只能在对它定义时进行赋值,并在整个程序中保持该值不变。
常量的功能一方面可以在电路中代表电源、地线等,另一方面可提高程序的可读性,也便于修改程序。
常量定义的格式为:CONSTANT 常量名:数据类型:=表达式;[例3.4] 常量定义举例CONSTANT V: INTEGER:=8;2 变量变量是临时数据的容器,它没有物理意义,并且只能在进程和子程序中定义,也只能在进程和子程序中使用。
变量一旦赋值立即生效。
变量定义的描述格式为:VARIABLE 变量名:数据类型[:=表达式];[例3.5]变量定义举例VARIABLE y: INTEGER;3 信号信号是VHDL的一种重要数据对象,它定义了电路中的连线和元件的端口。
其中端口和内部信号定义的差别是在端口定义中多了一个端口模式的定义。
信号是一个全局量,可以用来进行各模块之间的通信。
信号定义的格式为:SIGNAL 信号名:数据类型;[例3.6]信号定义举例SIGNAL A: STD_LOGIC;4.2 VHDL的数据类型VHDL是一种强类型的语言,每一个数据对象都必须具有确定的数据类型定义,并且只有在相同数据类型的数据对象之间,才能进行数据交换。
VHDL预定义了大量的数据类型,下面介绍几种最常用的数据类型。
1 整数数据类型(INTEGER)整数类型的数有正整数负整数和零,在VHDL中其取值范围是:-2147483547---2147483646 。
2 实数数据类型(REAL)VHDL的实数与数学中的实数或浮点数相似,只是范围被限定为:-1.0E38---1.0E38,并且在书写时一定要有小数。
3 位数据类型(BIT)在数字系统中,信号经常用位数据类型表示,位数据类型属于枚举类型,其值是用带单引号的‘1’和‘0’表示。
第五章 VHDL语言的语言要素

3.信号(SIGNAL)
信号赋值语句:
目标信号名<=表达式; 例如: x<=9;
y<=x;
z<=x AFTER 5ns;
25
VHDL语言的语言要素
3.信号(SIGNAL)
信号与变量的区别:
① 使用场合不同 变量在进程、函数和过程中说明; 信号在结构体中说明。 ② 赋值符号不同 变量用“:=”号赋值, 其值被立即使用(无时间延时); 信号用“<=”赋值,其值可以附加延时。
VHDL语言的语言要素
5 VHDL语言的语言要素
语言要素是组成编程语句的基本单元,主要有:
■ 数据对象(Object)
■ 数据类型(Type)
■ 操作数(Operands)
■ 运算操作符(Operator)
1
VHDL语言的语言要素
5.1 VHDL语言的文字规则
任何一种程序设计语言都有自己的一套书写符 1.数字型文字 号和语法规则,这些符号和语法规则构成了程序设 数字型文字有多种表达方式,包括: 计语言的文字规则。 ● 整数型文字 ● 实数型文字 ● 数制基数型文字 ● 物理量型文字
2
VHDL语言的语言要素
1.数字型文字 (1)整数型文字 整数型文字都是十进制数,由数字和下划线组成。
例如:
0,6,876,516E2,23_456_789
156E2 = 15600
23_456_789 = 23 456 789
3
VHDL语言的语言要素
1.数字型文字 (2)实数型文字 也是十进制数,但必须带小数点,由数字、小数
;等效B“001010”,长度为6
X“BC6”;等效B“101111000110”,长度为12
9
VHDL语言的语言要素
vhdl语言要素

SIGNAL x:STD_LOGIC; --x is declared as a one-digit (scalar) signal of type STD_LOGIC. SIGNAL y: STD_LOGIC_VECTOR (3 DOWNTO 0):= "0001"; --y is declared as a 4-bit vector, with the left most bit being the MSB. The initial value (optional)of y is "0001".Notice that the ":=“ operator is used to establish the initial value.
1、 CONSTANT 2、 SIGNAL 3、 VARIABLE
Object’ active zone
1、Global in object
Object is declared in package or entity。 2、Partial in object Object is declared in architecture 。
20 μs,100 ns,3 sec。
9、SEVERITY LEVEL: note,warning,error,failure
10、NATURAL
Non-negative integers (from 0 to +2,147,483,647).
11、 STD_LOGIC STD_LOGIC_VECTOR :
CHAPTER 2
vhdl language element
(Ⅰ)Object in VHDL (Ⅱ)Data type in VHDL (Ⅲ)Operation actor in VHDL
VHDL语言要素

9
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;
architecture behave of bianliang is begin process(a,b,c)
use ieee.std_logic_unsigned.all;
end zifuchuan;
architecture rtl of zifuchuan is
begin b<=X"a_b";
end rtl;
4
3 标识符 规则: l有效的字符:包括26个大小写英文字母,数字包括0~9 以及下划线“_”
。 l任何标识符必须以英文字母开头。 l必须是单一下划线“_”,且其前后都必须有英文字母或数字。 l标识符中的英语字母不分大小写。
实际上是一种指针类型
文件类型(Files Type)
用于定义代表文件的对象
17
4.3.1 VHDL的预定义数据类型
VHDL预定义数据类型都是在VHDL标准程序包STANDARD中定义的,在实际使用中 已经自动包含进VHDL的源文件中,不必通过USE语句显式调用。
1. 布尔(BOOLEAN)数据类型
8
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity xinhao is port(a,b,c:in std_logic_vector(3 downto 0); x,y:out std_logic_vector(3 downto 0)); end xinhao;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL语言要素
3. 标识符 保留字:VHDL已定义的关键字 已定义的关键字, 保留字 已定义的关键字
ENTITY ARCHITECTURE CASE BUFFER AND BEGIN END FOR IF THEN IN OUT ELSIF
OR NOT XOR NOR INOUT ….
短标识符--由用户创建的符合VHDL 87 短标识符--由用户创建的符合VHDL'87规定的标识符 --由用户创建的符合VHDL 87规定的标识符 扩展标识符--VHDL'93 扩展标识符--VHDL 93规定的标识符 --VHDL 93规定的标识符
VHDL语言要素
PROCESS SIGNAL SIGNAL MUX SIGNAL
PROCESS REG SIGNAL
VHDL语言要素
语法(定义,赋值) 语法(定义,赋值) 定义语法: 定义语法: SIGNAL <信号名 :< 数据类型 初值 信号名> 数据类型>[:初值 初值]; 信号名 两点说明: 两点说明 1.设定的初始值仅在防真中有效 综合器将忽略设定的初值, 设定的初始值仅在防真中有效,综合器将忽略设定的初值 设定的初始值仅在防真中有效 综合器将忽略设定的初值 一般情况下,在结构体中完成初始值的设定 在结构体中完成初始值的设定. 一般情况下 在结构体中完成初始值的设定 2.表达式可以是具体的数值 也可以是运算表达式 表达式可以是具体的数值,也可以是运算表达式 表达式可以是具体的数值 也可以是运算表达式. 信号赋值: 信号赋值 表达式; 信号名 <= 表达式
VHDL语言要素
4. 下标 段名 下标/ 有一8位的数据 ( 有一 位的数据A(A7A6A5A4A3A2A1A0) 位的数据 VHDL下标表示: 下标表示: 下标表示 标识符(表达式) 标识符(表达式) 表达式:具体数值,表达式. 表达式:具体数值,表达式. VHDL段表示: 段表示: 段表示 标识符( 表达式) 标识符(表达式 方向 表达式) 表达式:具体数值,表达式. 表达式:具体数值,表达式.
Vபைடு நூலகம்DL语言要素
数基表示法 数制隔离符号
数制基数
16 # E01 # E+2
数值
指数
(164)10,( ) ,(1011011)2,( ) ,(5647)8,( ) ,(AB12)16 ) 10#164 #, 2#1011011#, 8#5647#, 16#AB12# , , ,
VHDL语言要素
e
f
g
VHDL语言要素
LIBRARY IEEE; LIBRARY IEEE;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
ENTITY XOR_SIG IS PORT(A,B,C:IN STD_LOGIC; X,Y:OUT STD_LOGIC); END ENTITY; ARCHITECTURE RTL OF XOR_SIG IS SIGNAL D: STD_LOGIC; BEGIN PROCESS(A,B,C) BEGIN D<=A; X<=C XOR D; D<=B; Y<=C XOR D; END PROCESS; END RTL; MAX
说明: 说明 1.信号允许有多个驱动源 信号允许有多个驱动源. 信号允许有多个驱动源 2.同一进程中 同一信号可以被多次赋值 但仅有最后一条赋值 同一进程中,同一信号可以被多次赋值 同一进程中 同一信号可以被多次赋值,但仅有最后一条赋值 指令被启动(有效 有效). 指令被启动 有效
… SIGNAL A,B,C,Y,Z : INTEGER; … PROCESS(A,B,C) BEGIN Y<=A+B; Z<=A-C; Y<=B; END PROCESS; …
例4-3
VHDL语言要素
LIBRARY ieee; 信号举例 USE ieee.std_logic_1164.all; ENTITY simp IS PORT(a, b, c, d : IN Std_Logic; g : OUT Std_Logic); END simp; ARCHITECTURE logic OF simp IS SIGNAL e,f : Std_Logic; BEGIN a e <= a or b; b f<=not(c or d); g <=e and f; END logic; c d
初始值不能被综合,综合工具将略去所有初始值 初始值不能被综合 综合工具将略去所有初始值. 综合工具将略去所有初始值
VHDL语言要素
VARIABLE VARIABLE VARIABLE VARIABLE A,B :BIT; C:STD_LOGIC ; D:INTEGER RANGER 0 T0 15; E:STD_LOGIC_VECTOR(4 DOWNTO 0):="0110";
赋值语法: 赋值语法 表达式; 目标变量名 := 表达式 表达式:具体数值 运算表达式 表达式 具体数值/运算表达式 具体数值
VARIABLE X,Y :REAL; VARIABLE A,B:BIT_VECTOR(0 TO7); X:=100.00; Y:=1.5+X; A:=B; A:="10110110"; B(3 TO 6):=('1','0','1','0'); B(0 TO 5):=B(2 TO 7); A(7):=-'0';
VHDL语言要素
signal a,b:std_logic_vector(3 downto 0); signal i:integer range 0 to 3; signal y,z:std_logic; y<=a(m); z=<=b(2); signal a,z:std_logic_vector(0 to 7); signal b :std_logic_vector(4 downto 0); signal c :std_logic_vector(4 downto 0); signal e :std_logic_vector(0 to 3); signal d :std_logic; … z(0 to 3)<=a(4 to 7); z(4 to 7)<=(a(0 to 3); b(2)<='1'; b(3 downto 0)<="1010"; c<b; e<=c; e<=c(0 to 3); e<=c(1 to 4);
SIGNAL TEMP :STD_LOGIC:='0'' SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SIG_A:INTEGER RANGE 0 TO 15; TEMP<='1'; A<="1001"; A(0)<='0'; SIG_A<=14;
VHDL语言要素
VHDL语言要素
2. 字符 字符串型文字 字符/字符串型文字 字母 字符: 字符: ' ASCII字符 ' 数字 字符 符号 'H' 'h' 'Z' 'U' '0' '1' '_' '¥' ¥ 文字字符串 字符串: 字符串: " 一组字符 " 数字字符串
文字字符串: 文字字符串: "ERROR" "STD_LOGIC_VECTOR" "XXXX" 数字字符串: 数字字符串 "10110110" B"101" O"15" X"BD5" B " 101_101_110"
VHDL语言要素
第四章 VHDL语言要素 语言要素
语言要素: 编程语句的基本单元. 语言要素 编程语句的基本单元. 文字及标识符 数据对象 VHDL 语言要素 数据类型 操作符
VHDL语言要素
4.1 VHDL文字规则 文字规则
字 文 字 /字 字
字 字
VHDL语言要素
1,数字型文字 , 整数 常规表示: 常规表示: 5,678,1254,23_467_154 (23467154) , , , 科学记数法表示: 科学记数法表示: 5E1,678E2(67800) , ( ) 实数 常规表示: 常规表示: 5.678,1520.54,23_467.154 (23467.154) , , 科学记数法表示: 科学记数法表示: 5.678E1,1.52054E3(1520.54), ),2.3E-2(0.023) , ( ), ( )
VHDL语言要素
4.2 VHDL的数据对象 的数据对象
常用的数据对象:变量( 常用的数据对象:变量(VARIABLE) ) 信号( 信号(SIGNAL) ) 常量( 常量(CONSTANT) ) 一,变量(VARIABLE) 变量( ) 1,局部量:只适用于进程或子程序中. ,局部量:只适用于进程或子程序中. 2,变量是虚的,不能将信息带出当前设计单元 ,变量是虚的, 3,没有传输延时(立即赋值),即理想化的数据传输. ),即理想化的数据传输 ,没有传输延时(立即赋值),即理想化的数据传输. 变量定义和赋值 定义语法: 定义语法: VARIABLE <变量名 > :<数据类型 :=初始值 ]; 变量名 数据类型>[ 初始值 数据类型
VHDL语言要素
VHDL的短标识符是遵守以下规则的字符序列: VHDL的短标识符是遵守以下规则的字符序列: 的短标识符是遵守以下规则的字符序列 有效字符:英文字符( ),数字 有效字符:英文字符('a'-'z','A'-'Z'),数字('0'-'9') - z , A - Z ),数字( -9) 和下划线( 和下划线('_') ) 必须以英文字母打头 下划线('_')的前后都必须有英文字母或数字 下划线( ) 短标识符不区分大小写 合法标识符: 合法标识符 A a A1 a1 qout_1 sig_r 非法标识符: 非法标识符 _DG 2FFT ABS ABC_ SIG* AB_