generic语句使用(VHDL编程)

GENERIC类属说明语句
类属 GENERIC 参量是一种端口界面常数 常以一种说明的形式放在实体或块结
构体前的说明部分 类属为所说明的环境提供了一种静态信息通道 类属与常数不同 常
数只能从设计实体的内部得到赋值 且不能再改变 而类属的值可以由设计实体外部提供
因此 设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件
的内部电路结构和规模
类属说明的一般书写格式如下
GENERIC([ 常数名 数据类型 [ : 设定值 ]
{ 常数名 数据类型 [ : 设定值 ] } )
类属参量以关键词 GENERIC 引导一个类属参量表 在表中提供时间参数或总线宽度
等静态信息 类属表说明用于设计实体和其外部环境通信的参数 传递静态的信息 类属
在所定义的环境中的地位与常数十分接近 但却能从环境 如设计实体 外部动态地接受
赋值 其行为又有点类似于端口 PORT 因此常如以上的实体定义语句那样 将类属说明
放在其中 且放在端口说明语句的前面
在一个实体中定义的 来自外部赋入类属的值可以在实体内部或与之相应的结构体中
读到 对于同一个设计实体 可以通过 GENERIC 参数类属的说明 为它创建多个行为不
同的逻辑结构 比较常见的情况是利用类属来动态规定一个实体的端口的大小 或设计实
体的物理特性 或结构体中的总线宽度 或设计实体中底层中同种元件的例化数量等等
一般在结构体中 类属的应用与常数是一样的 例如 当用实体例化一个设计实体的
器件时 可以用类属表中的参数项定制这个器件 如可以将一个实体的传输延迟 上升和
下降延时等参数加到类属参数表中 然后根据这些参数进行定制 这对于系统仿真控制是
十分方便的 其中的常数名是由设计者确定的类属常数名 数据类型通常取 INTEGER 或
TIME 等类型 设定值即为常数名所代表的数值 但需注意 VHDL 综合器仅支持数据类
型为整数的类属值
程序3-2和3-3是两个使用了类属说明的实例描述
   程序3-2
   ENTITY mcu1 IS
GENERIC (addrwidth : INTEGER := 16);
PORT(
     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实用教程 22
ENTITY 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);
      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 ( )的使用方法 作一些相关的练习 
  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于设计和开发数字系统。VHDL编程的基本方法包括以下几个方面。 首先,了解VHDL语言的基本语法和语义。掌握关键字、数据类型、运算符和控制结构等基本语法元素,了解信号的声明和赋值、过程的定义和调用等语义规则。 其次,进行模块化设计。将系统划分为若干个模块,每个模块对应一个框图,通过输入输出接口和内部信号进行连接。模块化设计方便测试和维护,提高系统的可重用性。 然后,编写实体描述。使用VHDL语言描述系统中的各个模块,包括输入输出端口、内部信号和子模块的实例化。实体描述还包括各个模块的功能和行为,可以利用逻辑表达式、状态图或状态转换表等方式进行描述。 接着,进行行为描述。使用过程语句、条件语句和循环语句等语法,实现需要的功能和操作。行为描述可以描述模块的数据流、状态转换和控制逻辑等。 最后,进行仿真和综合。使用仿真工具验证系统设计的正确性和功能性,并进行性能分析和优化。综合工具将VHDL代码转换为硬件电路,生成对应的门级网表,进行布线和布局。 总之,VHDL编程的基本方法包括掌握语法和语义、进行模块化设计、编写实体描述、进行行为描述,以及进行仿真和综合。掌握这些基本方法可以帮助设计和开发高性能、可靠的数字系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值