VHDL数据类型vhdl语法_第1页
VHDL数据类型vhdl语法_第2页
VHDL数据类型vhdl语法_第3页
VHDL数据类型vhdl语法_第4页
VHDL数据类型vhdl语法_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、二、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)布尔代数(Boolean)型 ; (2)位(Bit); (3)标准逻辑(Std_log

2、ic);,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) - , -Dont Care(忽略) ),二、VHDL数据类型与数据对象,标

3、准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在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数据类型与数据对象,序列的分解与合成 Signal A: Std_Logic_Vector( 3 downto 0); Sign

4、al 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= 大于或等于 注:其中=操作符也用于表示信号的赋值操作。, Signal A: state;,二、VHDL数据类型与数据对象,(2) 数组类型 Type 数组名称 is Array(范围) of 数据类型; 例子: Type Byte is Array(7 downto 0) of Bit; Signal sdo: Byte;,二、V

5、HDL数据类型与数据对象,数据类型的转换 在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 将数据类型 UNSIGNED, SIGNED转换为INTEGER 类型. C

6、ONV_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) 常量 定义格式: Constant 常量名称: 数据类型 :=给定值; 常量通常来来定义延迟和功耗

7、等参数。 注意!常数定义的同时进行赋初值。 常数可以在实体说明、结构体描述中使用。,二、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; architecture m1 of exam1 is constant num : intege

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

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

10、td_logic_vector(3 Downto 0); S1 := “0000”;,二、VHDL数据类型与数据对象,信号和变量的比较,(1)信号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。,(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。,(3)信号为全局量,而变量只在定义它的域中才可见。因此,变量不能在两个进程之间传递信息。,(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。,(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号

11、不同:信号赋值为“=”,变量赋值为“:=”。,数据对象属性,(1)数值类属性: (数组类型的数据对象) 数值类属性有 left, right, low, high, length。 其中用符号 隔开对象名及其属性。 left表示数组的左边界; right表示数组的右边界; low表示数组的下边界; high表示数组的上边界; length表示数组的长度。,如: Signal A : std_logic_vector(7 downto 0); Signal B : std_logic_vector(0 to 3); 则这两个信号的属性值分别为: Aleft=7; Aright=0; Alow=0

12、; Ahigh=7; Alength=8; Bleft=0; Bright=3; Blow=0; Bhigh=3; Blength=4;,数据对象属性,(2)event属性: event属性,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。 利用此属性可识别时钟信号的变化情况,即时钟是否发生。,数据对象属性,例如:时钟边沿表示: signal clk : in std_logic; If( clkevent and clk=1 )then Q=Q+1; 则clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为

13、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; entity full_bit_adder is port(a,b,ci:in std_logic; y,cout:out std_logic); end full_bit_adder;,archit

14、ecture 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); end bh1;,architecture bh2 of full_bit_adder is begin y = a xor b xor ci; cout = (a and b) or (a and ci)

15、 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: 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 counter IS PORT( clk: in STD_LOGIC; q: buffer STD_LOGIC_vector(3 downto 0); END counter;,ARCHITECTURE a OF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论