SystemVerilog package

SystemVerilog学习笔记4——OOP、句柄、对象、静态变量/方法、类、包 目录类和对象的概述验证为何需要OOP?OOP概念要素句柄的传递对象的销毁静态变量静态方法类的成员类与结构体的异同类与模块的异同类的相关问题类的继承句柄的使用包的使用 类和对象的概述 类是将相同个体抽象出来的描述方式,对象是实体,其具备有独立行为的能力;具有相同属性和功能的对象属于同一类,不同类之间可能有联系(继承)或没有联系; C语言中,编程基于过程方法,在Verilog中提供了笨拙的类对象编程可能性,即在module中定义方法,而后调用module实例中的方法; Verilog的module+met 阅读详情

SystemVerilog package

在Verilog中,由于不能进行全局声明,因此当一个声明在多个设计块中用到,那么这个声明必须在每个块中进行声明,这样不仅显得冗余,而且如果在其中一个块中对声明进行了更改,却忘记修改其他设计块中出现的该声明,就会导致错误

基于这一点,SystemVerilog增加了包(package)

1. 包的定义

package是为了使多个块共享用户定义类型的定义

package定义在package和endpackage之间

package中可综合的结构有一下几种:

  • parameter和localparam常量定义
  • const常量定义
  • typedef用户定义类型
  • 全自动task和function定义
  • 从其他package中import语句
  • 操作符重载定义

package中可以进行全局变量声明、静态任务定义和静态函数定义

package是一个独立的声明空间,不需要包含在Verilog模块中

下面是一个简单的package定义的例子:

package definitions;
    parameter	version = "1.1";
    
    typedef enum {ADD, SUB, MUL} opcodes_t;

    typedef struct {
        logic	[31:0]	a, b;
        opcodes_t	opcode;	//声明的opcode中包含 ADD, SUB和MUL
    } instruction_t;
    
    function	automatic	[31:0]	multiplier	(input	[31:0]	a, b);
        return a * b;
    endfunction
endpackage 

在Verilog中,parameter常量可以重新定义,localparam常量不能重新定义

在package中,parameter常量和localparam常量均不可重新定义

2. 应用package的内容

引用package的方式有如下四种:

  1. 用范围解析操作符直接引用
  2. 将package中特定子项导入到模块或接口中
  3. 用通配符导入包中的子项到模块或接口中
  4. 将包中子项导入到$unit声明域中

2.1 作用域解析操作符引用package

作用域解析操作符为: :

package名和package中子项名有双冒号 (: 😃 隔开

借用上例中定义的package,用作用域解析操作进行引用:

module	ALU (
	input	definitions: : instruction_t IW, //用IW代表上例中instruction_t
    input	logic	clk,
    output	logic	[31:0]	result
);
    always_ff @ (posedge clk) begin
        case (IW.opcode) //IW即可代表上例中instruction_t
            definitions: :	ADD	:	result = IW.a + IW.b;
            definitions: :	SUB	:	result = IW.a - IW.b;
            definitions: :	MUL	:	result = definitions: :	multiplier(IW.a, IW.b); //调用上例中的function
        endcase
    end
endmodule

2.2 导入package中特定子项

SV允许用import语句将package中特定子项导入到模块中

import语句是package中子项局部可见,导入的package定义或声明就和模块或接口中的一个局部定义名一样

通过导入特定子项的方法,将上例进行简化:

module	ALU (
	input	definitions: : instruction_t IW, //用IW代表上例中instruction_t
    input	logic	clk,
    output	logic	[31:0]	result
);
    import	definitions: : ADD;
    import	definitions: : SUB;
    import	definitions: : MUL;
    import	definitions: : multiplier;
    
    always_ff @ (posedge clk) begin
        case (IW.opcode) //IW即可代表上例中instruction_t
            ADD	:	result = IW.a + IW.b;
            SUB	:	result = IW.a - IW.b;
            MUL	:	result = multiplier(IW.a, IW.b); //调用上例中的function
        endcase
    end
endmodule

导入特定子项时,对于导入枚举类型只会导入枚举类型定义并不会导入那个定义使用的元素

例如import definitions: : opcode_t;,这个导入不会起作用

为了局部引用,每个枚举元素必须显示导入

2.3 通配符导入

通配符为*

通配符可以使package中所有子项都成为可见的,但通配符并不会自动导入整个package,只有实际使用的子项才真正被导入

下面使用通配符将上例简化:

module	ALU (
	input	definitions: : instruction_t IW, //用IW代表上例中instruction_t
    input	logic	clk,
    output	logic	[31:0]	result
);
    import	definitions: : *;	//通配符导入
    
    always_ff @ (posedge clk) begin
        case (IW.opcode) //IW即可代表上例中instruction_t
            ADD	:	result = IW.a + IW.b;
            SUB	:	result = IW.a - IW.b;
            MUL	:	result = multiplier(IW.a, IW.b); //调用上例中的function
        endcase
    end
endmodule

$unit声明域内容较多,单独记录


本文主要摘自《SystemVerilog硬件设计与建模》

SystemVerilog Package机制详解:从基础语法到UVM实战架构设计 在数字芯片验证与设计领域,代码复用和模块化是提升开发效率的核心。SystemVerilog的Package机制作为一种命名空间管理工具,通过封装常量、数据类型、函数和类定义,解决了大型项目中代码组织混乱、命名冲突和编译依赖的难题。其原理在于创建独立的声明集合容器,支持显式导入与通配符导入两种方式,有效管理作用域。这一机制的技术价值在于显著提升代码的可维护性、可移植性和编译效率,尤其在基于UVM的验证环境中,Package成为构建模块化验证组件(UVC)和验证IP(VIP)的基石。应用场景涵盖从单一模块的参数 阅读详情

相关推荐

#systemverilog# 关键字之 package 常见用法

/定义一个包//定义包中一个参数//定义包中枚举opcodes_t//声明自定义类型变量//定义包中结构体instruction_t//定义函数function,其中参数为a,b// 用户定义的function代码从这开始endfunction //function定义结束endpackage //包定义结束);// 通配符导入。实际上是将包添加到标识符搜索路径中//引用ADD时,在definitions包中查找该名称的定义endcaseendendmodule。

那么菜的博客 2507

SystemVerilog 语法(1)package 的使用

SystemVerilog 中的 package 语法用于将相关的类型、常量、函数和任务组织在一起,以便在多个模块中共享和重用。模块化:使用 package 语法可以将代码分割成多个逻辑模块,使得代码更加模块化,易于维护和重用。作用域控制:package 语法可以控制变量和函数的作用域,避免了变量和函数名称冲突的问题。封装性:使用 package 语法可以将一些私有的变量和函数封装起来,只对外暴露必要的接口,增强了代码的封装性和安全性。

记录学习历程 3683

[SV]SystemVerilog学习笔记之packet

SystemVerilog学习笔记(一) 一、包(package) 1.1.package的定义 package在package和endpackage这两个关键字之间定义。 包中可以包含的可综合的结构有: parameterandlocalparamconstant definitions常量 constvariable definitions变量 typedefuser-defined types用户定义类型 Fully...

元直的博客 4959

[SystemVerilog] Packages

package是一个独立的命名空间,用于封装可重用的代码元素,如类型(typedef)、枚举(enum)、结构体(struct)、函数(function)、任务(task)、参数(parameter)等。package代码复用:定义一次,多个模块或测试环境可共享。命名空间:避免命名冲突,增强代码组织性。模块化:将通用逻辑或类型集中管理,便于维护。综合支持:支持硬件设计中的常量和类型定义。package的基本用法是定义一组共享的类型或函数,并在模块中导入使用。package常用于定义类型,如。

S&Z3463的博客 1356

【从零开始学习 SystemVerilog】9.3、SystemVerilog 杂项—— Package

【从零开始学习 SystemVerilog】9.3、SystemVerilog 杂项—— Package

努力,加油每一天鸭~ 664

避开这些坑,你的Python爬虫才能稳定爬取IEEE Xplore(含反爬策略与MongoDB存储实战)

本文详细介绍了如何构建稳定的Python爬虫系统以爬取IEEE Xplore学术论文,包括反爬策略、MongoDB存储优化和断点续传机制。通过动态等待时间算法、请求头指纹管理和会话保持策略,有效应对IEEE的反爬机制。同时,优化MongoDB数据结构和索引,提升存储效率。最后,强调法律合规与伦理考量,确保爬虫合法合规运行。

weixin_29031057的博客 1096

systemverilog中的package

在 SystemVerilog 中,Package(包)是一种用于将相关的类型定义、常量、任务、函数和类组织在一起的容器。它是解决大型设计和验证工程中“代码污染”和“命名冲突”的核心机制。package是一个独立的命名空间。可以把它想象成一个“工具箱”,里面存放着项目通用的各种定义,供不同的module或interface调用。// 1. 类型定义// 2. 常量定义// 3. 结构体定义} packet_s;// 4. 类定义 (通常配合 `include 使用)

IC验证及芯片SOC知识分享 1044

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 259

systemverilog中package的使用

systemverilog中package的使用

m0_71354184的博客 715

Ubuntu 22.04下Realtek R8125网卡驱动安装避坑指南(附DKMS自动编译配置)

本文详细介绍了在Ubuntu 22.04系统上为Realtek R8125 2.5GbE网卡安装驱动的完整流程与避坑指南。针对内核通用驱动r8169的冲突问题,重点讲解了如何通过DKMS(Dynamic Kernel Module Support)实现驱动的持久化自动编译与安装,确保系统内核升级后网卡驱动依然有效。内容包括环境准备、驱动源码获取、DKMS标准配置、驱动冲突解决(设置黑名单)以及日常维护与故障排查方法,旨在为用户提供一个一劳永逸的稳定解决方案。

echo99的专栏 1023

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2088

SystemVerilog中package import和`include方式的差异

翻译一篇文章,介绍了systemverilog中,package和`include在使用上的区别。原文地址: SystemVerilog Coding Guidelines: Package import versus `include //=============================华丽的分割线=============================// 另一个我们经...

kevindas的博客 7348

OpenClaw实战系列04:Jira/Confluence深度集成实战指南

汇总 Confluence 空间 TEAM 下所有关于“性能优化”的文档,输出要点自然语言创建和查询 Jira 任务,无需离开聊天工具基于 Confluence 的私有知识库问答,让 AI 真正理解团队文档Jira 与 Confluence 联动,打通项目管理与知识管理定时同步与通知,自动化团队信息流转至此,你的 OpenClaw AI 助理已经不仅是一个聊天机器人,而是真正融入团队工作流的“智能项目管理助手”。下一期我们将带来OpenClaw 自定义技能开发实战。

PeterPan的博客 574

【SystemVerilog】Package包 用途

Package的应用通常在代码文件较多或者复用别人的代码的时候会用到,这就导致了这块东西容易被忽略。本文内容分两部分,第一部分通过类比来介绍package包的两大作用,第二部分将提供package的代码例程作为编程指导。 package两大作用 Package这个概念在很多编程语言中都有对应的语法结构,比如Python、Java、Perl等等,足以说明它有多么重要!Package有两大作用,一方面是为了代码分发,package提供了代码封装效果,提高了代码的重用性(reuseability);另一方面是为了

oldmoney 744

代谢组数据分析(五):代谢组的功能富集分析

本文介绍了代谢组数据分析中的功能分析,包括代谢物富集分析、GSEA和ssGSEA方法。文章详细阐述了分析原理、应用背景、数据准备、统计方法以及结果解释,强调了在代谢通路和代谢物ID对应关系建立、差异代谢物筛选、富集程度计算等方面的关键步骤。通过这些方法,可以揭示差异代谢物在生物过程中的作用,为疾病研究和药物开发提供依据。

专注生信领域 5983

ISO2626 --- Item Definition相关项定义

本文并不是针对ISO26262的一个项目,而是针对ISO26262的规范,我们在相关项定义阶段,我们需要做什么,我们的文档需要包含哪些内容的一个描述。

wj博客 909

[SystemVerilog语法拾遗] 关于package使用时的一些注意事项

介绍了systemverilog中package的使用

sunstat的博客 1648

12306自动抢票系统:基于DrissionPage的智能购票实战

摘要:本文介绍了一个基于DrissionPage的12306自动抢票系统实现方案。该系统通过模拟真实用户操作,实现了车票查询、登录认证、座位选择和订单提交的全流程自动化。项目采用DrissionPage库替代传统Selenium方案,具有更简洁的API设计和更好的性能表现。核心技术包括数据包监听、动作链模拟和反爬虫应对策略,实现了高效可靠的车票抢购功能。系统包含完整的业务流程设计,从环境初始化到最终订单提交,并提供了清晰的数据展示界面。本文强调该项目仅用于技术研究,在实际使用中应严格遵守12306平台规则

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 2793

c++ builder 编译一个package dcc fatal error_SystemVerilog中Package

本文从微信公众号--数字IC小站,​转载,欢迎关注,微信公众号更新更多更快SystemVerilog中Package​mp.weixin.qq.comPackage是systemverilog中的语言结构,它使相关的声明和定义能够组合在一起。Package可能包含类型定义,常量声明,函数和类模板。为了能在一个范围内使用Package,必须先导入它,然后才能引用其内容。我们一般把不同模块的类定义在不...

weixin_33219863的博客 273

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

96.【SV】SystemVerilog Package(包)

SystemVerilog包(Package)是验证工程师的"公共工具箱",解决了Verilog时代代码共享困难的问题。Package作为独立命名空间,可包含数据类型、函数、参数等,通过导入或::引用使用。其搜索顺序遵循"本地>显式导入>通配符导入"规则,需注意命名冲突。包可嵌套引用,但导入不具传递性。在可综合设计中,Package支持参数、用户类型等,但变量和静态任务/函数中的静态变量不可综合。Package显著提升了代码复用性和维护效率,是System

啄缘之间的博客 918

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【SystemVerilog】1 randcase package force

sv

weixin_49977631的博客 496

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

systemverilog中的package及import、`include

systemverilog中的package出现以及涉及的import和include的区别。

weixin_44029856的博客 1857

SystemVerilog 概念浅析之package(import& `include)

SystemVerilog中的package提供了保存和共享数据、参数和方法的机制,可以在多个module、class、program和interface中重用。 package中声明的内容都属于这个package作用域(scope)。在使用这些内容时,需要先import这个package,然后通过package引用。 SystemVerilog中的package通过package和endpackage声明 package my_pkg; typedefenumbit [1:0] { RED,YELLO

oldmoney 1255

关于systemverilog package的一些用法

systemverilog里面的package有点类似C++中的名字空间namespace。 通过import package可以获得package里面声明的类型或变量。 但当package里面也import了别的package的话,是否可以获得内部import package声明的类型或变量呢? 例如: package A;   class c_a;     ...   endcl...

weixin_30710457的博客 1501

import package 查看内容_SystemVerilog 概念浅析之package(import&include)

SystemVerilog中的package提供了保存和共享数据、参数和方法的机制,可以在多个module、class、program和interface中重用。package中声明的内容都属于这个package作用域(scope)。在使用这些内容时,需要先import这个package,然后通过package引用。SystemVerilog中的package通过package和end...

weixin_34229622的博客 859

SystemVerilog中package(包)的基本使用

包(package)的使用 package声明 SystemVerilog包提供了一种额外的机制,用于在多个SystemVerilog模块、接口、程序和检查器之间共享参数、数据、任务、函数、序列、属性和检查器声明。 包是显式命名的作用域,出现在源文本的最外层(与顶级模块和原语处于同一级别)。 其中,我们可以理解,其实package里包的就是一些数据的。像interface,module是不能定义在package中的。 包的作用 1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。 2、如同文

啦啦啦啦啦 8007
上一篇: SV强制类型转换和常数
下一篇: SV中$unit编译单元
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值