第7章VHDL要素.ppt
《第7章VHDL要素.ppt》由会员分享,可在线阅读,更多相关《第7章VHDL要素.ppt(59页珍藏版)》请在麦多课文档分享上搜索。
1、第7章 VHDL要素,7.1 算术操作符与优先级,与传统的程序语言一样,VHDL表达式中的基本元素也是由不同类型的运算符相连而成的。这里所说的基本元素称为操作数(Operands),运算符称为操作符(Operators)。,VHDL操作符可分为逻辑操作符(参5.3.3)、关系操作符(参5.1.3)、算术操作符、符号操作符和重载操作符(Overloading Operator)。,7.1.1 算术操作符Arithmetic Operator,【例7-1】用SLL完成3-8译码器的设计,ENTITY decoder3to8 ISport (input: IN INTEGER RANGE 0 TO
2、7;output: OUT BIT_VECTOR ( 7 DOWNTO 0); END decoder3to8;ARCHITECTURE behave OF decoder3to8 ISBEGINoutput=”00000001”SLL input;-被移位部分是常数! END behave;,【例7-2】乘方和取绝对值语法例,SIGNAL a,b:INTEGER RANGE -8 to 7; SIGNAL c:INTEGER RANGE 0 to 5; SIGNAL d:INTEGER RANGE 0 to 3;a=ABS(b);c=2*d;,7.1.2 VHDL操作符优先级,在编程时可充分
3、利用括号,可有效避免错误。,7.2 BUFFER类型与操作符重载函数,【例6-3】4位计数器设计。 题目分析: 计数器:对时钟信号CLK进行计数,即在CLK上升沿时输出值Q=Q+1; 端口设置:CLK为IN BIT,Q=Q+1要实现将输出到端口的值反馈回来加1,只有采用BUFFER端口类型;要实现算术运算,数据类型须采用INTEGER。 注意:表面上BUFFER具有双向端口INOUT的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反馈回来。,7.2.1 BUFFER类型,ENTITY CNT4 IS PORT (CLK: IN BIT; Q :BUFFER INTEGER RAN
4、GE(15 DOWNTO 0); END CNT4;,ARCHITECTURE bhv OF CNT4 ISBEGINPROCESS(CLK)BEGINIF CLKEVENT AND CLK=1 THENQ=Q十1;END IF;END PROCESS; END bhv;,BUFFEF类型在多级设计中不便于综合,常用OUT类型。,ENTITY CNT4 1SPORT(CLK:IN BIT;Q :OUT INTEGER RANGE(15 DOWNTO 0); END; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1: INTEGER RANGE(15 DOWNTO 0
5、); BEGIN PROCESS (CLK)BEGINIF CLKEVENT AND CLK=l THENQ1=Q1+1;END IF;Q=Q1;END PROCESS; END bhv;,- Q模式OUT,不能反馈,设中间信号对应Q,7.2.2 操作符重载函数,【例7-5】带有异步清零、进位输入/输出的4位计数器。 题目分析: 计数器概念同上即在CLK上升沿时输出值Q=Q+1; 异步清零:只要清零信号RES有效,Q=0; 进位输入:在进位输入Ci=1时,才对时钟信号CLK进行计数; 进位输出:Q=1111时来个脉冲本计数器清零,进位输出Co=1,使下级计数器加1计数。 端口设置:我们在5.3
6、.2中介绍,实际设计中尽量采用STD_LOGIC类型,故端口定义见程序。现在出现一个问题,算术运算只能用于整型,不能用于STD_LOGIC类型。要解决此问题,需要用到操作符重载函数,此函数在ieee.std_logic_unsigned程序包中定义,用户可不必自己设计。,LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;ENTITY cntm16 IS GENERIC (cntwidth : integer : = 4 ); PORT( ci : IN std_logic;res : IN st
7、d_logic; clk : IN std_logic;co : OUT std_logic;q : BUFFER std_logic_vector ( cntwidth-1 DOWNTO 0 ) END cntm16;,-打开操作符重载函数,ARCHITECTURE behave OF cntm16 IS BEGINco1WHEN (q =“1111”AND ci1) ELSE0;PROCESS ( clk , res)BEGINIF (nreset0) THENq(others0); ELSIF(clkevent AND clk=1) THEN IF (ci1 ) THEN qq+1;EN
8、D IF;END IF; -end if_reset END PROCESS; END behave;,7.3 库、程序包,7.3.1 库(Library) 库用于存放预先编译好的程序包(package)和数据集合体,可以用USE语句调用库中不同的程序包。它是为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,而将一些有用的信息汇集在一个或几个库中以供调用。这些信息可以是预先定义好的数据类型、子程序等设计单元的集合体(程序包),或预先设计好的各种设计实体(元件库程序包)。因此,可以把库看成是一种用来存储预先完成的程序包、数据集合体和元件的仓库。 库的说明格式:LIBRARY 库名; 打
9、开程序包的格式:USE 库名程序包名项目名;-开放指定库中的特定程序包内所选定的项目USE 库名程序包名ALL;-开放指定库中的特定程序包内所有的内容 库的说明语句总是放在实体前面。,LIBRARY ieee; -打开IEEE库 USE ieee.std_logic_1164.ALL; -调用std_logic_1164程序包中的std_logic数据类型定义USE ieee.std_logic_unsigned.ALL; -调用std_logic_unsigned中的操作符重载函数,库分为5种:IEEE库STD库ASIC库用户定义的库及WORK库VITAL库,1、IEEE库,IEEE库是VH
10、DL设计中最为常见的库,它包含有IEEE标准的程序包和其他一些支持工业标准的程序包。 一般基于FPGACPLD的开发,IEEE库中的四个程序包STD_LOGIC_1164、STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_ UNSIGNED已足够使用。 注意,在IEEE库中符合IEEE标准的程序包并非符合VHDL语言标准,如STD_LOGIC_1164程序包。 由于IEEE库不属于VHDL标准库,所以在使用其库中内容前,必须事先给予声明。即: LIBRARY ieee; USE ieee.std_logic_1164.ALL;,2、STD库,VHDL语言标准
11、定义了两个标准程序包,即STANDARD和TEXTIO程序包(文件输入输出程序包), STD库符合VHDL标准,在应用中不必显式表达,即如下语句是不必要的: LIBRARY STD; USE STD.STANDARD.ALL;,表7-1 IEEE和STD库中程序包内容,3、WORK库,WORK库是用户的VHDL设计的现行工作库,即用户自己建的目录,存放用户设计和定义的些设计单元和程序包。 自动满足VHDL语言标准,也不必以显式说明。 *4、VITAL库 使用VITAL库,可以提高VHDL门级时序模拟的精度,因而只在VHDL仿真器中使用。 实际上,由于各FPGACPLD生产厂商的适配工具都能为各
12、自的芯片生成带时序信息的VHDL门级网表,用VHDL仿真器仿真该网表可以得到精确的时序仿真结果,因此FPGACPLD设计开发过程中,一股并不需要VITAL库中的程序包。,6.3.2 程序包Package,在VHDL中,常量、数据类型、子程序可以在实体说明部分、结构体部分中加于说明,且实体说明部分所定义的常量、数据类型、子程序在相应的结构体中是可见的(即可以被调用),但对于其他的设计实体是不可见的。 为了使已定义的常数、数据类型、元件调用说明以及子程序能被更多其他的设计实体方便地访问和共享,可以将它们收集在一个VHDL程序包中。多个程序包可以并入一个VHDL库中,使之适用于更一般的访问和调用范围
13、。这一点对于大系统开发,多个或多组开发人员同步工作显得尤为重要。,程序包的组成,程序包由包头(程序包的声明部分)和包体(程序包的内容部分)两部分组成。 包头以PACKAGE开头,保存公用信息,包括常量、数据类型定义、信号声明、子程序声明及元件声明等。 包体以PACKAGE BODY开头,保存专用信息,包括局部数据类型、子程序实现(子程序体)等。当包头包括子程序声明时,包体必须定义子程序体。 程序包结构中,包体并非总是必须的。程序包首可以独立定义和使用。一个完整的程序包中,包头名与包体名同名。,程序包的一般格式: 程序包头: PACKAGE程序包名 IS 包头说明语句;END 程序包名;程序包体
14、: PACKAGE BODY程序包名 IS 包体说明语句;END 程序包名; 包头说明语句的可能情况:USE语句(打开其他程序包)、数据类型定义、子类型定义、常量、信号定义、子程序声明、元件声明等。 程序包包体说明语句中包含着包头中列举的子程序和元件的具体实现,即程序体,而包头则仅仅给出一个子程序名或元件的元件名和端口。,【例7-5】程序包包头,PACKAGE codehead IS -程序包包头开始TYPE byte IS RANGE 0 TO 255; -定义数据类型byteSUBTYPE subbyte IS byte RANGE 0 TO 15; -定义子类型CONSTANT byte
15、_ff :byte:=255; -定义16进制FF常数SIGNAL addend:nibble; -定义信号addendCOMPONENT byte_adder -声明元件,无IS,无“;”PORT(a,b:IN byte; -同端口定义c:OUT byte ;overflow;OUT BOOLEAN);END COMPONENT;FUNCTION my_function(a:IN byte) return byte; -定义函数END codehead; -程序包包头结束,由于元件和函数必须有具体的内容,这些内容要安排在程序包体中。 如果要使用这个程序包中的所有定义,可利用USE语句: US
16、E WORK.codehead.ALL;,常用的预定义的程序包有:,1、 STD_LOGIC_1164程序包: 是最常用的程序包。定义了满足工业标准的两个数据类型STD_LOGIC和STD_ LOGIC_VECTOR。2、STD_LOGIC_ARITH程序包: IEEE库中,此程序包在STD_LOGIC_1164程序包的基础上扩展了三个数据类型UNSIGNED、SIGNED和SMALL_INT,井为其定义了相关的算术运算符和转换函数。,3、STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包: 在IEEE库中。这些程序包重载了可用于INTEGER型及STD_LOGIC和
17、STD_LOGIC_VECTOR型混合运算的运算符,并定义丁一个由STD_LOGIC_VECTOR型到INTEGER型的转换函数。这两个程序包的区别是,STD_LOGIC_SIGNED中定义的运算符考虑到了符号,是有符号数的运算。 4、STANDARD和TEXTIO程序包。是STD库中的预编译程序包。STANDARD程序包中定义了许多基本的数据类型、子类型和函数。TEXTIO程序包定义了支持文件操作的许多类型和子程序。在使用本程序包之前,需加语句USE STD.TEXTIO.ALL。TEXTIO程序包仅供仿真器使用。,7.4 子程序SUBPROGRAM,子程序是一个VHDL程序模块,与其他软件
18、语言程序中的子程序的目的相似,能更有效地完成重复性的工作。,1、只能使用顺序语句,这一点与进程相似。 2、子程序只能通过子程序调用及子程序的界面端口进行数据传递,不能像进程那样可以从本结构体的并行语句或进程结构中直接读取信号值或者向信号赋值。 3、子程序可以在程序包,结构体和进程中定义。 4、由于只有在程序包中定义的子程序可被其他不同的设计所调用,所以一般应该将子程序放在程序包中。VHDL子程序具有可重载性的特点,即允许有许多重名的子程序,但这些子程序的参数类型及返回值数据类型是不同的 5、子程序有两种类型,即过程PROCEDURE和函数FUNCTION。 6、应该注意,综合后的子程序将映射于
19、目标芯片中的一个相应的电路模块,且每一次调用都将在硬件结构中产生对应于具有相同结构的不同的模块。,7.4.1 函数(FUNCTION),函数可分为用户自定义函数和预定义函数。 预定义函数是库中现成的、具有专用功能的函数,如决断函数、转换函数等。 决断函数用于在多驱动信号时解决信号竞争问题。 转换函数用于从一种数据类型到另一种数据类型的转换,如在元件例化语句中利用转换函数可允许不同数据类型的信号和端口间进行映射。,自定义函数:,函数定义由两部分组成,即函数头和函数体。 函数首定义:FUNCTION 函数名(输入参数表) RETURN 数据类型 A、在进程、结构体中不必定义,在程序包中必须定义 B
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 要素 PPT
