首页 » 科学 » 周全理解VHDL的标识符、数据对象、数据类型_数据类型_暗记

周全理解VHDL的标识符、数据对象、数据类型_数据类型_暗记

萌界大人物 2024-11-20 08:57:05 0

扫一扫用手机浏览

文章目录 [+]

1. 常量

常量是设计者给某一常数名授予固定值的量,一旦赋值就不会发生变革。
一样平常格式为:

周全理解VHDL的标识符、数据对象、数据类型_数据类型_暗记 周全理解VHDL的标识符、数据对象、数据类型_数据类型_暗记 科学

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

对常量赋值用“∶=”常量声明的例子如下:

周全理解VHDL的标识符、数据对象、数据类型_数据类型_暗记 周全理解VHDL的标识符、数据对象、数据类型_数据类型_暗记 科学
(图片来自网络侵删)

constant width:integer∶=8; --常数名width,数据类型integer整数,赋值8constant VCC:real∶=3.3; --常数名VCC,数据类型real实数,赋值3.3

2. 变量

变量是可以改变值的量,可以在进程和子程序中解释,可以是任意数据类型。
变量的赋值是立即生效的。
一样平常格式为:

variable 变量名:数据类型 ∶= 初始值或表达式;

对变量赋值用“∶=”表示。
变量声明的示例如下:

variable temp:std_iogic∶='0'; --变量名temp,数据类型std_iogic标准逻辑位赋初始值0variable a,b:bit_vector(0 to 7); --变量名a,b,数据类型bit_vector(0 to 7)是位矢量b∶=\公众10101010\"大众; --位矢量赋值a(3 to 6)∶=('1','1','0','1'); --段赋值a(0 to 5)∶=b(2 to 7);a(7)∶='0'; --位赋值

3. 旗子暗记

旗子暗记是电子电路内部硬件连接的抽象,可以将构造体等分离的并行语句连接起来,并且能通过端口与其他的模块连接。
可以随着韶光改变值,不像变量赋值立即生效,许可产生延时。
旗子暗记常日在实体、构造体和程序包中解释,但不能在进程中解释,只能在进程中利用。
对旗子暗记赋值利用“<=”表示,许可产生延时,这和实际元件的传输延时特性吻合。

一样平常格式为:

signal 旗子暗记名:数据类型 :=初始值;

旗子暗记声明的示例如下:

signal a: bit∶='0';--旗子暗记名a,数据类型是位,赋初值为0。
赋值符“∶=”给旗子暗记赋初值时会立即生效,而不产生延迟。
但旗子暗记一样平常用代入符“<=”赋值,会产生一定延迟才生效。
旗子暗记可以赋初值也可以不赋初值,没有赋初值,那么取默认值,即指天命据类型的最左值或最小值。

signal INIT:bit_vector(7 downto 0); --定义旗子暗记INIT,是位矢量signal c:integer range 0 to 15; --定义旗子暗记c,数据类型是整数,整数范围0 到15signal y,x: real; --定义旗子暗记y,x,数据类型是实数 y<=x; --经由δ延时后将x值赋给y

特殊提示:变量只能在进程语句中解释和利用;旗子暗记、常量可以在构造体和进程语句中利用。
变量、常量用“∶=” 赋值,无延时;旗子暗记用“<=” 赋值,有延时。

数据类型

1. 标准数据类型

标准数据类型共有10种,见表3.2。

表3.2 标准数据类型

特殊提示:常用的数据类型包括整数、实数、位、位矢量。
整数可以用十进制、二进制、八进制、十六进制表示,例如,十进制125,用二进制写为2#11111111#,八进制写为8#377#,十六进制写为16#FF#。
布尔量用于关系运算,如a>b成立,结果为真true。

2. 用户自定义的数据类型

VHDL许可用户自定义数据类型,一样平常书写格式为:

type 数据类型名 is 数据类型定义;

VHDL常用的用户自定义类型包括列举类型、整数类型、数组类型、子类型等。

1)列举类型

把数据类型中的各个元素都列举出来,方便、直不雅观,提高了程序可阅读性。
书写格式为:

type 数据类型名称 is(元素1,元素2,…);

个中,数据类型名称和元素都是标志符。
例如:

type color is(blue,green,yellow,red);

数据类型名称是color,(元素1,元素2,…)是(blue,green,yellow,red)。
列举类型中所列举的元素在程序编译过程常日是自动编码,编码顺序是默认的,左边第一个元素编码为0,往后的依次加1。
编码过程中自动将每一个元素转变成位矢量,位矢量的长度将由所列举元素的个数决定。
如上例4个元素,位矢量的长度为2,编码默认值为blue=\公众00\"大众; green=\"大众01\"大众; yellow=\"大众10\"大众; red=\公众11\"大众。
在旗子暗记定义时就可以利用这种数据类型,例如:

type color is(blue,green,yellow,red);signal p: color; --旗子暗记p是color数据类型

2)整数类型、实数类型

自定义的整数类型、实数类型是标准数据类型的整数、实数的子类型,是根据分外须要自定义的数据类型,以便编译过程降落逻辑电路的繁芜性和提高芯片资源的利用率。
书写格式为:

type 数据类型名称 is integer range 整数范围;type 数据类型名称 is real range 实数范围;

例如:

type percent is integer range -100 to 100;

percent是数据类型名称,它的数据类型是integer整数,range 整数范围是-100~100。

type current is real range -1.5 to 3.0;

current是数据类型名称,它的数据类型是real实数,range 实数范围是-1.5~3.0。

3)数组(array)类型

数组是将相同类型的数据即数组元素凑集在一起所形成的一个新的数据类型。
数组类型分限定数组和非限定数组两种,书写格式为:

type 数组类型名 is array 范围 of 数组元素的数据类型;type数组类型名 is array(range <>)of数组元素的数据类型;

个中范围是用整数指明数组的高下界,是一个限定数组,例如:

type stb is array(7 downto 0)of bit;variable addend: stb; --变量addend定义为stb数组

stb是数组类型名。
(7 downto 0)是数组的高下界,数组有8个元素,数组的下标排序是7、6、5、4、3、2、1、0,各元素的排序是stb(7)、stb(6)、stb(5)、stb(4)、stb(3)、stb(2)、stb(1)、stb(0),每一个元素的数据类型是bit。
范围由“range <>”指定,这是一个没有范围限定的数组,是一个非限定数组。
在这种情形下,详细范围由旗子暗记解释语句来确定。
例如:

type bit_vector is array(integer range <>)of bit;

bit_vector是一个非限定数组,每一个元素的数据类型是bit。

variable my_vector:bit_vector(5 downt to -5);

变量my_vector定义为bit_vector数组,数组的下标排序是5、4、3、2、1、0、-1、-2、-3、-4、-5。

4)子类型

子类型解释语句便是对已经存在的基本数据类型作一些范围限定,便形成了一种新的数据类型。
子类型subtype的语句格式如下所示:

subtype 子类型名 is 基本数据类型 range 约束范围

用子类型解释语句的好处在于编译过程中可以根据子类型的约束范围,有效地推知参与的寄存器的最得当的数目,节省芯片资源。
例如:

Type nat is integer range 0 to 999; --自定义整数类型nat是整数,范围是0-999subtype a_nat is nat ragne 0 to 255; --子类型a_nat是nat类型,范围是0-255

3. IEEE标准数据类型std-logic和std-logic-vector

在IEEE库的程序包std_logic_1164中定义了两个非常主要的数据类型,即标准逻辑位std-logic数据类型和标准逻辑矢量std-logic-vector数据类型。

std-logic定义了9种不同的值,增加了不定状态'X'、高阻状态'Z'。
不定状态方便了系统仿真,高阻状态方便了双向总线的描述。

'U'——初始值'X'——不定,未知'0'——0'1'——1'Z'——高阻'W'——弱旗子暗记不定,未知'L'——弱旗子暗记0'H'——弱旗子暗记1'—'——不可能情形
标签:

相关文章