《VHDL库.包.配置》PPT课件.ppt_第1页
《VHDL库.包.配置》PPT课件.ppt_第2页
《VHDL库.包.配置》PPT课件.ppt_第3页
《VHDL库.包.配置》PPT课件.ppt_第4页
《VHDL库.包.配置》PPT课件.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1,主要内容:程序包和配置 重点内容: 配置,第4章 VHDL的库、程序包和配置,2,1. 库(Library) 库是经编译后的数据的集合,存放包集合定义、实体定义、结构体定义和配置定义。 库的功能类似于UNIX和MS-DOS操作系统中的目录,库中存放设计的数据。 在VHDL中,库的说明总放在设计单元的最前面。 库中的各个设计单元可以用作进行其他设计的资源,一个设计可以使用多个库中的设计单元。,第4章 VHDL的库、程序包和配置,4.1 VHDL的库、程序包和配置,3,第4章 VHDL的库、程序包和配置,(1)库的使用 首先在设计的开头说明要引用的库,然后使用use子句指明要使用库中的哪一个设计单元,其书写格式为: Library 库名; Use 库名. 程序包名. all; 其中:程序包名就是实际设计要使用的库中的设计单元;all表示使用程序包中的所有项目。,4,第4章 VHDL的库、程序包和配置,引用库和程序包中的说明语句有以下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;,库说明,程序包,数据类型,5,第4章 VHDL的库、程序包和配置,形式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;,6,第4章 VHDL的库、程序包和配置,引用库和程序包中的说明语句有以下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,第4章 VHDL的库、程序包和配置,2. 库的种类 VHDL提供的库可分为两大类: 设计库:对当前设计是永远可见的,不需在程序开头对它们进行说明。一般包括std库和work库。 资源库:用来存放常规元件和常用模块的库,在使用时要进行说明。资源库的内容与厂商直接相关,现在的VHDL厂商和EDA工具厂商都有自己的资源库,其中含有厂商自定义的程序包。应用最广泛的资源库是ieee库、vital库和用户自定义的库。,8,第4章 VHDL的库、程序包和配置,(1)std 库 是VHDL的标准库,包含程序包standard和textio。程序包standard中定义了bit、bit_vector、character和time等数据类型;程序包textio主要包含了对文本文件进行读写操作的过程和函数。 注 意: 使用程序包textio时要对库和程序包进行说明: Library std; Use std. textio. all; 使用程序包standard时,由于VHDL规定standard程序包总是可见的,因此不必进行说明。,9,第4章 VHDL的库、程序包和配置,(2)work库 是VHDL的工作库。在编译一VHDL的时候,默认其保存在work库中,因此work库可以用来临时保存设计人员以前编译过的元件和模块,也可以通过该库来使用其中的元件和模块。 VHDL标准中规定了work库也是永远可见的,因此在使用work库的时候不需要对它进行说明。,10,第4章 VHDL的库、程序包和配置,(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;,11,第4章 VHDL的库、程序包和配置,(4)vital库 是应用比较广泛的资源库。主要包括程序包vital_timing和vital_primitives。其中vital_timing 是一个时序程序包;vital_primitives 是一个基本元件程序包。它们可以提高VHDL门级时序模拟精度。 (5)用户自定义库 用来存放设计中共用的一些程序包,这是设计人员自己建立的资源库。可以提高设计的灵活性。 在VHDL的开头要对库进行说明。,12,第4章 VHDL的库、程序包和配置,2. 程序包(Package) 在VHDL中,设计的实体和结构体中定义的数据类型、常量、子程序说明和元件说明等部分只能在该设计实体中使用,而对其他设计实体是不可见的。 程序包说明像C语言中include语句一样,用来单纯地罗列VHDL中所要用到的信号定义、常量定义、数据类型、子程序说明和元件说明等,是一个可编译的设计单元。 要使用程序包中的某些说明和定义,要用use语句说明。各种VHDL编译系统都含有多个标准程序包,如Std_Logic_1164和Standard程序包。用户也可已自行设计程序包(保存到WORK下)。,13,第4章 VHDL的库、程序包和配置,程序包由两个独立的单元组成:程序包说明部分和程序包包体部分构成。 (1)程序包说明部分的一般格式: PACKAGE 程序包名 IS 说明语句 END 程序包名; 其中说明语句为:数据类型说明、常量说明、子程序说明、信号定义及元件说明等。 (2)程序包体单元的一般格式: PACKAGE BODY 程序包名 IS 包体语句 END 程序包名;,14,第4章 VHDL的库、程序包和配置,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库中定义程序包并立即使用实例,15,第4章 VHDL的库、程序包和配置,几种应用较广的程序包 (1)Standard 预先在std库中编译,主要定义了布尔类型、bit类型、character类型、出错级别、实数类型、整数类型、时间类型、延迟长度子类型、自然数子类型、正整数子类型、string类型、bit_vector子类型、文件打开方式类型和文件打开状态类型。对所有设计模块可见。 (2)textio 预先在std库中编译,定义了line类型、text类型、side类型、操作宽度width子类型、文件input、文件output、readline过程、对应于不同数据类型的read过程、writeline过程和对应于不同数据类型的write过程。对所有设计模块都不可见,使用时要进行说明。,16,(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函数。对所有设计模块都不可见。使用时要进行说明。,第4章 VHDL的库、程序包和配置,17,第4章 VHDL的库、程序包和配置,(4)numeric_std 已被定义为标准程序包,定义了用于综合的数据类型和算术函数。定义了两种数据类型:unsigned和signed,其中unsigned表示无符号的位矢量,signed表示带符号的位矢量,其最左端是最高位。还含有所有unsigned和signed类型的重载算术运算,还含有一些有用的类型转换函数、时钟检测函数和其他一些使用的函数。 (5)numeric_bit 与程序包numeric_std基本相同,不同之处在于它的基本元素类型是bit,而不是std_logic。,18,3. 配置(Configuration) 配置语句用于描述各种设计实体和元件之间的连接关系以及设计实体和结构体之间的连接关系。 设计者可以利用这种配置语句来选择不同的结构体,使其与要设计的实体相对应。仿真某一时实体时,可以利用配置来选择不同的结构体,进行性能对比实验以得到性能最佳的结构体。 例如,要设计一个二输入四输出的译码器。如果一种结构中的基本元件采用反相器和三输入与门,而另一种结构中的基本元件都采用与非门。它们各自的结构体是不一样的,并且放在各自不同的库中。要设计译码器就可以利用配置语句实现对两种不同的结构体的选择。,第4章 VHDL的库、程序包和配置,19,(1)默认配置 配置语句的基本格式: Configuration of is 语句说明; End ; 配置语句根据不同的情况,其说明语句有简有繁。 最简单的缺省配置格式: Configuration of is For End for; End ;(教材中128页例题),第4章 VHDL的库、程序包和配置,默认配置只能用来选择不含有任何块语句和元件的结构体,20,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 ,第4章 VHDL的库、程序包和配置,Architecture or2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,21,Architecture xor2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,第4章 VHDL的库、程序包和配置,Architecture nor2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,22,Architecture nand2_arc of example is Begin process(a, b) variable comb: std_vector( 1 downto 0); Begin comb : = a ,第4章 VHDL的库、程序包和配置,23,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;,第4章 VHDL的库、程序包和配置,配置语句cfg1将进行逻辑与操作的结构体配置给实体,配置语句cfg2将进行逻辑或操作的结构体配置给实体,24,(2)元件配置,为了避免混淆,需要给出所说明元件属于哪一个设计库里的哪一个设计实体,以及设计实体所对应的是哪一个结构体。,低级的配置 实体-结构体对的配置,第4章 VHDL的库、程序包和配置,25,基本书写结构: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 元件例化标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; FOR 元件例化标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR END 配置名; 注意:所规定的低级配置一定要在当前配置库中已经存在 时才能编译,第4章 VHDL的库、程序包和配置,低级的配置,26,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);,第4章 VHDL的库、程序包和配置,例题:全加器的实现 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;,27,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;,第4章 VHDL的库、程序包和配置,元件例化标名号为U1和U3所指定的是元件库work中的设计实体xor2,其结构体为低级配置xor2_cfg指定的结构体。,28,实体-结构体对的配置,基本书写结构: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; END FOR END 配置名; 注意:所规定的元件实体和其对应的结构体一定要在当前的配置库中已经存在,否则编译会出错。,就是在配置的过程中为每一个元件直接指定实体的结构体,而不是指定该实体的低级配置。,第4章 VHDL的库、程序包和配置,29,CONFIGURATION full_adder_cfg OF full_adder IS FOR stucture FOR U1,U3:xor2 USE ENTITY work.xor2(xor2_arc); END FOR; FOR U2,U4:and2 USE ENTITY work.and2(and2_arc); END FOR; FOR U5:or2 USE ENTITY work.or2(or2_arc); END FOR; END FOR; END full_adder_cfg;,第4章 VHDL的库、程序包和配置,30,(3) 块的配置,要指明元件所在的块,块配置在结构体和元件之间分出另一层次。若对某个含有块语句的结构体进行文件配置时,必须指明是哪一个块的配置。,与元件配置相同,块配置也有两种不同的形式:低级的配置形式和实体-结构体对的配置形式。,第4章 VHDL的库、程序包和配置,31,低级块配置格式: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 块名 FOR 元件调用标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR FOR 块名 FOR 元件调用标号名:元件名 USE CONFIGURATION 库名.元件配置名; END FOR; END FOR; END FOR; END 配置名;,第4章 VHDL的库、程序包和配置,32,实体-结构体对的块配置格式: CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 FOR 块名 FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; END FOR ; FOR 块名 FOR 元件调用标号名:元件名 USE ENTITY 库名.实体名(结构体名); END FOR; END FOR; END FOR; END 配置名;,第4章 VHDL的库、程序包和配置,33,BEGIN sum:BLOCK BEGIN U1:xor2 PORT MAP(a,b,tmp1); U2:xor2 PORT MAP(tmp1,Cin,S); END BLOCK sum; carry:BLOCK BEGIN U3:or2 PORT MAP(tmp2,tmp3,Co); middle:BLCOK BEGIN U4:and2 PORT MAP(tmp1,Cin,tmp2); U5:and2 PORT MAP(a,b,tmp3); END BLOCK middle; END BLOCK carry; END structure;,第4章 VHDL的库、程序包和配置,34,FOR structure FOR sum FOR all:xor2 USE CONFIGURATION work.xor2_cfg; END FOR; END FOR; FOR carry FOR U3:or2 USE CONFIGURATION work.or2_cfg; END FOR; FOR middle FOR all:and2 USE CONFIGURATION work.and2_cfg; END FOR; END FOR; END FOR; END FOR; END full_adder_cfg;,第4章 VHDL的库、程序包和配置,CONFIGURATION full_adder_cfg OF full_adder IS,35,(4)结构体的配置,结构体配置也是对结构体中所引用的元件进行配置,但是这种配置与元件配置有很大的区别:元件配置是使用专门的配置语句来完成的,配置语句与元件所在的结构体是分开的;而结构体配置则是放在结构体的说明语句部分,它是一种配置说明不需要与元件所在的结构体分开的配置类型。,低级配置格式: for : use configuation .;,实体-结构体对配置格式: for : use entity .;,第4章 VHDL的库、程序包和配置,36,1、子程序重载,子程序重载允许设计人员用同一个名字编写两个或两个以上的子程序,但是这些子程序的参数类型、参数数目和返回值可能是不同的。,(1)参数类型的重载,是指被重载的子程序的参数类型是不同的。这时VHDL编译器将会根据子程序调用过程中的实参类型来选择与之相一致的子程序。,4.2 重载,第4章 VHDL的库、程序包和配置,37,FUNCTION max(i1,i2:bit_vector)RETURN bit_vector; FUNCTION max(i1,i2:integer) RETURN integer; END example; PACKAGE body example IS FUNCTION max (i1,i2:std_logic_vector)RETURN std_logic_vector IS VARIABLE tmp:std_logic_vector(i1RANGE); BEGIN IF (i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF; RETURN(tmp); END max,第4章 VHDL的库、程序包和配置,LIBRARY IEEE; USE IEEE.std_logic_1164.all; PACKAGE example IS FUNCTION max(i1,i2:std_logic_vector) RETURN std_logic_vector;,38,FUNCTION max (i1,i2:bit_vector) RETURN bit_vector IS VARIABLE tmp:bit_vector(i1RANGE); BEGIN IF (i1i2) THEN tmp:=i1 ELSE tmp:=i2; END IF RETURN(tmp); END max;,第4章 VHDL的库、程序包和配置,FUNCTION max (i1,i2:integer)RETURN integer IS VARIABLE tmp:integer; BEGIN IF(i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF RETURN(tmp); END max; END example;,39,Library ieee; Use ieee.std_logic_1164.all; Use work.example.all; Entity max_value is Port(a1,a2: in std_logic_vector(7 downto 0); b1,b2 in bit_vector(7 downto 0); c1,c2 : in integer; a : out std_logic_vector(7 downto 0); b : out bit_vector(7 downto 0); c : out integer); end max_value; architecture behave of max_value is begin a=max(a1,a2); b=max(b1,b2); c=max(c1,c2); end behave;,第4章 VHDL的库、程序包和配置,40,(2)参数数目的重载,是指相同名字的子程序具有不同数目的参数,参数类型却有可能相同。这时VHDL编译器将会根据子程序调用过程中的参数数目来选择与之相一致的子程序。,LIBRARY IEEE; USE IEEE.std_logic_1164.all; PACKAGE example IS FUNCTION convert(a0,a1:std_logic) RETURN integer; FUNCTION convert(a0,a1,a2:std_logic)RETURN integer; FUNCTION convert(a0,a1,a2,a3:std_logic)RETURN integer; END example; PACKAGE body example IS,第4章 VHDL的库、程序包和配置,41,FUNCTION convert(a0,a1:std_logic)RETURN integer IS VARIABLE result:integer:=0; BEGIN IF (a0=1) THEN result:=result+1; END IF IF (a1=1) THEN result:=result+2; END IF END convert; FUNCTION convert(a0,a1,a2:std_logic)RETRUN integer IS VARIABLE result:integer:=0; BEGIN result:=convert(a0,a1); IF (a2=1) THEN result:=result+4; END IF; RETURN(result); END convert;,第4章 VHDL的库、程序包和配置,42,FUNCTION convert(a0,a1,a2,a3:std_logic)RETURN integer IS VARIABLE resutl:integer:=0; BEGIN result:=convert(a0,a1,a2); IF (a3=1) THEN result:=result+8; END IF RETURN(result); END convert; END example;,第4章 VHDL的库、程序包和配置,43,Library ieee; Use ieee.std_logic_1164.all; Use work.example.all; Entity test is Port(i0,i1,i2,i3:in std_logic); End test; Architecture behave of test is Signal int1,int2,int3:integer; Begin Int1=convert(i0,i1); Int 2=convert(i0,i1,i2); Int3=convert(i0,i1,i2,i3); End behave;,第4章 VHDL的库、程序包和配置,44,(3)函数返回类型的重载,是指被重载的同名函数的返回值类型是不同的。这时VHDL编译器将会根据函数调用过程中的函数返回类型来选择与之一致的函数。,LIBRARY IEEE; USE IEEE.std_logic_1164.all; PACKAGE example IS FUNCTION max(i1,i2:std_logic_vector) RETURN std_logic_vector; FUNCTION max(i1,i2:std_logic_vector) RETURN bit_vector; END example;,第4章 VHDL的库、程序包和配置,45,PACKAGE body example IS FUNCTION max (i1,i2:std_logic_vector) RETURN std_logic_vector IS VARIABLE tmp:std_logic_vector(i1RANGE); BEGIN IF(i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF; RETURN(tmp); END max,第4章 VHDL的库、程序包和配置,46,FUNCTION max (i1,i2:std_logic_vector) RETURN bit_vector IS VARIABLE tmp:std_logic_vector(i1RANGE); BEGIN IF (i1i2) THEN tmp:=i1; ELSE tmp:=i2; END IF RETURN(to_bitvector(tmp); END max END example;,第4章 VHDL的库、程序包和配置,47,Library ieee; Use ieee.std_logic_1164.all; Use wor

温馨提示

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

评论

0/150

提交评论