VHDL语言的程序结构.ppt_第1页
VHDL语言的程序结构.ppt_第2页
VHDL语言的程序结构.ppt_第3页
VHDL语言的程序结构.ppt_第4页
VHDL语言的程序结构.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

1,7.2 VHDL语言的程序结构,第7章 VHDL 语言基础,2,1、USE定义区:定义元件库。 2、PACKAGE定义区:定义使用哪些自定义元件库。 3、ENTITY定义区:定义电路实体的外观,I/O接口的规格。 4、ARCHITECTRUE定义区:描述电路内部的功能,说明电路执行什么动作或功能。 5、CONFIGURATION定义区:描述各种设计实体和元件之间的连接关系以及设计实体和结构体之间的连接关系。,第7章 VHDL 语言基础,3,VHDL基本结构,第7章 VHDL 语言基础,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21; ARCHITECTURE behave OF mux21 IS BEGIN PROCESS(a,b,s) BEGIN IF s=0 THEN y=a; ELSE y=b; END IF; END PROCESS; END ARCHITECTURE behave;,-IEEE说明 -自定义元件库 -定义一个实体 -描述输入输出 -信号 -结构体说明,4,1. 库(Library) 库是经编译后的数据的集合,存放包集合定义、实体定义、结构体定义和配置定义。 库的功能类似于UNIX和MS-DOS操作系统中的目录,库中存放设计的数据。 在VHDL中,库的说明总放在设计单元的最前面。 库中的各个设计单元可以用作进行其他设计的资源,一个设计可以使用多个库中的设计单元。,7.2 .1 库,第7章 VHDL 语言基础,5,(1)库的使用 首先在设计的开头说明要引用的库,然后使用use子句指明要使用库中的哪一个设计单元,其书写格式为: Library 库名; Use 库名. 程序包名. all; 其中:程序包名就是实际设计要使用的库中的设计单元;all表示使用程序包中的所有项目。,第7章 VHDL 语言基础,6,引用库和程序包中的说明语句有以下4种形式: 假定设计实体中的信号类型为std_logic,其类型说明在ieee库的std_logic_1164程序包中定义。,形式一: Library ieee; Entity and2 is Port (a : in ieee. Std_logic_1164. Std_logic; b : in ieee. Std_logic_1164. Std_logic; c : out ieee. Std_logic_1164. Std_logic); End and2;,库说明,程序包,数据类型,第7章 VHDL 语言基础,7,形式2: Library ieee; Use ieee. all; Entity and2 is Port (a : in Std_logic_1164. Std_logic; b : in Std_logic_1164. Std_logic; c : out Std_logic_1164. Std_logic); End and2;,形式3: Library ieee; Use ieee. std_logic_1164.all; Entity and2 is Port (a : in std_logic;b : in std_logic; c : out std_logic); End and2;,第7章 VHDL 语言基础,8,引用库和程序包中的说明语句有以下4种形式: 假定设计实体中的信号类型为std_logic,其类型说明在ieee库的std_logic_1164程序包中定义。,形式4: Library ieee; Use ieee. std_logic_1164. std_logic; Entity and2 is Port (a : in std_logic; b : in std_logic; c : out std_logic); End and2;,第7章 VHDL 语言基础,9,2. 库的种类 VHDL提供的库可分为两大类: 设计库:对当前设计是永远可见的,不需在程序开头对它们进行说明。一般包括std库和work库。 资源库:用来存放常规元件和常用模块的库,在使用时要进行说明。资源库的内容与厂商直接相关,现在的VHDL厂商和EDA工具厂商都有自己的资源库,其中含有厂商自定义的程序包。应用最广泛的资源库是ieee库、vital库和用户自定义的库。,第7章 VHDL 语言基础,10,(1)std 库 是VHDL的标准库,包含程序包standard和textio。程序包standard中定义了bit、bit_vector、character和time等数据类型;程序包textio主要包含了对文本文件进行读写操作的过程和函数。 注 意: 使用程序包textio时要对库和程序包进行说明: Library std; Use std. textio. all; 使用程序包standard时,由于VHDL规定standard程序包总是可见的,因此不必进行说明。,第7章 VHDL 语言基础,11,(2)work库 是VHDL的工作库。在编译一VHDL的时候,默认其保存在work库中,因此work库可以用来临时保存设计人员以前编译过的元件和模块,也可以通过该库来使用其中的元件和模块。 VHDL标准中规定了work库也是永远可见的,因此在使用work库的时候不需要对它进行说明。,第7章 VHDL 语言基础,12,(3)ieee库 是应用最广泛的资源库。主要包括程序包std_logic_1164、numeric_bit、numeric_std、math_complex和math_real,其中程序包std_logic_1164 、numeric_bit、numeric_std是ieee标准化组织认可的程序包。 现在有些公司,如synopsys公司提供了程序包std_logic_arith、std_logic_signed和std_logic_unsigned等,虽没得到ieee标准化组织的认可,但仍然定义在ieee库中。 使用ieee库时必须进行说明: Library ieee; Use ieee.std_logic_1164.all;,第7章 VHDL 语言基础,13,(4)vital库 是应用比较广泛的资源库。主要包括程序包vital_timing和vital_primitives。其中vital_timing 是一个时序程序包;vital_primitives 是一个基本元件程序包。它们可以提高VHDL门级时序模拟精度。 (5)用户自定义库 用来存放设计中共用的一些程序包,这是设计人员自己建立的资源库。可以提高设计的灵活性。 在VHDL的开头要对库进行说明。,第7章 VHDL 语言基础,14,第7章 VHDL 语言基础,VHDL设计中的基本单元就是设计实体,它用以描述完整系统、电路板、芯片、逻辑单元或门电路。 设计实体的组成部分: 实体说明(Entity Declaration):描述一个设计的外貌,即对外的输入输出接口以及一些用于结构体的参数定义。 结构体或构造体(Architecture Body):描述的是设计的行为和结构,指定输入和输出之间的行为。,7.2.2 VHDL程序的实体,15,设计实体、实体说明和结构体之间的关系,设计实体,结构体1,结构体2,第7章 VHDL 语言基础,例:一个二输入门电路的VHDL描述。,Entity and_gate is Port(a:in bit; b:in bit; c:out bit); End and_gate; Architecture behave of and_gate is Begin ca and b; End behave;,保留字,实体名,实体说明,结构体,说明:VHDL是不区分大小写的。可根据习惯书写。,17,2、一般格式 ENTITY 实体名 IS GENERIC(类型表); PORT(端口表); 实体说明部分; BEGIN 实体语句部分; END ENTITY 实体名;,一、实体说明,ENTITY or_gate IS GENERIC (delay:time:=1ns); PORT (a: in bit; b: in bit; c: out bit); END or_gate;,第7章 VHDL 语言基础,1、功能:描述设计模块的输入/输出信号或引脚,并给出设计模块与外界的接口。实体类似一个“黑盒”,实体描述了“黑盒”的输入输出口。 。,18,实体名实际上是器件名,最好根据相应的电路功能确定。如4位2进制计数器用counter4b;8位加法器用add8b;3/8译码器用ym_38。 实体名必须与文件名相同,否则无法编译。 实体名不能用工具库中定义好的元件名。 实体名不能用中文,也不能用数字开头。,实 体 名,第7章 VHDL 语言基础,19,二、类型说明,1、作用 为设计实体和其外部环境通信的静态信息提供通道,可以定义端口的大小、实体中元件的数目以及实体的定时特性等。,2、一般格式 GENERIC(CONSTANT 名字表:IN 子类型标识 := 静态表达式, );,第7章 VHDL 语言基础,ENTITY nand2 IS GENERIC (t_rise:time:=1ns; t_fall: time:=1ns); PORT (a: in bit; b: in bit; c: out bit); END nand2 ;,20,使用类属参数说明语句易于使设计具有通用性。,ENTITY and_gate IS GENERIC(delay :time); PORT(a:in bit; b:in bit;c:out bit); END and_gate; ARCHITECTURE behave OF and_gate IS BEGIN ca and b after (delay); END behave;,第7章 VHDL 语言基础,例:在电路中多次使用二输入与门电路,但延迟时间不同。 二输入与门电路的VHDL程序。,现在要求实现这样一个设计:由三个二输入与门电路组成下图所示的四输入与门功能,要求门1的延迟时间为5ns,门2的延迟时间为6ns,门2的延迟时间为7ns。,在设计过程中通常遇到一些参数不确定的情况,参数是待定的,在模拟时,只要用GENERIC MAP语句将待定参数初始化即可。,22,ENTITY or3 IS PORT (a,b,c: in bit; q: out bit); END or3; ARCHITECTRUE behave OF or3 IS COMPONENT and_gate GENERIC(delay:time); PORT(a,b : in bit; c : out bit);,END COMPONENT; SIGNAL q1,q2 : bit; BEGIN U1:and_gate GENERIC MAP(5ns) PORT MAP(a,b,q1); U2:and_gate GENERIC MAP(6ns) PROT MAP(c,d,q2); U3:and_gate GENERIC MAP(7ns) PROT MAP(q1,q2,q); END behave;,第7章 VHDL 语言基础,23,三、端口说明,1、作用 是对设计实体与外部接口的描述,是设计实体和外部环境动态通信的通道,其功能对应于电路图符号的一个引脚。,2、一般格式 PORT (端口名 :端口模式 数据类型; 端口名 :端口模式 数据类型; );,第7章 VHDL 语言基础,24,三、端口说明,(1)端口名称 是端口的标识符,是赋予每个外部引脚的名称由字母、数字和下划线组成,其命名规则为: 1)第一个字符必须是字母; 2)下划线不能连用; 3)最后一个字符不能是下划线; 4)不区分大小写; 5)命名不能与保留字相同。 如:不合法的例子 _clk, 8mclk, data_ _bus, buffer, data_,第7章 VHDL 语言基础,25, 输入IN:输入信号的驱动源由外部向该设计实体内进行。主要用于时钟输入、控制输入和单向的数据输入。 输出OUT:允许数据流从实体内部输出。用于计数输出、单方向数据输出、设计实体产生的控制其他实体的信号等。 缓冲BUFFER:允许内部引用该端口的信号。既能用于输出,也可用于反馈。(只能连接内部信号和具有缓冲模式的端口。) 双向模式INOUT:可以代替IN、OUT、BUFFER。,第7章 VHDL 语言基础,(2)端口模式:用来说明数据、信号通过该端口的传输方向。模式有IN、OUT、BUFFER、INOUT。,26,说明: 1)双向模式可以代替输入、输出和缓冲模式的任何一种。 2)“out”和“buffer”都可以定义输出端口。,图(a):只能用于输出。 图(b):构造体内部也要使用该信号时,只能定义成“buffer”,其区别:,(3)数据类型:布尔型(boolean)、位型(bit)、位矢量型(bit-vector)、整数型(integer)、枚举型、物理类型等10种数据类型。在逻辑电路中用到两种:bit(位)和bit_vector(位向量)。,1)bit:为位逻辑数据类型,信号取值是逻辑值“1”和“0”。 2)bit_vector:取值是一组二进制位的值。,如:8位数据总线数端口 Port(d0, d1, sel : in bit; q : out bit; bus : out bit_vector(7 downto 0);,3)在VHDL程序中,设计人员常使用的数据类型为IEEE.STD_Logic_1164程序包所给定的,标准逻辑类型STD_Logic、 STD_Logic_vector 。,Library IEEE; Use IEEE.STD_Logic_1164.all; Entity mu is Port(d0, d1, sel : in STD_Logic; q : out STD_Logic; bus : out STD_Logic_vector(7 downto 0);,28,主要用于定义该设计实体接口中的公共信息,比如定义新的数据类型和常量定义等。,四、实体说明部分,五、实体语句部分,是设计实体接口的共同部分,只能由如下并行语句构成:并行断言语句、并行过程调用语句和被动进程语句等,这些语句应该是被动语句,即在语句中不含有信号赋值。,第7章 VHDL 语言基础,ENTITY example IS PORT(a,b : IN STD_LOGIC; c: OUT STD_LOGIC; ); TYPE colour IS ARRAY (6 downto 0) of STD_LOGIC; END example;,实 体 举 例,ENTITY black_box IS Generic ( constant width : integer:= 7); PORT (clk , rst: in std_logic; d: in std_logic_vector(width downto 0); q: out std_logic_vector(width downto 0); co:out std_logic); END black_box;,练习,编写包含以下内容的实体代码: 端口 D 为12位输入总线; 端口 OE 和CLK 都是1位输入 ; 端口 AD 为12位双向总线; 端口 A为12位输出总线; 端口 INT 是1位输出 ; 端口 AS 是一位输出同时被用作内部反馈。,练习答案,Library ieee; Use ieee.std_logic_1164.ALL; Entity my_design is PORT ( d: in std_logic_vector(11 downto 0); oe , clk: in: std_logic; ad: inout std_logic_vector(11 downto 0); a: out std_logic_vector(7 downto 0); int: out std_logic; as: buffer std_logic); End my_design;,32,一、结构体的作用,描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。 通过若干并行语句来描述设计实体的逻辑功能(行为描述)或内部电路结构(结构描述),从而建立设计实体输出与输入之间的关系。一个设计实体可以有多个结构体。,7.3.3 VHDL程序的结构体,第7章 VHDL 语言基础,33,二、结构体的一般格式,ARCHITECTURE 结构体名 OF 实体名 IS 定义语句: 内部信号,常数,数据类型,函数定义 BEGIN 并行处理语句; 进程语句; END 结构体名;,第7章 VHDL 语言基础,ARCHITECTURE a OF _ _entity_name IS SIGNAL signal_name : STD_LOGIC; SIGNAL signal_name : STD_LOGIC; BEGIN END a;,结构体说明,并行处理语句,-Process Statement; -Concurrent Procedure Call; -Concurrent Signal Assignment; -Conditional Signal Assignment; -Selected Signal Assignment; -Component Instantiation Statement; -Generate Statement;,35,1、结构体命名 结构体名由设计者自行定义,OF后面的实体名指明了该结构体所对应的是哪个实体。由于一个设计有行为描述、数据流描述和结构描述3种方式,一般建议用behave, dataflow, structure为结构体命名。,2、结构体说明语句 结构体说明语句必须放在关键词ARCHITECTURE和BEGIN之间。 用于对结构体内部将要使用的信号、常数、数据类型、元件、函数和过程加以说明。最常见的是对内部流动的信号的定义。但不能定义变量。 实体说明中定义的信号是外部信号,而结构体定义的信号为该结构体的内部信号,它只能用于这个结构体中。 结构体中的信号定义和端口说明一样,应有信号名称和数据类型定义。因为它是内部连接用的信号,因此不需要方向说明。,第7章 VHDL 语言基础,36,3、结构体功能描述语句 结构体功能描述语句位于BEGIN和END之间,具体地描述了构造体的行为及其连接关系。 结构体的功能描述语句可以含有5种不同类型的并行语句,每一语句结构内部可以使用并行语句,也可以是顺序语句。,第7章 VHDL 语言基础,ENTITY half_adder IS PORT(x,y : IN STD_LOGIC; s,c: OUT STD_LOGIC ); END half_adder; ARCHITECTURE dataflow OF half_adder IS BEGIN s = x xor y; c = x and y; END dataflow,37,并行处理语句 并行处理语句具体地描述了结构体的行为和结构。 并行处理语句位于结构体中begin和end之间。 并行语句有五种类型,可以把它们看成结构体的五种子结构。这五种语句结构本身是并行语句,但内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句,如进程内部包含的即为顺序语句。 五种语句结构分别为块语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。,例:进程(process)语句。 进程标号: PROCESS 敏感信号表 is 进程语句说明部分; BEGIN ; END PROCESS 进程标号,38,三、结构体的四种描述形式,第7章 VHDL 语言基础,1、行为描述形式 2、数据流描述形式 3、结构描述形式 4、 混合描述形式,39,1、行为描述形式(类似于数字中的真值表) 就是对系统数学模型的描述,常采用算术运算、关系运算和惯性延时等。主要用于系统数学模型的仿真或者是系统工作原理的仿真。其优点是无须知道具体电路的结构,只需要一组状态来描述即可。 即只描述所希望电路的功能或者电路行为(输入输出间转换的行为),而没有指明或涉及实现这些行为的硬件结构。,第7章 VHDL 语言基础,40,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END mux21; ARCHITECTURE behave OF mux21 IS BEGIN PROCESS(a,b,s) BEGIN IF s=0 THEN y=a; ELSE y=b; END IF; END PROCESS; END behave;,第7章 VHDL 语言基础,41,2、数据流描述形式(类似于数字中的逻辑表达式) 也称为寄存器传输描述形式。是对信号到信号的数据流的路径形式进行描述,因此要求设计者不但要对设计实体的功能实现有一定的了解,而且还需要对内部的逻辑电路结构有清楚的认识。,第7章 VHDL 语言基础,42,2、数据流描述形式(类似于数字中的逻辑表达式),LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC); END ENTITY mux21; ARCHITECTURE dataflow OF mux21 IS BEGIN y=(a AND (NOT s) OR (b AND s); END ARCHITECTURE dataflow;,第7章 VHDL 语言基础,43,第7章 VHDL 语言基础,例;试用VHDL编写用数据流描述结构的全加器程序。,ENTITY full_adder IS PORT(A,B,Cin : IN STD_LOGIC; S,Co: OUT STD_LOGIC ); END full_adder; ARCHITECTURE dataflow OF full_adder IS SIGNAL tmp1,tmp2:STD_LOGIC; BEGIN tmp1 = A xor B; tmp2 = tmp1 and Cin; S = tmp1 xor Cin; Co = tmp2 or (A and B); END dataflow,44,3、结构描述形式(类似于数字中的逻辑图) 就是在多层次的设计中,高层次的设计模块调用低层次的设计模块,或者直接用门电路设计单元来构成一个复杂的逻辑电路的描述方法。 具体实现就是在多层次的设计中,通过调用库中的元件或者是已经设计好的模块来描述元件(或模块)和元件(或模块)之间的互连关系,就像网表一样。 注意: 当引用库中不存在的元件时,必须首先进行元件的创建,然后放在工作库中,通过调用工作库来引用元件。同时在引用元件时,要先在结构体的说明部分进行元件的说明,然后在使用元件时进行元件例化。,第7章 VHDL 语言基础,45,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and21 IS PORT(i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC ); END ENTITY and21; ARCHITECTURE one OF and21 IS BEGIN q=i0 AND i1; END ARCHITECTURE one;,第7章 VHDL 语言基础,46,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY or21 IS PORT(i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC ); END ENTITY or21; ARCHITECTURE one OF or21 IS BEGIN q=i0 OR i1; END ARCHITECTURE one;,第7章 VHDL 语言基础,47,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY inv21 IS PORT(i0 : IN STD_LOGIC; q: OUT STD_LOGIC ); END ENTITY inv21; ARCHITECTURE one OF inv21 IS BEGIN q= (NOT i0); END ARCHITECTURE one;,第7章 VHDL 语言基础,48,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END mux21;,第7章 VHDL 语言基础,49,ARCHITECTURE struct OF mux21 IS COMPONENT and21 PORT (i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC); END COMPONENT; COMPONENT or21 PORT (i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC); END COMPONENT; COMPONENT inv21 PORT (i0: IN STD_LOGIC; q: OUT STD_LOGIC); END COMPONENT;,第7章 VHDL 语言基础,50,SIGNAL tmp1,tmp2,tmp3:STD_LOGIC; BEGIN u1: and21 PORT MAP (b, s,tmp1); u2: inv21 PORT MAP(s,tmp2); u3: and21 PORT MAP (a,tmp2,tmp3); u4: or21 PORT MAP(tmp1,tmp3,y); END ARCHITECTURE struct;,第7章 VHDL 语言基础,51,4、混合描述方式 就是指上述3种描述方式的任意组合。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY xor21 IS PORT(i0,i1:IN STD_LOGIC; q: OUT STD_LOGIC); END ENTITY xor21; ARCHITECTURE behave OF xor21 IS BEGIN q=i0 XOR i1; END ARCHITECTURE behave;,第7章 VHDL 语言基础,52,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS PORT(a,b:IN STD_LOGIC; c,s: OUT STD_LOGIC); END ENTITY half_adder; ARCHITECTURE mix OF half_adder IS COMPONENT xor21 IS PORT(i0,i1:IN STD_LOGIC; q:OUT STD_LOGIC); END COMPONENT; BEGIN c = a AND b; u1: xor21 PORT MAP(a,b,s); END ARCHITECTURE mix;,第7章 VHDL 语言基础,53, 在VHDL中,设计的实体和结构体中定义的数据类型、常量、子程序说明和元件说明等部分只能在该设计实体中使用,而对其他设计实体是不可见的。 程序包说明像C语言中include语句一样,用来单纯地罗列VHDL中所要用到的信号定义、常量定义、数据类型、子程序说明和元件说明等,是一个可编译的设计单元。 要使用程序包中的某些说明和定义,要用use语句说明。各种VHDL编译系统都含有多个标准程序包,如Std_Logic_1164和Standard程序包。用户也可已自行设计程序包(保存到WORK下)。,7.3.4 VHDL程序的程序包,54,程序包由两个独立的单元组成:程序包说明部分和程序包包体部分构成。 (1)程序包说明部分的一般格式: PACKAGE 程序包名 IS 说明语句 END 程序包名; 其中说明语句为:数据类型说明、常量说明、子程序说明、信号定义及元件说明等。 (2)程序包体单元的一般格式: PACKAGE BODY 程序包名 IS 包体语句 END 程序包名;,第7章 VHDL 语言基础,55,PACKAGE fun IS SUBTYPE segment IS BIT _Vector(0 to 6); TYPE BCD IS RANGE 0 to 9; END fun; ENTITY decoder IS PORT( INPUT: BCD; DRIVE :OUT SEGMENT); END decoder; ARCHITECTURE art OF decoder IS BEGIN WITH INPUT SELECT,DRIVE=B “1111110”WHEN 0, B “0110000”WHEN 1, B “1101101”WHEN 2, B “1111001”WHEN 3, B “0110011”WHEN 4, B “1011011”WHEN 5, B “1011111”WHEN 6, B “1110000”WHEN 7, B “1111111”WHEN 8, B “1111011”WHEN 9, B “0000000”WHEN OTHERS; END art;,例:在现行WORK库中定义程序包并立即使用实例,第7章 VHDL 语言基础,56,几种应用较广的程序包 (1)Standard 预先在std库中编译,主要定义了布尔类型、bit类型、character类型、出错级别、实数类型、整数类型、时间类型、延迟长度子类型、自然数子类型、正整数子类型、string类型、bit_vector子类型、文件打开方式类型和文件打开状态类型。对所有设计模块可见。 (2)textio 预先在std库中编译,定义了line类型、text类型、side类型、操作宽度width子类型、文件input、文件output、readline过程、对应于不同数据类型的read过程、writeline过程和对应于不同数据类型的write过程。对所有设计模块都不可见,使用时要进行说明。,第7章 VHDL 语言基础,57,(3)std_logic_1164 预先在ieee库中编译,是使用最广泛的程序包,定义了设计人员长采用的一些数据类型和函数。 定义了std_ulogic类型、std_ulogic_vector类型、std_logic子类型、std_logic_vector类型。决断函数resolved、X01Z子类型、UX01子类型、UX01Z子类型、对应于不同数据类型的and、nand、or、nor、xor、xnor、not函数、对应于不同数据类型的To_bot、To_bitvector、To_stdulogic、To_stdlogicvector、To_stdulogicvector、To_X01、To_X01Z、To_UX01转换函数、上升沿函数rising_edge、下降沿函数falling_edge和对应于不同类型的Is_X函数。对所有设计模块都不可见。使用时要进行说明。,第7章 VHDL 语言基础,58,(4)numeric_std 已被定义为标准程序包,定义了用于综合的数据类型和算术函数。定义了两种数据类型:unsigned和signed,其中unsigned表示无符号的位矢量,signed表示带符号的位矢量,其最左端是最高位。还含有所有unsigned和signed类型的重载算术运算,还含有一些有用的类型转换函数、时钟检测函数和其他一些使用的函数。 (5)numeric_bit 与程序包numeric_std基本相同,不同之处在于它的基本元素类型是bit,而不是std_logic。,第7章 VHDL 语言基础,59, 配置语句用于描述各种设计实体和元件之间的连接关系以及设计实体和结构体之间的连接关系。 设计者可以利用这种配置语句来选择不同的结构体,使其与要设计的实体相对应。仿真某一时实体时,可以利用配置来选择不同的结构体,进行性能对比实验以得到性能最佳的结构体。 例如,要设计一个二输入四输出的译码器。如果一种结构中的基本元件采用反相器和三输入与门,而另一种结构中的基本元件都采用与非门。它们各自的结构体是不一样的,并且放在各自不同的库中。要设计译码器就可以利用配置语句实现对两种不同的结构体的选择。,7.3.4 配置,第7章 VHDL 语言基础,60,(1)默认配置 配置语句的基本格式: Configuration of is 语句说明; End ; 配置语句根据不同的情况,其说明语句有简有繁。 最简单的缺省配置格式: Configuration of is For End for; End ;(教材中128页例题),默认配置只能用来选择不含有任何块语句和元件的结构体,第7章 VHDL 语言基础,61,Library ieee; Use ieee.std_logic_1164.all; Entity example is port(a, b: in std_logic;y: out std_logic); End example; Architecture and2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,Architecture or2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,第7章 VHDL 语言基础,62,Architecture xor2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,Architecture nor2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,第7章 VHDL 语言基础,63,Architecture nand2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,第7章 VHDL 语言基础,64,Configuration cfg1 of example is for and2_arc end for; End cfg1; Configuration cfg2 of example is for or2_arc end for; End cfg2; Configuration cfg3 of example is for nand2_arc end for; End cfg3; Configuration cfg4 of example is for nor2_arc end for; End cfg4; Configuration cfg5 of example is for xor2_arc end for; End cfg5;,配置语句cfg1将进行逻辑与操作的结构体配置给实体,配置语句cfg2将进行逻辑或操作的结构体配置给实体,第7章 VHDL 语言基础,65,(2)元件配置,为了避免混淆,需要给出所说明元件属于哪一个设计库里的哪一个设计实体,以及设计实体所对应的是哪一个结构体。,低级的配置 实体-结构体对的配置,第7章 VHDL 语言基础,66,基本书写结构: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 元件例化标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; FOR 元件例化标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR END 配置名; 注意:所规定的低级配置一定要在当前配置库中已经存在 时才能编译,低级的配置,第7章 VHDL 语言基础,67,ARCHITECTURE structure OF full_adder IS COMPONENT or2 PORT(a,b:IN std_logic; c: OUT std_logic); END COMPONENT; COMPONENT and2 PORT(a,b:IN std_logic; c: OUT std_logic); END COMPONENT; COMPONENT xor2 PORT(a,b:IN std_logic; c: OUT std_logic); END COMPONENT; SIGNAL tmp1,tmp2,tmp3,:std_logic; BEGIN U1:xor2 PORT MAP(a,b,tmp1);,例题:全加器的实现 LIBRARY IEEE; USE IEEE.sti_logic_1164.all; ENTITY full_adder IS PORT(a,b,Cin :IN std_logic; Co,S: OUT std_logic); END full_adder;,第7章 VHDL 语言基础,68,U2:and2 PORT MAP(tmp1,Cin,tmp2); U3:xor2 PORT MAP(tmp1,Cin,S); U4:and2 PORT MAP(a,b.tmp3); U5:or2 PORT MAP(tmp2,tmp3,Co); END sturcture; CONFIGURATION full_adder_cfg OF full_adder IS FOR structure FOR U1,U3:xor2 USE CONFIGURATION work.xor2_cfg; END FOR; FOR U2,U4:and2 USE CONFIGURATION work.and2_cfg; END FOR; FOR U5:or2 USE CONFIGURATION work.or2_cfg; END FOR; END FOR; End full_adder_cfg;,元件例化标名号为U1和U3所指定的是元件库work中的设计实体xor2,其结构体为低级配置xor2_cfg指定的结构体。,第7章 VHDL 语言基础,69,实体-结构体对的配置,基本书写结构: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 元件调用标号名:元件名 USE ENTITY 库名

温馨提示

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

评论

0/150

提交评论