VHDL语言的基本语法

更新时间:2023-06-11 00:08:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VHDL语言要素一、VHDL语言的基本语法1、VHDL语言的标识符VHDL中的标识符可以是常数、变量、信号、端口、子程序或参 数的名字。使用标识符要遵守如下规则: 标识符由字母(A…Z,a…z)、数字和下划线字符组成;

任何标识符必须以英文字母开头;末字符不能为下划线; 不允许出现两个连续下划线;

标识符中不区分大小写字母;VHDL定义的保留字或称关键字,不能用作标识符; VHDL中的注释由两个连续的虚线(--)开始,直到行尾;

[例] _Decoder_1 --起始为非英文字母

3DOPLarge # number

--起始为数字--“#”不能成为标识符的构成符号

Date_ _busCopper_ on

--不能有双下划线--最后字符不能为下划线 --关键字

2、VHDL语言的数字 2.1 数字型文字的值有多种表达方式,现列举如下:

(1) 整数文字:整数文字都是十进制的数,如:5,678,0,156E2(=15600), 45_234_287(=45234287) (2) 实数文字:实数文字也都是十进制的数,但必 须带有小数点,如:

188.993, 88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0

数字前可加0,数字中间不能有空格

2.2 以数制基数表示的文字:

数制#基数#指数数制和指数部分是用十进制数表示的数。指数部分 的数如果是0可以省去不写。现举例如下: 10#170#

2#1111_1110# 16#E#E1

--(十进制数表示,等于170) --(二进制数表示,等于254)

--(十六进制数表示,等于2#11100000#,等于224) 16#F.01#E+2 --(十六进制数表示,等于3841.00) 8#377# --(与16#FF#,016#0FF#,2#11111111都为255)

3、字符串型文字 字符是用单引号引起来的ASCII字符,可 以是数值,也可以是符号或字母,如:‘R , A , * , Z 。

而字符串则是一维的字符数组,须放在双 引号中。VHDL中有两种类型的字符串:文字 字符串和数位字符串。

(1)文字字符串

文字字符串是用双引号引起来的一串文字, 如: “ERROR”,“BOTH S AND Q EQUA TO L”,“X”,“BB$CC”(2)数位字符串

也称数值字符串、位矢量,是预定义的数据 类型BIT的一维数组,它们所代表的是二进制、 八进制或十六进制的数组,其位矢量的长度 即为等值的二进制数的位数。

进制基数符号“数位字符串”

B:二进制基数符号,表示二进制数位0或1。 O:八进制基数符号。 X:十六进制基数符号(0~F) 。 例如:B“1_1101_1110” --二进制数数组,位矢数组长度是9 X“AD0”

--十六进制数数组,位矢数组长度是12

4、下标名及下标段名 下标名用于指示数组型变量或信号的某一 元素,如:a(2) , b(n) 下标段名则用于指示数组型变量或信号的 某一段元素,其语句格式如下:数组类型信号名或变量名(表达式1 [TO/DOWNTO 表达式2])

;

如下是下标名及下标段名使用示例:SIGNAL A,B,C:BIT_VECTOR(0 TO 7);

SIGNAL M:INTEGER RANGE 0 TO 3;SIGNAL Y,Z :BIT;

Y<=A(M);Z<=B(3);

--M是不可计算型下标表示--3是可计算型下标表示 -以段的方式进行赋值 -以段的方式进行赋值

C (0 TO 3)<=A (4 TO 7); C (4 TO 7)<=A (0 TO 3);

二、VHDL语言的数据对象1、常数(Constant)常数是一个固定的值,主要是为了使设计实体中的常数更容 易阅读和修改。常数一旦被赋值就不能再改变。一般格式: CONSTANT 常数名:数据类型:= 表达式;

例: CONSTANT fbus: BIT_VECTOR: = “01011001”; --总线上数 据设备向量

CONSTANT dely: TIME: =25 ns; --输入/输出的延迟时间 常数所赋的值应与定义的数据类型一致。

常量的使用范围取决于它被定义的位置:(1)程序包中定义的常量具有最大的全局化特性,可以用在调 用此程序包的所有设计实体中; (2)设计实体中定义的常量,其有效范围为这个实体定义的所 有的结构体; (3)设计实体中某一结构体中定义的常量只能用于此结构体;

(4)结构体中某一单元定义的常量,如一个进程中,这个常量 只能用在这一进程中。

2、变量( Variable )变量是一个局部变量,它只能在进程语句、函数语句和过程 语句结构中使用,用作局部数据存储。变量常用在实现某种算 法的赋值语句中。 一般格式:VARIABLE 变量名:数据类型 约束条件:= 表达式;

例: VARIABLE VARIABLE

x, y: INTEGER;

--定义x,y为整数变量

count: INTEGER RANGE 0 TO 255:=10; --定义计数变量范围

变量赋值语句的语法格式如下: 目标变量:=表达式;(1) 赋值语句右方的表达式必须是一个与目标变量有相同 数据类型的数值。(2) 变量不能用于硬件连线和存储元件。 (3) 变量的适用范围仅限于定义了变量的进程或子程序中。 (4) 若将变量用于进程之外,必须将该值赋给一个相同的 类型的信号,即进程之间传递数据靠的是信号。

[例]VARIABLE x, y :REAL;VARIABLE a, b: BIT_VECTOR(0 TO 7);

x:=100.0; y:=1.5+x;a:=b; a:=”1010101”;

--实数赋值,x是实数变量 --运算表达式赋值,y也是实数变量

--位矢量赋值,a的数据类型是位矢量 --段赋值 a(3 TO 6):=( 1 , 1 , 0 , 1 );

a(0 TO 5):=b(2 TO 7);a(7):= 0 ; --位赋值

3、信号(Signal)信号是描述硬件系统的基本数据对象,它类似于连接线。它 除了没有数据流动方向说明以外,其他性质与实体的端口(Port )概念一致。 信号说明格式为:SIGNAL 信号名:数据类型 约束条件:= 初始值; 信号初始值的设置不是必需的,而且初始值仅在VHDL的行 为仿真中有效。 例:SIGNAL temp: STD_LOGIC:= 0 ; SIGNAL flaga, flagb: BIT; SIGNAL date: STD_LOGIC_VECTOR (15 DOWNTO 0);

信号的使用和定义范围是实体、结构体和程序包.

在程序中: (1) 信号值的代入采用“<=”代入符,而且信号 代入时可以附加延时。 (2) 变量赋值时用“:=”,不可附加延时。 (3) 信号的初始赋值符号仍是“:=”。 例:

X<=Y AFTER 10 ns; --X,Y都是信号,且Y的值经过10ns延 时以后才被代入X。信号是一个全局量,它可以用来进行进程之间的通信。

在仿真过程中,信号到了规定的仿真时间才进行赋值,变量 的赋值是立即生效的。例 进程1: PROCESS(A,B,C,D) BEGIN D<=A; X<=B+D; D<=C; Y<=B+D; END PROCESS;

D中最初代入的值是A,接 着又代入C值。尽管D中先代 入A值,后代入C值,在时间 上有一个△的延时,但是,在 代入时由于不进行处理,因此 仿真时认为是时间0值延时。 所以D的最终值应为C,这样 执行的结果:X,Y的内容都 为B+C。

进程2: PROCESS(A,B,C) VARIABLE D:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN 在执行“D:=A;”语句后,A的值就被 D:=A; 赋给D,所以X为B+A。此后又执行“D: X<=B+D; =C;”,从而使Y为B+C。由此可看出,信 D:=C; 号的值将进程语句最后所代入的值作为最终 Y<=B+D; 代入值。而变量的值一经赋值就变成新的值。 END PROCESS;

信号与变量的区别(1)声明的形式与位置不同信号 signal count : std_logic_vector(7 downto 0); 变量 variable tema:std_logic_vector(3 downto 0); 信号在结构体中声明;变量在进程中声明 (2)赋值符不同

count<=“00000000”, count<=“ZZZZZZZZ” count<=tema; tema:="0000";

(3)赋值生效的时间不同信号:进程结束时 变量:立即生效 (4)进程对信号敏感,对变量不敏感 (5)作用域不同 信号可以是多个进程的全局信号, 变量只在定义后的顺序域可见

三、VHDL语言的数据类型

VHDL中的数据类型可以分成四大类。标量型(Scalar Type)

复合类型(Composite Type)存取类型(Access Type) 文件类型(Files Type)

标量型(SCALAR TYPE):属单元素的最基本的数据 类型,通常用于描述一个单值数据对象,它包括实 数类型、整数类型、枚举类型和时间类型。 复合类型(COMPOSITE TYPE):可以由细小的数据 类型复合而成,如可由标量复合而成。复合类型主 要有数组型(ARRAY)和记录型(RECORD)。 存取类型(ACCESS TYPE):为给定的数据类型的数 据对象提供存取方式。 文件类型(FILES TYPE):用于提供多值存取类型。

本文来源:https://www.bwwdw.com/article/4tx1.html

Top