热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

generic语句使用(VHDL编程)

GENERIC类属说明语句类属GENERIC参量是一种端口界面常数常以一种说明的形式放在实体或块结构体前的说明部分类属为所说明的环境提供了一种静态信息通道类属与常
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 ( )的使用方法 作一些相关的练习 

推荐阅读
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • MATLAB函数重名问题解决方法及数据导入导出操作详解
    本文介绍了解决MATLAB函数重名的方法,并详细讲解了数据导入和导出的操作。包括使用菜单导入数据、在工作区直接新建变量、粘贴数据到.m文件或.txt文件并用load命令调用、使用save命令导出数据等方法。同时还介绍了使用dlmread函数调用数据的方法。通过本文的内容,读者可以更好地处理MATLAB中的函数重名问题,并掌握数据导入导出的各种操作。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
手机用户250285627
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有