VHDL数据类型(vhdl语法)【行业信息】.ppt

上传人:rrsccc 文档编号:10045588 上传时间:2021-04-13 格式:PPT 页数:41 大小:452.50KB
返回 下载 相关 举报
VHDL数据类型(vhdl语法)【行业信息】.ppt_第1页
第1页 / 共41页
VHDL数据类型(vhdl语法)【行业信息】.ppt_第2页
第2页 / 共41页
VHDL数据类型(vhdl语法)【行业信息】.ppt_第3页
第3页 / 共41页
VHDL数据类型(vhdl语法)【行业信息】.ppt_第4页
第4页 / 共41页
VHDL数据类型(vhdl语法)【行业信息】.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《VHDL数据类型(vhdl语法)【行业信息】.ppt》由会员分享,可在线阅读,更多相关《VHDL数据类型(vhdl语法)【行业信息】.ppt(41页珍藏版)》请在三一文库上搜索。

1、VHDL数据类型,FPGA应用技术,学习课件,二、VHDL数据类型与数据对象,在VHDL程序中,我们经常会遇到这样的语句: Signal A : std_logic; Variable B : std_logic_vector(7 downto 0); Constant C : integer;,数据对象类型,数据类型,数据对象名,学习课件,VHDL语言中的基本数据类型,逻辑类型,数值类型,布尔代数(Boolean),位 (Bit),标准逻辑 (Std_Logic),整数 (Integer),实数 (Real),二、VHDL数据类型与数据对象,学习课件,逻辑数据类型,(1)布尔代数(Boole

2、an)型 ; (2)位(Bit); (3)标准逻辑(Std_logic);,type BIT is (0, 1);,type BOOLEAN is (FALSE, TRUE) ;,二、VHDL数据类型与数据对象,学习课件,标准逻辑类型 Type Std_Logic Is ( U, -Undefined(未初始化) X , -Forcing Unknown(强未知) 0 , -Forcing 0(强0) 1 , -Forcing 1(强1) Z , -Hign Impedance(高阻) W, -Weak Unknown(弱未知) L , -Weak 0(弱0) H , -Weak 1(弱1)

3、- , -Dont Care(忽略) ),二、VHDL数据类型与数据对象,标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型,学习课件,逻辑序列,位序列 (Bit_Vector),标准逻辑序列 (Std_Logic_Vector),二、VHDL数据类型与数据对象,学习课件,Signal data: Std_Logic_Vector( 7 downto 0); Signal addr: Bit_Vector ( 0 to 3);,序列的范围大小声明方式:To, Downto,序列的使用,二、VHDL数据类型与数据对象,学习课件,序列

4、的分解与合成 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 0); C= A( 2 downto 1); B= A(3) ,二、VHDL数据类型与数据对象,学习课件,数值类型 (1)整数 Type Integer Is Range -231 231-1 限定整数取值范围的方法: Signal A: Integer; Signal B: In

5、teger Range 0 to 7; Signal C: Integer Range -1 to 1;,二、VHDL数据类型与数据对象,学习课件,无符号数 Unsigned 与标准逻辑序列相似,声明时必须指明其 位数。 Signal A : Unsigned(3 downto 0); Signal B : Unsigned( 7 downto 0); 注意: 必须使用downto形式。,二、VHDL数据类型与数据对象,学习课件,(2)实数 Type Real Is Range -1.7E38 to 1.7E38; 实数类型的表示可用科学计数形式或者带小数点的形式。,二、VHDL数据类型与数据

6、对象,学习课件,VHDL中的运算符,二、VHDL数据类型与数据对象,算术运算符: +加-减*乘/除*乘方mod求模 rem求余 abs求绝对值,逻辑运算: and 逻辑与or逻辑或nand与非nor 或非xor 异或xnor同或not 逻辑非,学习课件,关系运算符: =等于/=不等于大于=大于或等于 注:其中=操作符也用于表示信号的赋值操作。, Signal A: state;,二、VHDL数据类型与数据对象,学习课件,(2) 数组类型 Type 数组名称 is Array(范围) of 数据类型; 例子: Type Byte is Array(7 downto 0) of Bit; Sign

7、al sdo: Byte;,二、VHDL数据类型与数据对象,学习课件,数据类型的转换 在VHDL语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就需要类型转换函数将其中的一种类型数据转换为另一中数据类型后,再进行信号的传递。,二、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 将数据类型

8、UNSIGNED, SIGNED转换为INTEGER 类型. CONV_UNSIGNED 将数据类型INTEGER, SIGNED转换为UNSIGNED 类型. CONV_SIGNED 将数据类型INTEGER, UNSIGNED转换为SIGNED类型. CONV_STD_LOGIC_VECTOR 将数据类型INTEGER, UNSIGNED, SIGNED, STD_LOGIC转换为STD_LOGIC_VECTOR 类型.,二、VHDL数据类型与数据对象,学习课件,数据对象,常 量,信 号,变 量,(Data Objects),二、VHDL数据类型与数据对象,学习课件,(1) 常量 定义格式

9、: Constant 常量名称: 数据类型 :=给定值; 常量通常来来定义延迟和功耗等参数。注意!常数定义的同时进行赋初值。常数可以在实体说明、结构体描述中使用。,二、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); end exam1; arch

10、itecture m1 of exam1 is constant num : integer := 6; begin op = ip + num; end m1;,二、VHDL数据类型与数据对象,学习课件,(2) 信号 定义格式 Signal 信号名称: 数据类型 :=初始值; 信号相当于电路内部元件之间的物理连线,因 此信号的赋值有一定的延迟时间.,二、VHDL数据类型与数据对象,学习课件,“信号”数据对象,代表电路内部信号或连接线路,其在元件之间起互连作用。,注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。 建议信号对象定义后再进行赋值。,信号为全局量。,在实体说明、结构体描述和程

11、序包说明中使用。,信号赋值的语法格式为:信号名 = 表达式; 如:Signal S1 : Std_logic_vector(3 Downto 0); S1 = “0000”;,二、VHDL数据类型与数据对象,学习课件,(3)变量 定义格式 Variable 变量名称: 数据类型 :=初始值; 变量只能用于“进程” 之中,变量的赋值是立即生效的,常用于高层次抽象的算法描述 当中。,二、VHDL数据类型与数据对象,学习课件,“变量”数据对象,它用于对中间数据的临时存储,并不一定代表电路的某一组件。,注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。 建议变量对象定义后再进行赋值。,变量为局部

12、量。,仅限于进程(Process)或子程序中使用。,变量赋值的语法格式为:目标变量:=表达式; 如:Variable S1 : Std_logic_vector(3 Downto 0); S1 := “0000”;,二、VHDL数据类型与数据对象,学习课件,信号和变量的比较,(1)信号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。,(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。,(3)信号为全局量,而变量只在定义它的域中才可见。因此,变量不能在两个进程之间传递信息。,(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起

13、作用;而变量则不同,每次赋值都会改变它的值。,(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为“=”,变量赋值为“:=”。,学习课件,数据对象属性,(1)数值类属性: (数组类型的数据对象) 数值类属性有 left, right, low, high, length。 其中用符号 隔开对象名及其属性。 left表示数组的左边界; right表示数组的右边界; low表示数组的下边界; high表示数组的上边界; length表示数组的长度。,学习课件,如: Signal A : std_logic_vector(7 downto 0

14、); Signal B : std_logic_vector(0 to 3); 则这两个信号的属性值分别为: Aleft=7; Aright=0; Alow=0; Ahigh=7; Alength=8; Bleft=0; Bright=3; Blow=0; Bhigh=3; Blength=4;,数据对象属性,学习课件,(2)event属性: event属性,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。 利用此属性可识别时钟信号的变化情况,即时钟是否发生。,数据对象属性,学习课件,例如:时钟边沿表示:signal clk :

15、in std_logic; If( clkevent and clk=1 )then Q=Q+1;则clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为1。 clkevent and clk=0表示时钟的下降沿。即时钟变化了,且其值为0。,数据对象属性,学习课件,例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; en

16、tity 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 (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);

17、end bh1;,学习课件,architecture bh2 of full_bit_adder is begin y = a xor b xor ci; cout = (a and b) or (a and ci) or (b and ci); end bh2; configuration con1 of full_bit_adder is for bh2 end for; end con1;,学习课件,(1)触发器设计,D Q CP,D触发器,学习课件,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff IS PORT( cp,d:

18、IN STD_LOGIC; q: OUT STD_LOGIC); END dff;,学习课件,ARCHITECTURE a OF dff IS BEGIN process(cp) begin if cpevent and cp=1 then q=d; end if; end process; END a;,学习课件,(3) 计数器设计,计 数 器,CLK,Q,学习课件,LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; USE ieee.std_logic_arith.ALL; ENTITY c

19、ounter IS PORT( clk: in STD_LOGIC; q: buffer STD_LOGIC_vector(3 downto 0); END counter;,学习课件,ARCHITECTURE a OF counter IS BEGIN process(clk) begin if (clkevent and clk=1) then q=q+1; end if; end process; END a;,无控制端四位加计数器,学习课件,ARCHITECTURE a OF counter IS BEGIN process(clk) begin if (clkevent and clk=1) then if(q0); end if; end if; end process; END a;,无控制端10进制计数器,学习课件,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1