首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

VHDL语言中generic(类属)

VHDL语言中generic(类属)

类属 GENERIC 参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。类属为所说明的环境提供了一种静态信息通道,类属与常数不同,常数只能从设计实体的内部得到赋值且不能再改变,而类属的值可以由设计实体外部提供。因此设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。    类属参量以关键词 GENERIC 引导一个类属参量表,在表中提供时间参数或总线宽度等静态信息。类属表说明用于设计实体和其外部环境通信的参数,传递静态的信息。类属在所定义的环境中的地位与常数十分接近,但却能从环境,如设计实体,外部动态地接受赋值,其行为又有点类似于端口 PORT,因此常如以上的实体定义语句那样将类属说明放在其中,且放在端口说明语句的前面。      在一个实体中定义的来自外部赋入类属的值可以在实体内部或与之相应的结构体中读到,对于同一个设计实体,可以通过 GENERIC 参数类属的说明,为它创建多个行为不同的逻辑结构,比较常见的情况是利用类属来动态规定一个实体的端口的大小,或设计实体的物理特性,或结构体中的总线宽度,或设计实体中底层中同种元件的例化数量等等。     一般在结构体中,类属的应用与常数是一样的,例如:当用实体例化一个设计实体的器件时,可以用类属表中的参数项定制这个器件,如可以将一个实体的传输延迟,上升和下降延时等参数加到类属参数表中,然后根据这些参数进行定制,这对于系统仿真控制是十分方便的。其中的常数名是由设计者确定的类属常数名,数据类型通常取 INTEGER 或TIME 等类型,设定值即为常数名所代表的数值,但需注意 VHDL 综合器仅支持数据类型为整数的类属值。 程序3-2和3-3是两个使用了类属说明的实例描述   程序3-2   ENTITY mcu1 ISGENERIC (addrwidth : INTEGER := 16)ORT(     add_bus : OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0) );     ...在这里 GENERIC 语句对实体 mcu1 作为地址总线的端口 add_bus 的数据类型和宽度作了定义 即定义 add_bus 为一个 16 位的标准位矢量 定义 addrwidth 的数据类型是整数INTEGER 其中 常数名addrwidth减 1 即为 15 所以这类似于将上例端口表写成PORT (add_bus : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));由程序 3-2 可见 对于类属值 addrwidth 的改变将对结构体中所有相关的总线的定义同时作了改变 由此将改变整个设计实体的硬件结构程序3-3 2输入与门的实体描述VHDL实用教程 22ENTITY PGAND2 IS    GENERIC (    trise : TIME := 1 ns;              tfall : TIME := 1 ns ) ;       PORT (    a1 : IN STD_LOGIC ;             a0 : IN STD_LOGIC ;             z0 : OUT STD_LOGIC );END ENTITY PGAND2;这是一个准备作为 2 输入与门的设计实体的实体描述 在类属说明中定义参数 trise 为上沿宽度 tfall为下沿宽度 它们分别为1ns 这两个参数用于仿真模块的设计     以下的程序 3-5 是一个顶层设计文件 它在例化语句中调用了程序 3-4 读者应注意到 在程序 3-4 中的类属变量 n 并没有如程序 3-2 那样明确规定了它的取值 n 的具体取值是在程序 3-5 中的类属映射语句 GENERIC MAP ( )中指定的 并在两个不同的类属映射语句中作了不同的赋值     程序 3-4 和 3-5 给出了类属语句的一种典型应用。显然,类属语句的应用,为方便而迅速地改变电路的结构和规模提供了极便利的条件。    程序3-4    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;程序3-5    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           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)     PORT MAP (a(0)=>d1,a(1)=>d2,c=>q1);第3章   VHDL程序结构23      u2: andn GENERIC MAP (n =>5)      PORT MAP (a(0)=>d3,a(1)=>d4,a(2)=>d5,                           a(3)=>d6,a(4)=>d7, c=>q2);        END;程序 3-5 给出了类属映射语句 GENERIC MAP ( )配合端口映射语句 PORT MAP ( ) 语句的使用范例 端口映射语句是本结构体对外部元件调用和连接过程中 描述元件间端口的衔接方式的 而类属映射语句具有相似的功能 它描述相应元件类属参数间的衔接和传送方式 读者不妨利用程序3-5 中GENERIC MAP ( )的使用方法 作一些相关的练习来源:xmefans的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表