深入理解FPGA电子系统设计——基于Quartus Prime与VHDL的Altera FPGA设计【1.3】

2.2 VHDL程序语法规则

VHDL语言与其他高级语言一样,编写程序时也要遵循一定的语法规则。下面介绍VHDL的语言要素及其规则。

1. 标识符

VHDL标识符分为短标识符和扩展标识符两类。其中短标识符由VHDL87版本规定,在此基础上,VHDL93版本进行了扩展,提出了扩展标识符。

(1)短标识符短标识符由26个大小写英文字母、数字0~9以及下画线“_”中的字符构成,首字符必须是英文字母,“_”前后必须有英文字母或数字,不分大小写,且VHDL定义的保留字或关键字不能用作标识符。多个标识符间用“,”隔开。例如:

Mux21a, mux21a, mux21_a

(2)扩展标识符

扩展标识符由反斜杠界定,反斜杠内除了可以包含26个大小写英文字母、数字0~9以及下画线“_”外,还允许包含图形符号、空格符、关键字或保留字,且扩展标识符区分大小写。例如:

\Mux21a\, \mux21a\, \21mux_a\, \21_mux_a\

注意\Mux21a\和\mux21a\不同。

2. 数据对象

数据对象是指程序中可以被赋值的载体。VHDL的数据对象有常数(constant)、信号(signal)、变量(variable)和文件(files)四种类型,前三种属于可综合的数据对象,第四种是为传输大量数据而定义的一种数据载体,仅在行为仿真时使用。VHDL的数据对象在使用前必须说明。

1)常数

常数为全局量,相当于电路中的恒定电平,如gnd和vcc。常数说明的一般格式如下:

constant常数名表: 数据类型[: =表达式];

例如:

constant bus: bit_vector :="01011"; constant bus_width: integer :=8;

常 数 一 般 要 赋 初 始 值 , 主 要 用 于 在 entity 、 architecture 、package、process、procedure、function中保持静态数据,以改善程序的可读性,并使修改程序容易。

2)信号

信号具有全局性,主要用于在entity、architecture和package中定义端口或内部连线,在元件间起互联作用;或作为一种数据容器,以保留历史值或当前值。信号传输过程具有延迟特性。信号说明的一般格式如下:

signal信号名表: 数据类型[: =表达式];

其中表达式用于为信号赋初值,通常不建议采用,初值仅在仿真时有用,在实际综合时将被忽略。信号的赋值采用如下格式:

目标信号名<=表达式;

例如:

signal count: bit_vector (3 downto 0); count <=count+1;

信号的赋值既可以采用整体赋值,也可以采用部分赋值,例如:

注意信号的赋值不是立刻发生的,需要经过一定的延时,具体延时取决于所用FPGA的物理性质,即器件的固有延时。仿真时,仿真模拟器会附加一个仿真器的最小分辨时间δ,δ延时后执行赋值操作。

3)变量

变量属于局部量,只能在进程和子程序(函数、过程)中使用,用于计算或暂存中间数据。变量说明的一般格式如下:

variable变量名表: 数据类型[: =表达式];

变量赋值采用如下格式:

目标变量名 : =表达式;

举例如下:

信号与变量作为VHDL电路设计中经常要用到的数据对象,都与一定的物理对象相对应,相当于组合电路中门与门之间的连线,以及连线上的信号值,但是两者之间也有许多不同之处,使用时应当特别注意。主要表现在以下四点:

(1)物理意义不同:信号是全局量,可以作为模块间的信息载体&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值