文档详情

第三章 - VHDL设计初步

油条
实名认证
店铺
PPT
1.02MB
约94页
文档ID:4569025
第三章 - VHDL设计初步_第1页
1/94

第三章 VHDL设计初步,§3.1 VHDL程序基本结构§3.2 VHDL文字规则§3.3  VHDL的数据类型§3.4  VHDL的数据对象§3.5 VHDL的操作符§3.6 设计实例,§3.1 VHDL程序基本结构,库(Library)、程序包(Package)实体(Entity)结构体(Architecture)配置(Configuration),VHDL程序基本结构:,库、程序包,实体(Entity),配置(Configuration),结构体(Architecture),进程或其它并行结构,库(P241)   库、程序包是IEEE规定的语法标准根据语法规则,在VHDL程序中使用的文字、数据对象、数据类型都需要预先定义为方便用VHDL编程,IEEE将预定义的数据类型、元件调用声明及一些常用子程序收集在一起,形成程序包,供VHDL设计实体共享和调用若干个程序包则形成库   常用的库有IEEE库、STD库、WORK库及VITAL库库—IEEE库   IEEE库是VHDL设计中最常用的库,它包含有IEEE标准的程序包和其他一些支持工业标准的程序包IEEE库中的标准程序包主要有:STD_LOGIC_1164、NUMERIC_BIT和NUMERIC_STD程序包。

其中STD_LOGIC_1164是最重要且最常用的程序包   此外,还有些程序包虽非IEEE标准,但已成为工业标准,从而加入到IEEE库中最常用的是Synopsys公司的STD_LOGIC_ARITH、STD_LOGIC_SIGNED、STD_LOGIC_UNSIGNED   一般,基于FPGA/CPLD的开发,IEEE库中的四个程序包STD_LOGIC_1164、 STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED已经够用库—STD库   VHDL定义了两个标准程序包,即STANDARD和TEXTIO(文件输入/输出)程序包,它们都收入在STD库中,可随时调用由于STD库符合VHDL语言标准,在应用中不必用打开库语句即   LIBRARY STD;   USE STD.STANDARD.ALL   是不必要的库—WORK库   WORK库是用户的VHDL设计的现行工作库,用于存放用户设计和定义的一些设计单元和程序包WORK库自动满足VHDL语言标准,在实际调用中,也不必显示预先说明,即不必在VHDL程序中明确打开并指定   基于VHDL所要求的WORK库的基本概念,利用VHDL进行设计时,不允许在根目录下进行,而是必须为此设定一个文件夹,用于保存所有此项目的设计文件,VHDL综合器将此文件默认为WORK库。

还要注意的是,工作库并不是这个文件夹的名字,而是一个逻辑名综合器将指示器指向该文件夹的路径库—VITAL库   VITAL程序包也已成为IEEE标准使用VITAL库,可以提高VHDL门级时序模拟精度,因而只在VHDL仿真器中使用库中包含时序程序包VITAL_TIMIGN和VITAL_PRIMITIVES但在实际中,由于各FPGA/CPLD的生产厂商的适配工具都能为各自的芯片生成带时序信息的VHDL门级网表,因而一般并不需要VITAL库中的程序包库的用法   在VHDL语言中,库的说明语句总是放在实体单元前面对于必须以显式表达的库及其程序包的语言表达式应放在每一项设计实体最前面,成为这项设计的最高层次的设计单元   库语句一般与USE语句同用: 库语句关键词LIBRARY指明所用的库名; USE语句指明库中的程序包 一旦说明了库和程序包,整个设计实体都可以进入访问和调用库的用法   USE语句的使用有两种常用格式:   USE 库名.程序包名.项目;--向设计实体开放指定库中的特定程序包内所选定的项目   USE 库名.程序包名.ALL--表示向设计实体开放指定库中的特定程序包内所有内容。

此处使用了关键词ALL,代表程序包中所有资源   例:   LIBRARY IEEE;   USE IEEE.STD_LOGIC_1164.STD_ULOGIC;   USE IEEE. STD_LOGIC_1164.RISING_EDGE;   表示向当前设计实体开放了IEEE. STD_LOGIC_1164程序包中的RISING_EDGE函数,但由于此函数要用到IEEE. STD_ULOGIC,所以在其前面加了一条USE语句,开放同一程序包中的这一数据类型VHDL程序包   为使已定义的常数、数据类型、元件调用、说明及子程序能被其他的设计实体访问和共享,可以将它们收集在一个VHDL程序包中多个程序包可以并入一个库   程序包主要由以下四种基本结构组成,一个程序至少应包含以下结构中的一种:常数说明VHDL数据类型说明:主要用于在整个设计中通用的数据类型元件定义:主要规定在VHDL设计中例化的文件接口界面子程序:并入程序包的子程序有利于在设计中任一处进行方便地调用VHDL程序包 定义程序包的一般语句结构如下:    PACKAGE 程序包名 IS     --程序包首      程序包首说明部分    END 程序包名;    PACKAGE  程序包名 IS      程序包体说明部分及包体内容 --程序包体    END 程序包名;    程序包的结构由程序包的说明部分(即程序包首)和程序包的内容(即程序包体)两部分组成。

程序包首可独立定义和使用其中的说明有数据类型说明、信号说明、子程序说明及元件说明等在程序包结构中,程序包体并不是必需的;一个完整的程序包中,程序包首名与程序包体名是同一个名字例:  PACKAGE pac1 IS--程序包首开始   TYPE byte IS RANGE 0 TO 255;--定义数据类型byte SUBTYPE nibble IS byte RANGE 0 TO 15;--定义子类型nibble CONSTANT byte_ff :byte :=255;--定义常数byte_ff SIGNAL addend :nibble;--定义信号addend   COMPONENT byte_adder--定义元件   PORT (a, b :IN byte;    c :OUT byte;  overflow :OUT BOOLEAN);   END COMPONENT;   FUNCTION my_functioin (a: IN byte) Return byte;--定义函数  END pac1;--程序包首结束    如果要使用这个程序包中的所有定义,可利用USE语句访问:    USE WORK.pac1.ALL;,程序包体将包括在程序包首中已定义的子程序的子程序体中。

程序包体说明部分的组成内容可以是USE语句(即允许对其他程序包的调用)、子程序定义、子程序体、数据类型说明子类型说明和常数说明等   常用的预定义的程序包有:STD_LOGIC_1164程序包:最常用的程序包,是IEEE的标准程序包其中最常用的两个数据类型是:STD_LOGIC和STD_LOGIC_VECTORSTD_LOGIC_ARITH程序包:在STD_LOGIC_1164上扩展了三个数据类型:UNSIGNED、SIGNED和SMALL_INTSTD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包:Synopsys公司的程序包,都预先编译在IEEE库中这些程序包重载了可用于INTEGER型及STD_LOGIC和STD_LOGIC_VECTOR型混合运算的运算符,并定义了STD_LOGIC_VECTOR型到INTEGER型的转换函数 STANDARD和TEXTIO程序包:两者都是STD库中的预编译程序包STDNDARD定义了许多基本的数据类型、子类型和函数TEXTIO程序包定义了文件操作的许多类型和子程序,主要供仿真器使用在使用前需加语句 USE STD.TEXTIO.ALL。

实体(Entity)—P225、P66-67   实体由实体声明部分和结构体组成实体声明部分指定了设计单元的输入/输出端口或引脚,它是设计实体对外的一个通信界面,是外界可以看到的部分;结构体用来描述设计实体的逻辑结构和逻辑功能,它由VHDL语句构成,是外界看不到的部分一个实体可以多个结构体 实体声明部分的语句格式为:   ENTITY 实体名 IS  [GENERIC (类属表);] [PORT (端口表);] END 实体名;,实体(Entity)—参数传递说明语句(P225) 参数传递说明语句(类属参数声明)必须放在端口声明之前用于指定矢量位数、器件延迟时间等参数其格式为: GENERIC([ 常数名 : 数据类型 [ : 设定值 ] { ;常数名 : 数据类型 [ : 设定值 ] } ) ; 如:  GENERIC (m: TIME:=1.0ns);  声明m是一个值为1.0ns的时间参数,【例9-1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY andn IS GENERIC (n: INTEGER );--定义类属参量及其数据类型 PORT(a: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); --用类属参量限制矢量长度 c: OUT STD_LOGIC); END; ARCHITECTURE behav OF andn IS BEGIN,PROCESS (a) VARIABLE int : STD_LOGIC; BEGIN int := '1'; FOR i IN a'LENGTH - 1 DOWNTO 0 LOOP --循环语句 IF a(i)='0' THEN int := '0'; END IF; END LOOP; c <=int ; END PROCESS; END;,【例9-2】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY exn IS PORT(d1,d2,d3,d4,d5,d6,d7 : IN STD_LOGIC; q1,q2 : OUT STD_LOGIC); END; ARCHITECTURE exn_behav OF exn IS COMPONENT andn --调用例10-1的元件调用声明 GENERIC ( n : INTEGER); PORT( a : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); C : OUT STD_LOGIC); END COMPONENT ; BEGIN,u1: andn GENERIC MAP (n =>2) -- 参数传递映射语句, 定义类属变量,n赋值为2 PORT MAP (a(0)=>d1,a(1)=>d2,c=>q1); u2: andn GENERIC MAP (n =>5) -- 定义类属变量, n赋值为5 PORT MAP (a(0)=>d3,a(1)=>d4,a(2)=>d5, a(3)=>d6,a(4)=>d7, c=>q2); END;,。

下载提示
相似文档
正为您匹配相似的精品文档