当前位置: 首页 > news >正文

SystemVerilog学习 (5)——接口

一、概述

        验证一个设计需要经过几个步骤:

  • 生成输入激励
  • 捕获输出响应
  • 决定对错和衡量进度

        但是,我们首先需要一个合适的测试平台,并将它连接到设计上。

3ef5e395cf464fcabe7701f6010dd993.jpeg

        测试平台包裹着设计,发送激励并且捕获设计的输出。测试平台组成了设计周围的“真实世界”,模仿设计的整个运行环境。例如,一个处理器模型需要连接到不同的总线和器件,这些总线和器件在测试平台中就被建模成总线功能模型。一个网络设备连接到多个输人和输出数据流,这些数据流根据标准的协议建模。一个视频芯片连接到送入指令的总线,然后根据写入内存模型的数据重建图像。这里的核心概念是除了待测设计(DUT,Design Under Test)的行为之外,测试平台仿真了其他的所有行为。
        由于Verilog的端口描述繁琐,代码常会长达数页,并且容易产生连接错误,所以测试平台需要一种更高层次的方法来跟设计建立通信。你需要一种可靠的描述时序的方法,这样就可以在正确的时间点驱动和采样同步信号,避免Verilog模型中常见的竞争状态。

        在进行验证的时候,我们尽量希望能够把设计部分和验证的部分分成,这里就会涉及到两个部分的连接问题,使用verilog的大家应该都知道,在verilog中对于端口的连接来说是一件非常枯燥和繁琐的事情,对于一个大的设计来说,端口的连接是非常耗时和易错的。SystemVerilog在这方面引入了接口来简化这一步骤。

二、接口interface

        在介绍接口之前,首先说明一个细节,我们知道在verilog中数据类型可以分成wire和reg两种,但是在SystemVerilog中,我们通过logic来取代了reg,唯一不能使用logic的地方是具有多个驱动的连线,只有在这种情况下,我们需要使用wire类型,其他时候,我们在SystemVerilog中都可以使用logic来实现。

1、接口的优势

3119a64b61b147dd8d655b4c061a7778.jpeg

·        对于接口来说,信号只需要在接口中定义一次,在之后的模块调用的过程中,就可以直接通过接口的方式进行连接了。

2、接口的内容

  • 接口不单单包含变量和线网,它还可以封装模块之间通信的协议
  •  此外接口中还可以嵌入与协议有关的断言检查、功能覆盖率收集等模块
  •  接口不同于模块(module)的地方在于,接口不允许包含设计层次,即接口无法例化module,但是接口可以例化接口
  •  接口中可以进一步声明modport来约束不同模块连接时的信号方向

3、接口的声明

61dc043ea05641998820577cdc3d0765.jpeg

        接口的定义和模块的定义是相似的,接口有时候也会有端口,经常是外部输入的时候或者复位信号等,接口内部也可以定义所有的变量或者线网类型。

4、接口的例化

         接口的例化方式和模块的例化是一致的, 需要注意的是:模块的端口如果声明为input、output或者inout,那么在例化时可以不连接。 模块的端口如果声明为interface,那么在例化时则必须连接到一个接口实例,或者另外一个接口端口。

5、modport

         接口中的变量或者线网信号,对于连接到该接口的不同模块则可能具备不同的连接方向。 接口引入了modport来作为module port的缩写,表示不同的模块看到同一组信号时的视角(连接方向)。在接口中声明modport,需要指明modport中各个信号的方向。

b663b75532ac479aaca151b550dd3139.jpeg

         当一个模块在例化时,可以选择连接到interface端口中具体的某一个modport。  这种方式可以降低方向连接错误的可能,进而避免信号多驱动的情况。

三、 总结

        在接口中不能例化模块,但是可以例化其他接口。带有modport的接口跟传统的连接到信号的端口相比各有千秋。

1.、接口的优势

        使用接口的优势如下:

        (1)接口便于设计重用。当两个块之间有两个以上的信号连接,并且使用特定的协议通信的时候,应当考虑使用接口。

        (2)接口可以用来替代原来需要在模块或者程序中反复声明并且位于代码内部的一系列信号,减少了连接错误的可能性。

        (3)要增加一个新的信号时,在接口中只需要声明一次,不需要在更高层的模块层声明。这进一步减少了错误。

        (4)modport 允许一个模块很方便地将接口中的一系列信号捆绑到一起,也可以为信号指定方向以方便工具自动检查。

2、接口的劣势

        使用接口的劣势如下:

        (1)对于点对点的连接,使用modport的接口描述跟使用信号列表的端口一样的冗长。接口带来的好处是所有的声明集中在一个地方,减少了出错的几率。

        (2)必须同时使用信号名和接口名,可能会使模块变得更加冗长。

        (3〉如果要连接的两个模块使用的是一个不会被重用的专用协议﹐使用接口需要做比端口连线更多的工作。

        (4〉连接两个不同的接口很困难。一个新的接口(bus_if)可能包含了现有接口(arb.if)的所有信号并新增了信号(地址.数据等等)。你需要拆分出独立的信号并正确地驱动它们。

 

相关文章:

SystemVerilog学习 (5)——接口

一、概述 验证一个设计需要经过几个步骤: 生成输入激励捕获输出响应决定对错和衡量进度 但是,我们首先需要一个合适的测试平台,并将它连接到设计上。 测试平台包裹着设计,发送激励并且捕获设计的输出。测试平台组成了设计周围的“真实世界”,…...

vue3插槽的使用

什么是插槽 Vue 3 插槽(Slots)是一个强大的工具,用于在组件之间传递内容和逻辑。通过使用插槽,我们可以将子组件中的内容插入到父组件中的特定位置。本篇文章将总结 Vue 3 插槽的基本用法、特点以及使用场景。 基本用法 插槽分为…...

IPTABLES问题:DNAT下如何解决内网访问内部服务器问题

这个问题,困扰了我几年了,今天终于得到解决。 问题是这样的,在局域网内部有一台服务器,通过IPTABLES的网关提供对外服务,做过IPTABLES网关的人都知道,这很容易做到,只要在网关机器上写一个DNAT…...

异步任务线程池——最优雅的方式创建异步任务

对于刚刚从校园出来的菜鸡选手很容易写出自以为没问题的屎山代码,可是当上线后就会立即暴露出问题,这说到底还是基础不够扎实!只会背八股文,却不理解,面试头头是道,一旦落地就啥也不是。此处,抛…...

uniapp 跨页面传值及跨页面方法调用

uniapp 跨页面传值及跨页面方法调用 1、跨页面传值 使用全局方法监听uni.$emit、uni.$on、uni.$off 发布、监听、移除 methods: {addFun(){let data [1]uni.navigateBack({ // 返回上一页delta: 1})uni.$emit(successFun,{data}) // 传值} }监听页 onLoad() {uni.$on(succ…...

无线物理层安全大作业

这个标题很帅 Beamforming Optimization for Physical Layer Security in MISO Wireless NetworksProblem Stateme![在这里插入图片描述](https://img-blog.csdnimg.cn/58ebb0df787c4e23b0c7be4189ebc322.png) Beamforming Optimization for Physical Layer Security in MISO W…...

目标检测标注工具AutoDistill

引言 在快速发展的机器学习领域,有一个方面一直保持不变:繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割,长期以来人工标记的数据集一直是监督学习的基础。 然而,由于一个创新性的工具 AutoDistill&#x…...

关于SPJ表的数据库作业

打字不易,且复制且珍惜 建表 use 库名;create table S( --供应商 SNO char(6) not null, SNAME char(10) not null, STATUS INT, CITY char(10), primary key(SNO));create table P( --零件 PNO char(6) not null, PNAME char(12)not null, COLOR char(4), WEIGHT…...

【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Nacos 一、nacos实现配置管理1.1 统一配置管…...

HTML5学习系列之网页图像

HTML5学习系列之网页图像 前言定义图像定义流定义图标 总结 前言 学习记录 定义图像 标签可以直接把图像插入网页中。 <img src"xx" alt"xx"/>src&#xff1a;显示图像的URLalt&#xff1a;设置图像的替代文本height、width&#xff1a;图像的高度…...

go语言学习之旅之Go语言数据类型

学无止境&#xff0c;今天学习Go 语言数据类型 Go&#xff08;或Golang&#xff09;是一种静态类型语言&#xff0c;这意味着变量的数据类型必须显式声明&#xff0c;并且在运行时不能更改。以下是Go中的一些基本数据类型&#xff1a; 这里仅介绍最常用的类型 数值类型: int: …...

Day49 力扣单调栈 : 739. 每日温度 |496.下一个更大元素 I

Day49 力扣单调栈 : 739. 每日温度 &#xff5c;496.下一个更大元素 I 739. 每日温度第一印象看完题解的思路什么是单调栈?我的总结 实现中的苦难感悟代码 496.下一个更大元素 I第一印象看完题解的思路实现中的困难感悟代码 739. 每日温度 今天正式开始单调栈&#xff0c;这是…...

实用篇-ES-RestClient查询文档

一、快速入门 上面的查询文档都是依赖kibana&#xff0c;在浏览器页面使用DSL语句去查询es&#xff0c;如何用java去查询es里面的文档(数据)呢 我们通过match_all查询来演示基本的API&#xff0c;注意下面演示的是 match_all查询&#xff0c;也叫基础查询 首先保证你已经做好了…...

2023年第九届数维杯国际大学生数学建模挑战赛

2023年第九届数维杯国际大学生数学建模挑战赛正在火热进行&#xff0c;小云学长又在第一时间给大家带来最全最完整的思路代码解析&#xff01;&#xff01;&#xff01; 下面是数维杯B题思路解析&#xff1a; 前面三问主要是绘制趋势图、散点图等这些比较简单的统计学分析方法…...

TensorRT基础知识及应用【学习笔记(十)】

这篇博客为修改过后的转载&#xff0c;因为没有转载链接&#xff0c;所以选了原创 文章目录 一、准备知识1.1 环境配置A. CUDA DriverB. CUDAC. cuDNND. TensorRT 1.2 编程模型 二、构建阶段2.1 创建网络定义2.2 配置参数2.3 生成Engine2.4 保存为模型文件2.5 释放资源 三、运…...

[内存泄漏][PyTorch](create_graph=True)

PyTorch保存计算图导致内存泄漏 1. 内存泄漏定义2. 问题发现背景3. pytorch中关于这个问题的讨论 1. 内存泄漏定义 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致…...

【Git学习二】时光回溯:git reset和git checkout命令详解

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;Git等软件工具技术的使用 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要…...

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MAT…...

MySQL缓冲池的优化与性能提升

“不积跬步&#xff0c;无以至千里。” MySQL是许多Web应用的核心数据库&#xff0c;而数据库的性能对于应用的稳定运行至关重要。在MySQL中&#xff0c;缓冲池&#xff08;Buffer Pool&#xff09;是一个关键的组件&#xff0c;它直接影响着数据库的性能和响应速度。今天这篇文…...

一些RLHF的平替汇总

卷友们好&#xff0c;我是rumor。 众所周知&#xff0c;RLHF十分玄学且令人望而却步。我听过有的小道消息说提升很大&#xff0c;也有小道消息说效果不明显&#xff0c;究其根本还是系统链路太长自由度太高&#xff0c;不像SFT一样可以通过数据配比、prompt、有限的超参数来可控…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...