VHDL数据类型(vhdl语法)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

‘-’ , --Don’t Care(忽略)
)
精品课
二、VHDL数据类型与数据对象
逻辑序列 位序列 (Bit_Vector)
标准逻辑序列 (Std_Logic_Vector)
精品课
二、VHDL数据类型与数据对象
序列的使用 Signal data: Std_Logic_Vector( 7 downto
INTEGER 类型. CONV_UNSIGNED
将数据类型INTEGER, SIGNED转换为UNSIGNED 类型. CONV_SIGNED
将数据类型INTEGER, UNSIGNED转换为 SIGNED类型. CONV_STD_LOGIC_VECTOR
将数据类型INTEGER, UNSIGNED, SIGNED, STD_LOGIC转换为STD_LOGIC_VECTOR 类型.

如 果 a=‘1’ ,
b=‘0’

c=‘1’ ,
则 vabc=“101” 。
精品课
二、VHDL数据类型与数据对象
用户自定义数据类型: (1) 列举数据类型 Type 列举名称 is (元素1,元素2,…)
例子: Type state is(S0,S1,S2,S3); Signal A: state;
精品课
数据对象属性
如:
Signal A : std_logic_vector(7 downto 0);
Signal B : std_logic_vector(0 to 3);
则这两个信号的属性值分别为:
A’left=7; A’low=0;
A’right=0;
A’high=7; A’length=8;
0); C<= A( 2 downto 1); B<= A(3) & D & ‘1’;
精品课
二、VHDL数据类型与数据对象
数值类型 (1)整数
Type Integer Is Range 231-1
-231 ~
限定整数取值范围的方法: Signal A: Integer; Signal B: Integer Range 0 to 7; Signal C: Integer Range -1 to 1;
精品课
数据对象属性
(1)数值类属性: (数组类型的数据对象) 数值类属性有
’left, ’right, ’low, ’high, ’length。 其中用符号 ’ 隔开对象名及其属性。
left表示数组的左边界; right表示数组的右边界; low表示数组的下边界; high表示数组的上边界; length表示数组的长度。
B’left=0; B’low=0;
B’right=3;
B’high=3; B’length=4;
精品课
数据对象属性
(2)’event属性:
’event属性,它的值为布尔型,如果刚好 有事件发生在该属性所附着的信号上(即信号 有变化),则其取值为True,否则为False。 利用此属性可识别时钟信号的变化情况,即时 钟是否发生。
精品课
例2:设计组合逻辑电路 设计一个1bit全加器。
输入 X,Y,CI 输出 Z,CO
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
精品课
二、VHDL数据类型与数据对象
(2) 数组类型
Type 数组名称 is Array(范围) of 数据类型;
例子: Type Byte is Array(7 downto 0) of
Bit; Signal sdo: Byte;
精品课
二、VHDL数据类型与数据对象
数据类型的转换
在VHDL语言里,不同类型的数据信号之间 不能互相赋值。当需要不同类型数据之间 传递信息时,就需要类型转换函数将其中 的一种类型数据转换为另一中数据类型后, 再进行信号的传递。
精品课
二、VHDL数据类型与数据对象
数据对象
常量
(Data Objects) 信 号
变量
精品课
二、VHDL数据类型与数据对象
(1) 常量
定义格式: Constant 常量名称: 数据类型 :=给定值;
常量通常来来定义延迟和功耗等参数。 注意!常数定义的同时进行赋初值。 常数可以在实体说明、结构体描述中使用。
当中。
精品课
二、VHDL数据类型与数据对象
• “变量”数据对象,它用于对中间数据的临时存 储,并不一定代表电路的某一组件。
• 变量为局部量。
• 仅限于进程(Process)或子程序中使用。
• 变量赋值的语法格式为:目标变量:=表达式; 如:Variable S1 : Std_logic_vector(3 Downto 0);
精品课
二、VHDL数据类型与数据对象
例如: Signal Y : Std_logic_vector(7 downto 0); Signal X : Integer range 0 to 255; Y<= CONV_STD_LOGIC_VECTOR(X,8);
精品课
二、VHDL数据类型与数据对象
CONV_INTEGER 将数据类型 UNSIGNED, SIGNED转换为
((not a)and (b) and (not ci)) or
((a)and (not b)and(not ci)) or
((a) and (b)and(ci));
cout <= (b and ci) or (a and ci) or
(a and
b);
end bh1;
architecture bh2 of full_bit_adder is begin
type BOOLEAN is (FALSE, TRUE) ; type BIT is (‘0’, ‘1’);
精品课
二、VHDL数据类型与数据对象
➢ 标准逻辑类型
Type Std_Logic Is
标准逻辑类型对数
( ‘U’, --Undefined(未初始化) 字逻辑电路的逻辑
‘X’ , --Forcing Unknown(强未知特)性描述更加完整,
精品课
二、VHDL数据类型与数据对象
VHDL语言中的基本数据类型
布尔代数(Boolean)
逻辑类型 位 (Bit)
标准逻辑 (Std_Logic)
数值类型
整数 (Integer) 实数 (Real)
精品课
二、VHDL数据类型与数据对象
逻辑数据类型 (1)布尔代数(Boolean)型 ; (2)位(Bit); (3)标准逻辑(Std_logic);
entity full_bit_adder is port(a,b,ci:in std_logic;
y,cout:out std_logic); end full_bit_adder;
architecture bh1 of full_bit_adder is
begin
y <= ((not a)and (not b)and ci) or
end exam1; architecture m1 of exam1 is constant num : integer := 6; begin op <= ip + num; end m1;
精品课
二、VHDL数据类型与数据对象
(2) 信号 定义格式 Signal 信号名称: 数据类型 [:=初始值]; 信号相当于电路内部元件之间的物理连线,因 此信号的赋值有一定的延迟时间.
精品课
二、VHDL数据类型与数据对象
无符号数 Unsigned 与标准逻辑序列相似,声明时必须指明其 位数。 Signal A : Unsigned(3 downto 0); Signal B : Unsigned( 7 downto 0); 注意: 必须使用downto形式。
精品课
二、VHDL数据类型与数据对象
精品课
二、VHDL数据类型与数据对象
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; --必需定义+ entity exam1 is
port (ip : in std_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0));
(3)信号为全局量,而变量只在定义它的域中才可见。因此, 变量不能在两个进程之间传递信息。
(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起 作用;而变量则不同,每次赋值都会改变它的值。
(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用, 而变量赋值是立即进行的。而且赋值符号不同:信号赋值为 “<=”,变量赋值为“:=”。
0); Signal addr: Bit_Vector ( 0 to 3); 序列的范围大小声明方式: To, Downto
精品课
二、VHDL数据类型与数据对象
序列的分解与合成 Signal A: Std_Logic_Vector( 3 downto
0); Signal B: Std_Logic_Vector( 0 to 3); Signal C: Std_Logic_Vector( 0 to 1); Signal D: Std_Logic_Vector( 1 downto
S1 := “0000”;
注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。 建议变量对象定义后再进行赋值。
精品课
信号和变量的比较
(1)信号和变量的对应关系不同:信号代表电路内部信号或 连接线路;而变量则不是。
(2)信号和变量声明的位置不同:信号声明在子程序、进程的外 部;而变量声明在子程序、进程的内部。
(2)实数 Type Real Is Range -1.7E38 to
1.7E38;
实数类型的表示可用科学计数形式或者带小 数点的形式。
精品课
二、VHDL数据类型与数据对象
VHDL中的运算符
逻辑运算:
and

辑与
or
逻辑或
nand 与非
nor


xor


xnor 同或
算术运算符 :
+加 -减 *乘 /除 ** 乘方 mod 求模 rem 求余 abs 求绝对值
精品课
二、VHDL数据类型与数据对象
“信号”数据对象,代表电路内部信号或连接线路, 其在元件之间起互连作用。
信号为全局量。 在实体说明、结构体描述和程序包说明中使用。
信号赋值的语法格式为:信号名 <= 表达式; 如:Signal S1 : Std_logic_vector(3 Downto 0);
精品课
数据对象属性
例如:时钟边沿表示: signal clk : in std_logic;
If( clk’event and clk=’1’ )then Q<=Q+1; 则clk’event and clk=’1’表示时钟的上升 沿。即时钟变化了,且其值为1。 clk’event and clk=’0’表示时钟的下 降沿。即时钟变化了,且其值为0。
精品课
二、VHDL数据类型与数据对象
关系运算符:
= 等于 /= 不等于 < 小于 <= 小于或等于 > 大于 >= 大于或等于
注:其中‘<=’操作符 也用于表示信号的赋值 操作。
& 连接符,将两个数 据对象或矢量连接成维 数更大的矢量,它可给 代码书写带来方便。
例如: vabc=a & b & c
‘0’ ‘1’ ‘Z’
, , ,
--Forcing 0(强0) --Forcing 1(强1) --Hign Impedance(高阻)
真实,因此在VHDL 程序中,对逻辑信
‘W’, --Weak Unknown(弱未知) 号的定义通常采用
‘L’ , --Weak 0(弱0)
标准逻辑类型.
‘H’ , --Weak 1(弱1)
FPGA应用技术
VHDL数据类型
精品课
二、VHDL数据类型与数据对象
在VHDL程序中,我们经常会遇到这样的语句:
Signal Variable
downto 0); Constant
A: B:
std_logic; std_log来自c_vector(7C:
integer;
数据对象类型 数据对象名 数据类型
S1 <= “0000”;
注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。 建议信号对象定义后再进行赋值。
精品课
二、VHDL数据类型与数据对象
(3)变量
定义格式 Variable 变量名称: 数据类型 [:=初始值];
变量只能用于“进程” 之中,变量的赋值 是立即生效的,常用于高层次抽象的算法描 述
相关文档
最新文档