SystemVerilog学习(8)——包的使用

news2024/11/29 8:50:24

目录

一、包的定义

二、导出包的内容

 1、可以通过域的索引符::号直接引用

 2、可以指定索引一些需要的包中定义的类型到指定的容器中

 3、通过通配符*来将包中所有的类别导入到指定容器中

三、包的使用


        在进行本文的学习之前,首先需要对SV中类相关的内容有充分的认识,这部分内容在之前面向对象编程的部分有详细介绍:

SystemVerilog学习 (7)——面向对象编程icon-default.png?t=N7T8https://blog.csdn.net/apple_53311083/article/details/134427859?spm=1001.2014.3001.5502

一、包的定义

         为了使得可以在多个模块(硬件)或者类(软件)之间共享用户定义的类 型,SV添加了包(package)。包的概念参考于VHDL,用户自定义的类型譬如类、方法、变量、结构体、 枚举类等都可以在package...endpackage中定义。

package definitions; 
    parameter VERSION = "1.1"; 
    typedef enum {ADD, SUB, MUL} opcodes_t; 
    typedef struct { 
        logic [31:0] a, b; 
        opcodes_t opcode; 
    } instruction_t; 
    function automatic [31:0] multiplier(input[31:0] a, b); 
    return a * b;                                             // abstract multiplier 
    endfunction 
endpackage

二、导出包的内容

          包给人的感觉有一点像我们C语言中的库,我们知道最简单的程序"hello world"在打印printf的时候需要include一个标准库,类似的,我们想要使用包的内容,就需要把包中的内容进行导出,这些内容一般来说有:module、interface、class等可以使用包中定义或者声明的内容。

 1、可以通过域的索引符::号直接引用

module ALU(input definitions::instruction_t IW, 
           input logic clock, 
           output logic [31:0] result 
          );
 always_ff @(posedge clock) begin 
    case (IW.opcode) 
        definitions::ADD : result = IW.a + IW.b; 
        definitions::SUB : result = IW.a - IW.b; 
        definitions::MUL : result =  definitions::multiplier(IW.a, IW.b); 
    endcase 
 end 
endmodule

 2、可以指定索引一些需要的包中定义的类型到指定的容器中

module ALU(...); 
    import definitions::ADD; 
    import definitions::SUB; 
    import definitions::MUL; 
    import definitions::multiplier; 
    always_comb begin 
        case (IW.opcode) 
            ADD : result = IW.a + IW.b; 
            SUB : result = IW.a - IW.b; 
            MUL : result = multiplier(IW.a, IW.b); 
        endcase 
    end 
endmodule

 3、通过通配符*来将包中所有的类别导入到指定容器中

module ALU(...); 
    import definitions::*; // wildcard import 
    always_comb begin 
        case (IW.opcode) 
            ADD : result = IW.a + IW.b; 
            SUB : result = IW.a - IW.b; 
            MUL : result = multiplier(IW.a, IW.b); 
        endcase 
    end 
endmodule

        这是我们实际使用中最为简单的一种方式,一般也是应用最多的方式。 

三、包的使用

        在实际的使用过程中,经常会把一个大的验证平台的创建和设计部分封装成一个包的形式,然后我们再通过另一个tb文件导出包的形式来完成我们的验证目标。这样做的好处一方面是增加我们验证流程的层次性和条理性,同时增加了代码的复用率。包中可以使用class,module,interface等一系列的内容。在认知上,我们就可以把包认知为我们C语言中的函数库,我们verilog中的IP核。

        至此,其实我们已经可以完成一个相对完善的验证平台的搭建了,这样的一个验证平台可以包含有激励发生器(Stimulator),监测器(Monitor),比较器(Checker),这些部分都可以用类(class)来定义,在类中分别定义它们的数据和方法,然后再结合一部分操作,也封装成类的形式,将这些完整的部分都封装到包packet中,完成这部分后,独立编写测试平台testbench,按需要导入包的内容,在testbench中编写我们需要进行的验证操作,最后还可以结合Makefile,实现编译和操作展示的控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1218290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCL 提取点云边界轮廓-AC方法、平面轮廓

一、概述 PCL点云边界特征检测 (附完整代码 C)_pcl计算点云特征值_McQueen_LT的博客-CSDN博客 在点云的边界特征检测(网格模型的边界特征检测已经是一个确定性问题了,见 网格模型边界检测)方面,PCL中有一…

智慧城市大脑数据中台解决方案:PPT全套37页,附下载

关键词:智慧城市大脑解决方案,数据中台解决方案,智慧城市建设,数据中台建设,智慧城市大脑建设,数据中台建设架构 一、智慧城市大脑数据中台建设背景 智慧城市大脑数据中台是一个面向城市级数据管理、开发和…

双剑合璧:基于Elasticsearch的两路召回语义检索系统,实现关键字与语义的高效精准匹配

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

传递函数的推导和理解

传递函数的推导和理解 假设有一个线性系统,在一般情况下,它的激励 x ( t ) x(t) x(t)与响应 y ( t ) y(t) y(t)所满足的的关系,可用下列微分方程来表示: a n y ( n ) a n − 1 y ( n − 1 ) a n − 2 y ( n − 2 ) ⋯ a 1 y…

1分钟精准预测未来10天天气,谷歌开源GraphCast

11月15日,谷歌旗下著名AI研究机构Deepmind在官网宣布,开源天气大模型GraphCast,并公布了论文。 据悉,GraphCast可以在1分钟内,精准预测而来全球10天的天气情况,同时可以提前预警大暴雨、大风雪、洪水、高温…

【Linux网络】搭建内外网的网关服务器,实现DNS分离解析与DHCP自动分配

一、实验要求: 二、实验思路剖析: 网关服务器: 客户端准备: 实操: 第一步先安装dhcp服务和bind服务 第二步双网卡,配置网卡的ip地址 第三步:开始配置dhcp 第四步:做dns分离解析…

Vue|props配置

props是Vue中用于传递数据的属性。通过在子组件的选项中定义props属性,可以指定子组件可以接收的数据以及其他配置选项。父组件可以通过在子组件上使用特定的属性来传递数据。 目录 目录 App.vue 什么是App.vue 组件引用 props配置 组件复用 案例1&#xff1a…

吉利银河L6顶配 官方OTA升级降低充电速度

互联网是有记忆的 你宣传充电口 卖出去又更新降低速度 属于诈骗 吉利新车上市两个月官降1w,希望大家引以为戒,可以买,但是刚出别着急做韭菜

AE 的软件、硬件、驱动控制、调试策略(没有算法)

#灵感# AE是个值得推敲再推敲的模块,有意思。 目录 相关的硬件-光圈: 相关的软件-曝光-ISO: ISP中的sensor AE 组成: sensor AE的流程及控制: tuning时AE的一些策略: 相关的硬件-光圈: 光…

网络安全(大厂面试真题集)

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年…

t-product的matlab实现

t-product是一个比较好的概念,相对应于矩阵中的乘法。 定义如下 这里的 circ(A),MatVec(b) 的定义分别如下 这么定义的原因是为了映射到FFT域里面去,简化计算。 上面的一段摘录说明:直接按照定义来计算,会耗费大量的计算资源。因…

【2.5w字吐血总结 | 新手必看】全网最详细MySQL笔记

写在前面 鉴于全网MySQL知识点的总结分散难懂、良莠不齐,为了避免初学者少走弯路,更好更快地掌握MySQL知识,博主特地将自己所学的笔记分享出来。 如果想深度理解掌握MySQL,欢迎订阅专栏:MySQL进阶之路【秋说】&#…

adguarg通过dns代理全局过滤广告,全系统操作指南

路由器dns配置 安卓(鸿蒙) 设置>>其他网络与连接>>私人DNS(不同手机系统设置名称会有些许出入,但是大差不差) (左图鸿蒙):将域名m.centos.chat填入手机私人DNS IOS系统 将代理服务器IP&am…

delphi电子处方流转(医院)

【delphi电子处方流转(医院)】支持 就诊登记、电子处方上传预核验、处方处方医保电子签名、电子处方上传、电子处方撤销、电子处方信息查询、电子处方审核结果查询、电子处方取药结果查询、电子处方药品目录查询等功能。

UE4动作游戏实例RPG Action解析四:装备系统

导语: 以加血道具为例,详细分析拆解ActionRPG的装备系统,包含装备系统需求和数据结构设计,以及实现 一、装备系统需求: 装备槽: 已获取装备和未获取装备: 当已经装备一个道具时,再次捡到道具,会把道具放在装备库,不会放在装备槽中, 当没有装备道具时,会拾取道具…

Digicert证书:您的网络安全守护神

在当今数字化的世界中,网络安全已经成为每一个企业和个人必须面对的问题。而Digicert品牌证书,就是您网络安全的最佳选择。它不仅具有强大的安全性和稳定性,还能广泛应用于各种场景,为您提供全方位的保护。 首先,我们要…

Xrdp+内网穿透实现远程访问Linux Kali桌面

XrdpCpolar实现远程访问Linux Kali桌面 文章目录 XrdpCpolar实现远程访问Linux Kali桌面前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于…

【硬核】把一个MOS管制作成开关电路

你要是想读懂这篇文章,请先去了解MOS管的基础知识,本文是在基础之上做出的一部分扩展,可能有一点点深,请各位同学注意。 本文带你了解MOS管的开通/关断原理,使用PMOS做上管、NMOS做下管都是比较方便,使用PM…

腾讯云服务器新用户专享优惠券,腾讯云新用户代金券领取入口汇总

什么是腾讯云新用户专享优惠券? 腾讯云新用户专享优惠券是腾讯云为新用户提供的一种特别优惠。你可以在购买腾讯云服务器时使用这些优惠券,以更低的价格获得优质的云服务。 为了回馈广大新用户,腾讯云服务器推出了一系列优惠活动&#xff0…

KeyarchOS的CentOS迁移实践:使用操作系统迁移工具X2Keyarch V2.0

KeyarchOS的CentOS迁移实践:使用操作系统迁移工具X2Keyarch V2.0 作者: 猫头虎博主 文章目录 KeyarchOS的CentOS迁移实践:使用操作系统迁移工具X2Keyarch V2.0🐅摘要引言1. 迁移前的精心准备1.1 系统环境介绍1.2 深度数据验证1.2.…