微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VHDL语句特性

VHDL语句特性

时间:10-02 整理:3721RD 点击:
目前,用于FPGA的编程语言主要有两种——verilog和VHDL,两种语言各有千秋。verilog由C语言发展而来,简单易学,代码一般也比较短,可以用于集成电路底层建模,而VHDL语法较为严谨,较难入门,代码也比较冗长,且无法直接用于集成电路底层建模,但具有很好的行为级描述能力和较好的系统级描述能力,较适用于大型项目。本文只介绍VHDL,重点讲述VHDL的语句执行特性VHDL英文全称为Very-high-speed integrated circuit Hardware Description Language,即超高速集成电路硬件描述语言。它有三种数据对象——常数、信号、和变量,另外还有两种语句——并行语句和顺序语句。三种数据对象都可以赋初值,但不是必须的。
1、常量
常量是一个恒定不变的值,设置常量是为了使程序易于修改,其定义格式如下:
CONSTRANT 常数名:数据类型:=表达式;
说白了,常量就是用于表示某个数值的标识符,类似于C语言中的常量。
2、信号行为特性
信号的定义格式如下:
SIGNAL 信号名:数据类型:=初始值;
信号通常用于作电路的信号连线,也可以作为多个进程间的通信线信号的定义必须在“architecture......is"和BEGIN之间,但可在结构体的任何        位置使用,其赋值符号是“<=",它        有以下几个行为特性:
(1)信号的赋值不是马上完成的,在对信号进行赋值时,程序先执行赋值,直到进程结束时才完成赋值。举个例子,假设一个进程中有以下几 行语句:
a<=d1+1;
b<=a;
q1<=b;
假设一开始a=b=q1=0,d1=1,按照以前C语言的语法规则,我们会认为,在这段语句结束之后,q1=1,但对于VHDL的信号而言,情况却不        同。当这段语句开始执行时,程序会先执行赋值符号右边的表达式,到进程结束时,一并完成赋值。也就是说,在这段语句执行完一次之        后,各个信号的值是:a=2,b=0,q1=0。信号的这种赋值特性很类似于Verilog中的非阻塞赋值。
(2)当进程中存在同一信号有多个赋值源时,实际完成赋值,即赋值对象的值是最接近END PROCESS语句的信号,举个例子,在进程中有以下        语句:
a<=2;
a<=3;
a<=4;
end process;
那么,最终,a的值是4。
2、变量行为特性
变量的定义格式如下:
VARIABLE 变量名:数据类型:=初始值;
变量的定义必须在进程中,位于进程开始之前的位置,也就是在语句”PROCESS(敏感事件)“和BEGIN之间,也只能用于其定义所在的进程中。        其赋值符号是”:="。与信号不同,变量的赋值是执行后即刻完成,没有延时,比如,在上面的例子中,如果a、b、q1是变量,那么该段语句的        赋值是这样操作的,先执行第一句,之后a的值变为d1+1的值,即2,然后在第二句时,a的值赋给b,于是b的值变为2,最后,将b的值赋给        q1,所以,q1的值就等于2了。因此,VHDL中变量的赋值特性与C语言中的变量赋值是很相似的。
3、并行语句特性
并行语句,顾名思义,它是“可以”并行执行的,其执行顺序不一定和代码编写的顺序一致。结构体中,不在进程中的语句皆为并行语句,而进程本身也是一种并行语句。比如在结构体中,
q<=1;  --语句1
process(敏感信号)
begin
.
end process;
以上语句1和进程都可视为并行语句。说并行语句是“可以”并行执行的也就是说并行语句不一定说什么时候都是同时执行的。与进程一样,其他        的并行语句的运行也需要敏感信号来触发,哪个并行语句的敏感信号先发生变化,就先执行哪个语句。假设结构体中有以下一段语句:
a<=b; --语句1
b<=c;--语句2
process(敏感信号)BEGIN..END PROCESS;
在以上语句中,假设c的值先发生变化,由原来未知的状态变为1,那么代码执行时会直接执行语句2,之后b变为1,触发语句1,于是语句1便会        被执行,这样便不是同时执行了,但当语句1和2的敏感信号同时发生变化,即b,c同时变化,那么两条语句便会同时运行。另外,如果b早于c发 生变化,那么语句则会按编写顺序运行了。
4、顺序语句特性
VHDL规定,顺序语句必须包含在并行语句中。进程中的语句皆为顺序语句(比如信号赋值语句),顺序语句的运行是按编写的顺序进行的,但 其有一个特点,无论进程中有多少条顺序语句,100条也好,1000条也罢,都会在一个δ时间,即一个进程的运行时间内执行完毕,而这个时间        是一个固有的无穷小时间,也就是说,这些语句都会几乎同时完成执行,前面所讲的信号赋值语句也是如此。
VHDL是硬件描述语言,计算机在执行代码时,无论是并行语句还是顺序语句,都是一条一条地执行的,“并行运行”是针对所生成的电路而言,现实中的电路各部分在通电后通常都是同事开始工作的,而计算机和我们人脑一样,对一件事物不可能瞬间描述完,总要一步一步地来。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top