模拟电子vhdl语言设计

上传人:第*** 文档编号:56445506 上传时间:2018-10-12 格式:PPT 页数:61 大小:173KB
返回 下载 相关 举报
模拟电子vhdl语言设计_第1页
第1页 / 共61页
模拟电子vhdl语言设计_第2页
第2页 / 共61页
模拟电子vhdl语言设计_第3页
第3页 / 共61页
模拟电子vhdl语言设计_第4页
第4页 / 共61页
模拟电子vhdl语言设计_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《模拟电子vhdl语言设计》由会员分享,可在线阅读,更多相关《模拟电子vhdl语言设计(61页珍藏版)》请在金锄头文库上搜索。

1、模拟电子VHDL语言设计 VHDL是使用广泛的硬件描述语言,该语言具有描述能力强,可读性好的优点,缺点是代码量大。初学者可以通过学习本章的语法与例题,入门该语言。 1 VHDL语言设计数字电路流程 VHDL设计数字电路的流程如下: (1)数字系统模块划分 (2)VHDL语言描述模块 (3)编译 (4)综合与适配设计 (5)仿真 (6)下载或配置,2 VHDL程序结构 每一个VHDL程序模块由实体和结构体组成,其中实体定义模块的输入和输出信号,而结构体是模块行为的详细描述。 VHDL语言支持层次设计,顶层模块中的结构体可以调用低层的模块,这种情况如图10-1所示。 在VHDL程序中,实体和结构体

2、是分开描述的。实体在前,结构体在后。,图10-1 VHDL中的层次设计,例1 实体和结构体示意程序,用VHDL描述2输入端与门电路。 VHDL程序模块如下: library ieee; -使用的库 use ieee.std_logic_1164.all;-使用的包 entity and_ent is 名为and_ent的实体 port(a,b: in std_logic; -输入信号为a,b y: out std_logic); -输出信号为y end and_ent; architecture and_str of and_ent is 实体and_ent的结构体,该结构体名称为and_st

3、r begin y=a and b; - 逻辑表达式 end and_str;,在VHDL程序中,忽略空格和空行,注释语句前加前导符号“-”。标识符由字符开始,后加字符、数字和下划线,例如,X、Y、Z、aa_bb就是标识符。标识符不能是VHDL保留字,例如,entity、port、is、in、out、end、architecture、begin、when、else、not等都是VHDL的保留字。标识符和保留字可以大写,也可以小写。,1. 实体 实体的声明用于定义模块的外部端口,实体的声明格式如下: entity 实体名 is port(端口名,端口名, :端口模式 端口数据类型; 端口名,端口

4、名, :端口模式 端口数据类型; 端口名,端口名, :端口模式 端口数据类型); end 实体名;,(3)端口模式 端口模式就是端口方向说明。需要如下关键字说明端口的方向: 关键字 in:信号通过该端口进入实体。 关键字 out:从实体输出的信号。 关键字 buffer:该模式的端口可以输出信号。 关键字 inout: 双方向端口,该该端口的信号可以进入实体或从实体输出。 (4)端口数据类型 端口的数据类型可以是VHDL内部定义的,或是自定义的。在书写过程中,注意最后一个端口数据类型后没有分号,分号在括号外。,图10-2 信号模式的图形表示,2. 结构体 实体中定义端口名、端口的模式和类型,而

5、结构体是模块功能的说明,或者说是端口之间行为描述。 结构体的格式如下: architecture 结构体名 of 实体名 is 定义信号 定义常数 定义函数 声明元件 等等 begin 并发叙述 并发叙述 end 结构体名;,3 信号、变量和常数的数据类型 在VHDL描述中,所有信号、变量和常数必须用数据类型说明它们的取值范围或取值集合,对于不同的数据类型,使用不同的运算符。 常数是VHDL程序设计中常使用的,VHDL要求所定义的常数数据类型必须与表达式的数据类型一致,在实体、结构体、进程等描述中都可以定义常数,所定义常数的使用范围取决于常数定义的位置,例如在结构体中定义的常数,只能在该结构体

6、中使用。 变量是一个局部量,只能在进程中使用,如果要将变量所携带的信息传出进程,需要将变量所携带信息赋予与变量数据类型相同的信号。,1. 预定义类型 预定义类型就是在VHDL库中已定义的类型。VHDL库中的预定义类型有: (1)逻辑类型 boolean 布尔类型,定义为:type boolean is (false,true),该信号有两个值,真(true)和假(false)。综合工具将false看成逻辑0,将true看成逻辑1。 bit 位类型,定义为:type bit is (0,1),该信号只有两个值,0和1。综合工具将0看成逻辑0,将1看成逻辑1。 bit_vector 位矢量类型,多

7、个位类型组成的一个序列。,std_logic 标准逻辑类型,表10-1是标准的预定义逻辑类型std_logic,它是IEEE 1164标准包的一部分,注意该逻辑类型不仅有逻辑值0和1,还有其它逻辑值。 std_logic_vector 标准逻辑矢量。它是多个标准逻辑类型组成的一个序列。常用于描述多根信号线。,例如,std_logic_vector(0 to 7),表示升序排列的8根线;std_logic_vector (3 downto 0),表示降序排列的4根线。,(2)数值类型 在VHDL的程序中,可以将信号定义成数值,非常方便数值方面的运算。 integer 整数类型,定义为type i

8、nteger is range 2147483647 to +2147483647,相当于32位二进制数。 unsigned 无符号整数类型,该类型和标准逻辑矢量(std_logic_vector)相似,定义时必须指明这个无符号整数的位数。无符号整数类型除了可以进行数值运算外,还可以与标准逻辑矢量(std_logic_vector)相互转换。 通常VHDL综合器不支持实数。 (3)其它类型 character 字符类型包含ISO规定的8位字符,前128个为ASC字符。字符在VHDL语言中用A,a,1。字符包括AZ,az,09,空格及一些特殊符号。 string 字符串类型,是用双引号括起来的一

9、串字符,例如“hdl”。,2. 无符号整数与标准逻辑矢量之间的转换 无符号整数与标准逻辑矢量的转换如下: d=std_logic_vector(c); -无符号数c转逻辑矢量d,其中c是2位无符号数,d是2位逻辑矢量 b=unsigned(a); -逻辑矢量a转无符号数b,其中a是逻辑矢量,b是2位无符号数 f=c+c; -无符号数运算得到逻辑矢量,其中c是2位无符号数,f是2位逻辑矢量 -m=a+a; -逻辑矢量不能直接相加,其中m是2位无符号数,a是逻辑矢量 m=unsigned(a)+unsigned(a); -逻辑矢量转换成无符号数后可以加法运算 支持有符号数和无符号数运算的数据类型:

10、 (1)由std_logic_1164包、std_logic_signed包或是std_logic_unsigned包定义的std_logic类型和std_logic_vector类型。 (2)由std_logic_arith包中定义的数据类型和算法。 (3)使用确定范围的整数,如果是负整数,则综合工具使用2的补码表示,整数范围小于32位。 (4)由numeric_std或numeric_bit包定义的有符号和无符号数据。,3. 自定义类型 在VHDL中常用的自定义类型是枚举(enumerated)类型,枚举类型的定义格式如下: type 类型名 is 值列表 这里type是类型声明的关键字。

11、类型名为自定义标识符,值列表是逗号分开的所有可能取值,例如,type motor_state is (start,run,stop); 表示名为motor_state枚举数据类型的取值为start,run,stop。,4. 定义信号、变量与常数的例子 (1)在结构体中定义信号的例子 signal my_sig1: std_logic; -定义信号my_sig1为标准逻辑 signal my_sig2: integer range 0 to 15; -定义信号my_sig2为整数 signal my_sig: std_logic_vector(0 to 7); -定义信号my_sig为8位标准逻

12、辑矢量 -下脚标排序为0,1,27 signal my_sig4: unsigned(3 downto 0); -定义信号my_sig4为无符号数(4位二进制) -下脚标排序为3,2,1,0 type states is (s0,s1,s2,s3); -定义名为states的枚举类型,取值为s0,s1,s2和s3 signal current_state: states; -定义信号current_states的数据类型为枚举数据类型states,(2)在进程中定义变量的例子 veriable my_var1 :std_logic ; -定义名为my_var1的变量类型为std_logic类型

13、 variable my_var2 : std_logic_vector (1 to 8); -定义名为my_var2变量类型为std_logic_vector(1 to 8); (3)定义常数的例子 constant BUS: integer :=16; -定义常数BUS,并赋予初值16,4 VHDL中的运算符 VHDL中有3类基本运算符:逻辑、关系和算术,另外还有支持不同数据类型运算的重定义操作符。 1. 用于数值类型的运算符,2. 用于逻辑类型的运算符,3. 关系运算符,4. 并置运算,5. 重定义运算符 程序包std_logic_unsigned支持运算符重定义。所谓运算符重新定义就是

14、使运算符适合不同数据类型之间的运算。 该程序包对一些运算符进行重新定义,使其对整数、标准逻辑和标准逻辑矢量之间可以进行运算, 例如,如果q的数据类型是标准逻辑矢量,则表达式q=q+1中的加号就是重定义运算符,使标准逻辑矢量与整数之间的加法成为可能,6 库和包 在VHDL中库分为两类,一类是设计库,一类是资源库。设计库对任何项目都是默认的、不需要进行声明;而资源库中存放的是常规元件和标准模块,在使用前,需要先声明。 资源库(Library)是用来存储和放置设计资源(函数、过程、元件、信号、常数等的程序)的地方,库中的资源可以被调用。资源库调用的方法是在一个VHDL模块的开始,对使用的库进行声明,

15、声明的格式是: library 库名; 例如,library ieee; 就是声明ieee库,ieee库是IEEE组织认可的、存放IEEE 1076标准设计资源库。,资源库中存放程序包,不同的库存放不同的程序包。 如果在所设计的模块中使用某个库中的某个包的某个对象,就必须对该包进行声明,声明的格式如下: use 库名,库名.包名.对象名; 如果对象名的位置用“all”代替,则表明使用包中的所有对象。 例如,use ieee.std_logic_1164.all; -声明ieee库中的std_logic_1164包中的所有对象,除了IEEE组织认可的ieee资源库外,各个芯片生产厂家都开发了自己

16、的资源库,例如, Mentoe Graphics公司 mgc_port able库 Altera公司 prim库、mf库、Mega_lpm库和edif库 Synopsys公司 synopsys库,一般的综合工具支持std和ieee标准库,其中ieee库是最常用的资源库,该库中包含最常用的程序包std_logic_1164程序包。各个库中包的特点如表10-3所示。,脉冲的上升沿(rising_edge)和下降沿(falling_edge)也是在std_logic_1164包中定义的。 如果使用std库支持的数据类型和运算,则不用声明,因为该库是VHDL的内建库。 如下是一个与门的例子,该例中就没有声明库和包,因为只用到std库支持的数据类型与运算。,例3 不需要声明库的例子 entity std is -实体前没有库声明 port (a,b : in bit; y : out bit); end; architecture kk of std is begin y=a and b; end kk;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 初中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号