第五章ⅦD的库、程序包和 5.1VHDL的库 5.1.1库的使用 ˇ库主要用来存放已经编译过的实体、结构体、程序包和配置,以便在其它设计中 可以随时引用这些信息,从而提高设计人员的工作效率。 要引用库中已编译的设计单元时,必须在每个设计的VHDL程序的开头说明要 引用的库; √库说明语句的书写格式: library; 如: libraryieee; library ieee, work, std √对库进行说明以后,还要说明程序所要使用的是库中哪一个设计单元。 书写格式: uell; use<项目名少 项目名:指程序包内某个特定的项目;
第五章 VHDL的库、程序包和配置 5.1 VHDL的库 ✓库主要用来存放已经编译过的实体、结构体、程序包和配置,以便在其它设计中 可以随时引用这些信息,从而提高设计人员的工作效率。 ✓要引用库中已编译的设计单元时,必须在每个设计的VHDL程序的开头说明要 引用的库; ✓库说明语句的书写格式: library ; 如: library ieee; library ieee, work, std; ✓对库进行说明以后,还要说明程序所要使用的是库中哪一个设计单元。 书写格式: use . .all; use . .; 项目名:指程序包内某个特定的项目; 5.1.1 库的使用
libraryieee; use ieee std_ logic_1164.all; use ieee std_logic_ 1164. std_ logic; ˇ库说明语句的作用范围:从一个实体说明开始到它所隶属的结构体、配置为止,或 从一个程序包的说明开始到该程序包的定义结束为止。 当一个VHDL程序出现两个或两个以上的实体或程序包时,作为使用库的说明语句 应该在每个实体说明语句和包说明语句前重复书写。 library ieee; use ieee std logic 1164.all; entity andris end and2. architecture rtl of and2 is d rt1 rary ieee use ieeestd_ logic_1164. all; entity oris d or2 architecture rt1 ofor2is end rt1
如: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_1164.std_logic; ✓库说明语句的作用范围:从一个实体说明开始到它所隶属的结构体、配置为止,或 从一个程序包的说明开始到该程序包的定义结束为止。 ✓当一个VHDL程序出现两个或两个以上的实体或程序包时,作为使用库的说明语句 应该在每个实体说明语句和包说明语句前重复书写。 library ieee; use ieee.std_logic_1164.all; entity and2 is …… end and2; architecture rt1 of and2 is …… end rt1; library ieee; use ieee.std_logic_1164.all; entity or2 is …… end or2; architecture rt1 of or2 is …… end rt1;
5.12库的分类 分为两大类:设计库和资源库 设计库:对当前设计实体是永远可见的,在使用时无须说明; 包括:std库,work库 资源库:存放常规元件和常规模块的库,在使用时要先进行库说明。 包括:iee库,面向ASIC的库,用户自定义的库 1.iee库 ●包括:ieee标准的程序包;一些支持工业标准的程序包 (1)iee6准的程序包 std_logic_1164; numeric_bit; numeric_std, math_complex, math_real (2)支持工业标准的程序包 如: synopsys公司的std_ logic_arith, std_logic_signed, std_logic_unsigned ●引用iee库和程序包的四种书写格式 (1)第一种书写格式 library ieee; use ieee std _logic1164.all entity and2 is port(a, b: in stdlogic; c: out std_logic end and2
5.1.2 库的分类 分为两大类:设计库和资源库 设计库:对当前设计实体是永远可见的,在使用时无须说明; 包括:std库,work库 资源库:存放常规元件和常规模块的库,在使用时要先进行库说明。 包括:ieee库,面向ASIC的库,用户自定义的库 1. ieee库 ⚫包括:ieee标准的程序包;一些支持工业标准的程序包 (1)ieee标准的程序包 std_logic_1164; numeric_bit; numeric_std; math_complex; math_real (2)支持工业标准的程序包 如:synopsys公司的std_logic_arith, std_logic_signed, std_logic_unsigned ⚫引用ieee库和程序包的四种书写格式: (1)第一种书写格式 library ieee; use ieee.std_logic_1164.all; entity and2 is port(a, b:in std_logic; c: out std_logic); end and2;
(2)第二种书写格式 libraryieee; useieee. std_logic_1164. std_logic; entity and2 is port(a, b: in std logic; c:out std_ logic); end and2. (3)第三种书写格式 library ieee entity and2 is port(a, b: in ieee std_logic_1164. std logic; c: out ieee std _logic_1164. std _logic): end andz (3)第四种书写格式 library ieee use ieee.all; entity and2 is port(a, b: in std _ logic_1164. std _logic; c:out std_logic_1164.std_logic); end and2:
(2)第二种书写格式 library ieee; use ieee.std_logic_1164.std_logic; entity and2 is port(a, b:in std_logic; c: out std_logic); end and2; (3)第三种书写格式 library ieee; entity and2 is port(a, b:in ieee.std_logic_1164.std_logic; c: out ieee.std_logic_1164.std_logic); end and2; (3)第四种书写格式 library ieee; use ieee.all; entity and2 is port(a, b:in std_logic_1164.std_logic; c: out std_logic_1164.std_logic); end and2;
2.std库 是VHDL标准库,包含两个程序包: standard和 textio; standard中定义了:bit, bit vector, character和tme等数据类型;(使用前无须说明) textio:包含了对文本文件进行读写操作的过程和函数,使用前需说明。如 library std; use stdtextio. all: 3.work库 用来保存共用的例化元件和模块,是标准模块库,使用时无须进行说明; 4.面向ASⅠC的库 5.用户自定义的库 例:可变模计数器 通过模值控制端改变计数器的模值 (1)无置数端的可变模计数器 mchange_1 clkx-时钟 clk clr-清零端 q[6 clr m|6… 模值输入端 [6…0 可变模计数器的电路符号
2. std库 是VHDL标准库,包含两个程序包:standard和textio; standard中定义了:bit, bit_vector, character和time等数据类型;(使用前无须说明) textio:包含了对文本文件进行读写操作的过程和函数,使用前需说明。如: library std; use std.textio.all; 3. work库 用来保存共用的例化元件和模块,是标准模块库,使用时无须进行说明; 4. 面向ASIC的库 5. 用户自定义的库 例:可变模计数器 通过模值控制端改变计数器的模值 (1)无置数端的可变模计数器 可变模计数器的电路符号 mchange_1 clk q[6…0] clr m[6…0] clk –时钟 clr – 清零端 m[6…0] – 模值输入端
libraryieee, useleee.s std_ logic_1164. all; use ieeestd_logic_unsigned.all; entity mchange_1 is port(clk, clrin std_logic, m: inintegerrange0 to 99; g: bufferinteger range0 to 99) end mchange_1; architecture one of mchange_l is signal md: integer; egin process(clr, clk, m) egin md<=m-1 if clr=1then q <=“0 elsifclk event and clk=1then if q=md then q<= 0 else q<=q+1 end if; nd if: eny end process; d
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mchange_1 is port(clk, clr:in std_logic; m: in integer range 0 to 99; q: buffer integer range 0 to 99); end mchange_1; architecture one of mchange_1 is signal md: integer; begin process(clr,clk,m) begin md<=m-1; if clr=‘1’ then q<=‘0’; elsif clk’event and clk=‘1’ then if q=md then q<=‘0’; else q<=q+1; end if; end if; end process; end one;
(2)有置数端的可变模计数器 mchange100 clk-时钟 clk clr-清零端 q[6…0 ld-置数端 ld m[6…0]一模值输入端 [6…0 有置数端的可变模计数器的电路符号
(2)有置数端的可变模计数器 有置数端的可变模计数器的电路符号 mchange100 clk q[6…0] clr m[6…0] clk –时钟 clr – 清零端 m[6…0] – 模值输入端 ld ld – 置数端
use ieee std_logic_1164.all; use ieee std _logic_unsigned.all; entity mchange 1 port(clk, clr, ld:in std logic; m: in integer range0 to 99 g: bufferinteger range0 to 99) end mchange_1 architecture one of mchange_1 is signalmd: integer; egin process( clr, clk m) b d<=m-1; if cIr= 1 then g<=0; elsif clk event and clk=1 then fld=‘1’ then q<=m elsif q=md then q<=0; seq<=q+1; d if en end proces end one:
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mchange_1 is port(clk, clr, ld:in std_logic; m: in integer range 0 to 99; q: buffer integer range 0 to 99); end mchange_1; architecture one of mchange_1 is signal md: integer; begin process(clr,clk,m) begin md<=m-1; if clr=‘1’ then q<=0; elsif clk’event and clk=‘1’ then if ld=‘1’ then q<=m; elsif q=md then q<=0; else q<=q+1; end if; end if; end process; end one;
52VHDL的程序包 作用:使一组信号定义、数据类型、子程序说明、属性说明及元件说明等对多个 设计实体及其相应的结构体都成为可见。 521程序包的基本结构 由程序包说明和程序包包体两部分组成; 程序包说明:为程序包定义接口,主要用来对信号、常量、数据类型、子程序 属性等进行说明; 程序包包体:用来规定程序包的实际功能,它主要由程序包说明部分指定的 函数和过程的程序体组成。 程序包说明部分的书写格式: pakagei [数据类型说明; [子程序说明; [常量、延迟常量说明]; [信号说明]; [元件说明; [文件说明 [别名说明]; [属性说明]; [属性指定]; end[ package程序包名];
5.2 VHDL的程序包 作用:使一组信号定义、数据类型、子程序说明、属性说明及元件说明等对多个 设计实体及其相应的结构体都成为可见。 5.2.1 程序包的基本结构 由程序包说明和程序包包体两部分组成; 程序包说明:为程序包定义接口,主要用来对信号、常量、数据类型、子程序 属性等进行说明; 程序包包体:用来规定程序包的实际功能,它主要由程序包说明部分指定的 函数和过程的程序体组成。 程序包说明部分的书写格式: pakage is [数据类型说明]; [子程序说明]; [常量、延迟常量说明]; [信号说明]; [元件说明]; [文件说明]; [别名说明]; [属性说明]; [属性指定]; end [package] [程序包名];
与实体说明部分的区别: 实体说明部分:用来指定哪些信号对外可见: 程序包说明部分:用来指定哪些信号、常量、数据类型、子程序、属性等 对外可见 程序包包体部分基本书写格式: package bodyis [外部子程序体]; [内部子程序说明]; [内部子程序体]; [内部常量说明; [内部数据类型说明]; end[ package body.]程序包名]; 例 package logic type three_level logicis (0,1,z constantvalue: three_ level logic: =0 functioninvert(input: three_ level logic)return three_level_logic; d package logic;
与实体说明部分的区别: 实体说明部分:用来指定哪些信号对外可见; 程序包说明部分:用来指定哪些信号、常量、数据类型、子程序、属性等 对外可见。 程序包包体部分基本书写格式: package body is [外部子程序体]; [内部子程序说明]; [内部子程序体]; [内部常量说明]; [内部数据类型说明]; end [package body] [程序包名]; 例: package logic is type three_level_logic is (‘0’,’1’,’Z’); constant value: three_level_logic:=‘0’; function invert(input: three_level_logic) return three_level_logic; end package logic;