第一范文网 - 专业文章范例文档资料分享平台

eda1

来源:用户分享 时间:2025/5/19 14:46:44 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

BEGIN

c<=a AND b; END RTL1;

3.4.2 包集合

? 是库的一个层次。

? 包集合中存放可以在程序中被调用的子程序——

过程和函数。

? 用来单纯的罗列信号定义、常数定义、数据类型、

元件语句、函数定义和过程定义。 ? 每一个包集合都用一个特殊的名字。 ? 库与包集合的关系如下图所示

Function define Procedure define

package define

Signal define

library

Data types define

第4章VHDL语言的数据类型及运算操作符

?数据对象 ?数据类型 ?运算操作符

常量 变量 信号

标准数据类型

自定义数据类型

算术

逻辑

关系

Entity define

并置

4.1 数据对象(Data Object)及其分类

凡是可以赋予一个值的对象称为数据对象。

库的层次

包集合的调用

1、说明包集合所在的库: 2、说明要使用的包集合:

LIBRARY 库名;

USE 库名.包集合名.项目名;

例: 在设计中使用std_logic数据类型

std_logic数据类型是IEEE定义的一种数据类型。它定义在IEEE库中的std_logic_1164包集合中。 library ieee;

use ieee.std_logic_1164.all;

entity nand2 is

port (a,b:in std_logic;

q:out std_logic); end nand2;

architecture rtl of nand2 is signal c:std_logic; begin

c<=a and b; q<=not c; end rtl;

?数据对象

类(CLASS)

数据类型(DATA TYPES)、 名字(NAME)。

? 类(CLASS):信号( signal ),变量( variable ),

常量( constant ) ? 类型(DATA TYPES):位、位矢量、std、整数、

实数等

例: 类 对象 数据类型 signal a: bit;

? 数据对象的分类:信号、变量、常数。 常数:表示物理设计中那些不变的量

信号:表示物理设计中的某一条硬件连接线,也可以表示寄存器。

变量:电路暂存某些值的载体

? 数据对象的特征:允许被赋值、具有一定的数据类

? 对象仅在其说明区域可见,区域外不可见

例:作用域为整个构造体的客体的定义 ARCHITECTURE rtl Of name IS SIGNAL a:BIT; BEGIN

…………………………. END rtl;

在构造体中的任何位置,都可以使用这个信号a。

4.1.1 常数:在设计描述之中不会变化的值

? 物理含义:可以代表数字电路中的电源、接地、计

数器模值等

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

- 13 -

? 常数所赋的值应和所定义的数据类型一致

例:CONSTANT Vcc:real:=“0101”;

错误,因为所赋的值与所定义的数据类型不一致,一个为实数,一个为位矢量。

例:CONSTANT Vcc:real:=5.0;

4.1.2 变量(variable)

? 变量仅仅用于进程和子程序,是一个局部量,作用

范围仅限于定义该变量的模块。

说明格式如下:

VARIABLE 变量名:数据类型:=表达式;

? 变量的赋值采用“:=”,赋值后立即生效。

? 变量可以在定义时被赋初值;也可以在进程中被赋

例:变量在定义时赋值

VARIABLE B:INTEGER:=1; 例:变量在进程中被赋值 PROCESS(……)

variable A:BIT_VECTOR; BEGIN

…………. A:=”01010”; …………. END PROCESS;

对于综合来说,变量通常用于计算的目的,但它的综合比较难于定义,或者综合后占用大量的资源。因此,在设计中尽量避免采用变量。除非在那些我们有信心可预言结果的场合。

4.1.3 信号(signal)

? 信号能够代表连线,是电子电路内硬件连接的抽象 ? 声明内部信号 ? 没有数据流动方向

SIGNAL 信号名:数据类型 :=表达式;

例:SIGNAL COUNT:BIT:=?0?;

? 信号在定义时赋初值,用“:=”代入符 ? 在程序中,信号的赋值采用“<=”代入符

例:SIGNAL S1,S2:STD_LOGIC; …… S2<=?1?; S1<=S2;

? 信号的代入可以附加延时

例如:signal count:bit:=?0? after 10ns;

? 信号可以在程序中被重新赋值

4.2 运算操作符

按优先级的顺序依次(低到高)为:

? 逻辑运算符(Logical) ? 关系运算符(Relational) ? 并置运算符(Concatenation) ? 算术运算符(Arithmetic)。

要求操作数的类型必须和操作符所要求的类型一致。

4.2.1 逻辑运算符(Logical) 1、逻辑运算符(Logical) 与 或 非 与非 或非 异或

2、逻辑运算符的操作对象 “STD_LOGIC”; “BIT”;

“STD_LOGIC_VECTOR”; “布尔量”(Boolean)

? 没有优先级差别,按自左至右的优先级顺序运算。 例:下式去掉括号就会产生错误: X<=(A AND B) OR (NOT C AND D); 去掉括号:

X<=A AND B OR NOT C AND D; 以上两式的运算次序是完全不同的。

逻辑运算符常用于书写逻辑表达式 例:entity and2 is

port(a,b,c,d:in bit;

q:out bit); end and2;

architecture rtl of and2 is begin

q<=(a and b) or (c nand d); end rtl;

4.2.2 关系运算符(Relational) 1、关系运算符( Relational ) 等于 不等于 小于 小于等于 大于 大于等于 2、操作对象

1)“=”和“/=”适用于所有类型的数据。 2)其它关系运算符则适用于 “STD_LOGIC”; “INTEGER”; “REAL”;

“STD_LOGIC_VECTOR”

? 比较时,按自左至右的比较结果作为运算结果。 例:下式比较就会产生错误 X<=“1010”;——10 Y<=“111”;——7 IF (X>Y) THEN…

上式比较结果为Y>X。显然错误。

关系运算符常用于条件的判断

例:最大值选取,输入a(4),b(4),输出q(4) library ieee;

use ieee.std_logic_1164.all;

- 14 -

entity max is

port(a,b:in std_logic_vector(3 downto 0); q:out std_logic_vector(3 downto 0)); end max;

architecture rtl of max is begin

q<=a when (a>b) else b; end rtl;

4.2.3 并置运算符(Concatenation)

? 并置运算符&:用于位的连接 ? 操作对象 “STD_LOGIC”; “BIT”;

“STD_LOGIC_VECTOR”; “BIT_VECTOR”;

“STD_ULOGIC_VECTOR”;

例:a<=”1010”; b<=”1001”; c<=a & b 结果为:c=”10101001”。

4.2.4 算术运算符(Arithmetic)

? 对std_logic_vector类型的对象进行算术运算时,要

用“use ieee.std_logic_unsigned”提前声明包集合

1 算术运算符 加 减 乘 除 求模 求余 正 负 指数 绝对值

例:利用算术运算符设计一个矢量乘法器,输入a(4),b(4),输出q(4) library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity mult is

port(a,b:in std_logic_vector(3 downto 0);

q:out std_logic_vector(7 downto 0)); end mult;

architecture rtl of mult is begin

q<=a * b; end rtl;

4.3 数据类型

? 所有数据对象均需说明它的数据类型 ? 包括:标准数据类型; 自定义数据类型

标准的数据类型

? 整数(Integer):-2147483647(-231)~2147483647

( 231) 32位有符号数

例:signal a: integer; …………. a<=8;

? 实数(Real):-1.0E+38~1.0E+38,书写时一定要有

小数点,目前只能仿真,不能综合。

例:signal a: real;

…………. a<=8.0;

? 位(Bit): ?1?和?0? ,只代表一个位的两种取值。 例:signal a: bit;

…………. a<=?1?;

? 位矢量(Bit-Vector):是位的一种组合类型。 例:signal a: bit_vector(3 downto 0); …………. a<=“0101”;

? 布尔量(Boolean): ?True?和?False?。 例:signal a: boolean; …………. a<=true;

? 字符(Character):包括26个字母的大小写、0~9

的数字、空格、特殊字符等等。

例:signal a: character; …………. a<=?a?;

? 字符串(String):用双引号括起来的一组字符序列。 例:signal a: string; …………. a<=“work”;

? 时间(TIME):是一个物理量数据。 例:signal a: time;

…………. a<=10 us;

? 自然数和正整数:

自然数(Natural) :大于或等于零的整数 正整数(Positive) :大于零的整数

VHDL 的 标 识 符

? ? ? ? ? ?

第一个字符必须是字母; 最后一个字符不能是下划线; 不允许连续两个下划线;

VHDL的保留字不能用作标示符; 大、小写字母等效。 标识符中不能有空格

合法的标识符:

Decoder_1, FFT, Sig_N, Not_Ack, State0, Idle 非法的标识符:

_Decoder_1 2FFT Sig_#N

Not-Ack RyY_RST_ Data_ _BUS

- 15 -

搜索更多关于: eda1 的文档
eda1.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c30rli57uuj10e609mkl5_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top