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的主要内容,如果未能解决你的问题,请参考以下文章

请教systemverilog中的interface问题

SystemVerilog 编写FSM

systemverilog 断言中assume 和assert的区别

systemverilog 为啥要用$cast类型转换函数

参数化模块 (SystemVerilog)

vcs怎么编译产生随机激励的systemverilog语句