EDA与VHDL作业(2)

(唉呀,这样的记录,好无聊啊,以后多记录点代码吧)
1.VHDL中有哪三种数据对象,详细说明它们的功能特点以及使用方法,举例说明数据对象与数据类型的关系

数据对象有常数,变量,信号三种。具体描述如下:
1、常数
常数的定义就是为了使程序更容易阅读和修改。在程序中,常数是一个恒定不变的值,一旦进行数据类型和赋值定义后,在程序中就不能再改变,因而具有全局性意义。一般表述如下:

CONSTANT 常数名:数据类型 := 表达式;
例如:
CONSTANT FBT : STD_LOGIC_VECTOR := "010110"; --定义常数为标准位矢类型
CONSTANT DATAIN : INTEGER :=15;--定义常数位整数类型

注意:常数使用范围是有规定的,要看定义在哪个位置。这一点跟一般的程序语言类似,例如C语言。

2、变量
在VHDL中,变量是局部变量,只能在进程和子程序中使用。类似于一般程序语言中的顺序执行的赋值操作。主要作用是在进程中作为临时的数据存储单元。一般描述如下:

VARIABLE 变量名 : 数据类型 := 初始值;

实例:

VARIABLE a : INTEGER RANGE 0 TO 15; --变量a定义为整型,取值范围是0~15
VARIABLE d : STD_LOGIC := '1'; --变量d定义为标准逻辑位数据类型,初始值是1

由于硬件电路上电后的随机性,综合器并不支持设置初始值。定义的初始值仅对仿真器是有效的。变量赋值的一般描述如下:

目标变量名 := 表达式;

示例:

VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0;--分别定义变量x和y为整型
VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0);
x := 11;                         --整数直接赋值,这是因为x的类型是整数类型
y := 2 + x;                      --运算表达式赋值,y也是整数变量
a := b;                          --b向a赋值
a(5 DOWNTO 0) := b(7 DOWNTO 2); --位矢量类型赋值

3、信号
信号是描述硬件系统的基本数据对象。信号可以作为设计实体中并行语句模块间的信息交流通道。信号的定义:

SIGNAL 信号名: 数据类型 := 初始值;

信号的语句形式与变量相似,不过与变量相比,信号具有全局性特征。例如:在实体中定义的信号(如端口),在其对应的结构体中都是可见的,即在整个结构体中的任何位置、任何语句结构中都能获得同一信号的赋值。(具体还有一些细节不做过多描述,可以在编写代码过程中体会)
在当信号定义好之后,设计过程中就可以对其赋值了。格式如下:

目标信号名 <= 表达式 AFTER 时间量; --AFTER是关键字,延时一定时间后才进行赋值,“时间量”就是具体的演示时间,如 AFTER 3 ns

注意:AFTER x ns 只对仿真有效。
在进程中可以允许同一信号有多个驱动源,即在同一进程中存在多个同名的信号被赋值,其结果只有最后的赋值语句被有效赋值。例如:

PROCESS (a,b,c) BEGIN
    y <= a + b;
    z <= c - a;
    y <= b;
END PROCESS; 

上例中,a,b,c 被列入进程敏感表,当进程被启动后,程序将自上而下的顺序执行,而y最终被赋值为b。
在并行语句对同一信号进行多次赋值时,表现在电路上就意味着“线与”。因此在并行语句中不允许对同一信号进行赋值,而结构体中的进程与进程之间都是并行执行的,因此两进程间不能对同一信号进行赋值,例如下面的语句是错误的:

PROCESS (a,b) BEGIN 
    y <= a + b;
END PROCESS;
PROCESS (c,d) BEGIN
    z <= c - d;
    y <= d;
END PROCESS;

数据类型与数据对象的关系:
VHDL的数据类型有(主要指预定义数据类型)有多种,它们各自为数据对象定义了一组取值的集合;

VHDL作为一种强类型语言主要表现在以下两方面:
(1)VHDL程序中任何数据对象都必须定义一个确定的数据类型,并由此限定此数据类型的取值范围。
(2)VHDL要求在信号赋值、算术运算、逻辑操作和数据比较等操作中数据对象的数据类型是相同的。

ps:还是老话,具体细节多多编程就明白了,也算时刻提醒我吧。

你可能感兴趣的:(FPGA-VHDL,编程-语言,数据,class,阅读,对象)