SystemVerilog中的package如何在设计中使用?
SystemVerilog中的packages用于在不同module和interface之间共享parameters、types、tasks和functions。
packages是一个name space,其和top level在同一个层次。
在任何SystemVerilog/Verilog设计项目中,设计团队通常都会共享一些parameters、types、tasks和functions。将这些通用结构放入packages中,就可以在团队中进行共享。
在packages中指定所有通用结构后,需要先analyze package。然后单独analyze和elaborate使用该packages中某些parameters、types、tasks和functions的模块。
无需reanalyze 这个package,当共享packages很大时,可以节省很多运行时间。
SV语言提供了一种在多个module、interface和program之中共享parameter、data、type、task、function、class等等的方法,即利用package(包)的方式来实现。如果用上面装修一个大房子(MCDF testbench)来看的话,我们喜欢将不同模块的类定义归整到不同的package中。这么做的好处在于将同一簇相关的类组织在了单一的名字空间(namespace)下,使得分属于不同模块验证环境的类首先来自于不同的package,这样可以通过package来区别类的归属问题。
package regs_pkg;
`include "stimulator.sv"
`include "monitor.sv"
`include "chker.sv"
`include "env.sv"
endpackage
【路科】SV系统集成篇之一:包的意义
- 在创建package的时候,已经在指定包名称的时候隐含地指定了包的默认路径,即包文件所在的路径。如果有其它要被包含在包内的文件在默认路径之外,需要在编译包的时候加上额外制定的搜寻路径选项“+incdir+PATH”。
- 用户可以在module、interface或者program中来引用package。
- package 中可以import其他package
- import操作使得类型可见的域只是调用该import时当前的域;
在pkg中include 所有的component;
package tinyalu_pkg;
import uvm_pkg::*;
`include "uvm_macros.svh"
typedef enum bit[2:0] {
no_op = 3'b000,
add_op = 3'b001,
and_op = 3'b010,
xor_op = 3'b011,
mul_op = 3'b100,
rst_op = 3'b111} operation_t;
typedef struct {
byte unsigned A;
byte unsigned B;
operation_t op;
} command_s;
`include "coverage.svh"
`include "base_tester.svh"
`include "random_tester.svh"
`include "add_tester.svh"
`include "scoreboard.svh"
`include "command_monitor.svh"
`include "result_monitor.svh"
`include "env.svh