Dinglei_hello · 2021年10月25日

SystemVerilog Package的一些编码规范

package 是SystemVerilog语言的一种数据结构,它允许将相关的声明和定义打包在同一个namespace中。package 可能包含类型定义、常量声明、函数和类模板。要想在某个作用域内使用package ,必须先导入该包。

package 是组织代码和确保类型一致的有效方法,这里需要仔细去区分下和include的区别。UVM基类库包含在一个名为“uvm_pkg”的package 中。在开发UVM testbenche 时,应该使用package来组织agents、envs、sequence libraries、test libraries等组件中的各种类定义。

1、一个package 及其相应的SV文件应该用一个_pkg后缀来命名。例如spi_env_pkg.sv文件应该包含package spi_env_pkg。使用独立的SV文件表明这个package 文件是一个独立的编译单元。_pkg后缀表示该文件中包含一个package 。这种编码规范对工程师和工具脚本都很友好。

2、package 中包含的类应该使用include在package 内声明的类模板应该被分离到扩展名为.svh的单个文件中。这些文件应该按照必要的编译顺序进行include。package 文件是唯一应该使用include的地方,在include文件中不应该有进一步的include语句。在单独的文件中声明类可以使它们更容易维护,也可以使package 的内容更清晰。

3、其他packages 中的Imports 应在package 的顶部声明。一个package的内容可能需要参考另一个package 的内容。在这种情况下,外部package 应该在该package 代码的开头声明。

4、一个package 使用的所有文件都应该位于一个目录中。

下面是一个针对UVM env的package 文件的示例。这个env包含两个agents (spi和apb)和一个register model ,它们作为子package 导入。与env相关的类模板通过include导入:


package spi_env_pkg;
// Standard UVM import & include:
import uvm_pkg::*;
`include "uvm_macros.svh"

// Any further package imports:
import apb_agent_pkg::*;
import spi_agent_pkg::*;
import spi_register_pkg::*;

// Includes:
`include "spi_env_config.svh"
`include "spi_virtual_sequencer.svh"
`include "spi_env.svh"
endpackage: spi_env_pkg

经常让人感到困惑的是 SystemVerilog package的作用范围(scope)。如果将package导入到另一个scope(即另一个package或module),则只有package的内容可见,它导入的其他package的内容不可见,这是需要重新导入

package spi_test_pkg;
// The UVM package has to be imported, even though it is imported
// in the spi_env package. This is because the import of the uvm_pkg
// is only visible within the current scope
import uvm_pkg::*;
// The same is true of the `include of the uvm_macros
`include "uvm_macros.svh"
// Import of uvm_pkg inside the spi_env package is not
// visible within the scope of the spi_test package
import spi_env_pkg::*;
endpackage: spi_test_pkg
作者:验证哥布林
原文链接:https://mp.weixin.qq.com/s/vDwN2bSO_2CLDWbM12rJSQ
微信公众号:
芯片验证工程师.jpg

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏
推荐阅读
关注数
10967
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息