SystemVerilog package
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SystemVerilog package相关的知识,希望对你有一定的参考价值。
参考技术A在Verilog中,由于不能进行全局声明,因此当一个声明在多个设计块中用到,那么这个声明必须在每个块中进行声明,这样不仅显得冗余,而且如果在其中一个块中对声明进行了更改,却忘记修改其他设计块中出现的该声明,就会导致错误
基于这一点,SystemVerilog增加了包(package)
package是为了使多个块共享用户定义类型的定义
package定义在 package 和 endpackage 之间
package中可综合的结构有一下几种:
package中可以进行全局变量声明、静态任务定义和静态函数定义
package是一个独立的声明空间,不需要包含在Verilog模块中
下面是一个简单的package定义的例子:
在Verilog中,parameter常量可以重新定义,localparam常量不能重新定义
在package中,parameter常量和localparam常量均不可重新定义
引用package的方式有如下四种:
作用域解析操作符为 : :
package名和package中子项名有双冒号 (: :) 隔开
借用上例中定义的package,用作用域解析操作进行引用:
SV允许用 import 语句将package中特定子项导入到模块中
import 语句是package中子项局部可见,导入的package定义或声明就和模块或接口中的一个局部定义名一样
通过导入特定子项的方法,将上例进行简化:
导入特定子项时,对于导入枚举类型 只会导入枚举类型定义并不会导入那个定义使用的元素
例如 import definitions: : opcode_t; ,这个导入不会起作用
为了局部引用, 每个枚举元素必须显示导入
通配符为 *
通配符可以使package中所有子项都成为可见的,但通配符并不会自动导入整个package,只有实际使用的子项才真正被导入
下面使用通配符将上例简化:
$unit声明域内容较多,单独记录
本文主要摘自《SystemVerilog硬件设计与建模》
以上是关于SystemVerilog package的主要内容,如果未能解决你的问题,请参考以下文章