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)的所有信号并新增了信号(地址.数据等等)。你需要拆分出独立的信号并正确地驱动它们。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ExoPlayer架构详解与源码分析(8)——Loader

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

嵌入式养成计划-53----ARM--串口通信

一百三十四、串口通信 134.1 串口的概念 串口(UART):Universal asynchronous receiver transmitter (USART/UART),通用异步接收发送器通过串口可以实现两个不同机器之间的信息交互串口通信属于总线通信的一种 134.2 总线的概念…

服务名无效。 请键入 NET HELPMSG 2185以获得更多的帮助

遇到的问题是MySQL服务没有。 因为net start 服务名,启动的是win下注册的服务。此时,我系统中并没有注册mysql到服务中。即下面没有mysql服务。 mysqld --install net start mysql

OpenCV入门2——图像视频的加载与展示一些API

文章目录 题目OpenCV创建显示窗口OpenCV加载显示图片题目 OpenCV保存文件利用OpenCV从摄像头采集视频从多媒体文件中读取视频帧将视频数据录制成多媒体文件OpenCV控制鼠标关于[np.uint8](https://stackoverflow.com/questions/68387192/what-is-np-uint8) OpenCV中的TrackBar控…

Python---数据序列中的公共方法

公共方法就是 支持大部分 数据 序列。 常见公共方法---简单 运算符描述支持的容器类型合并字符串、列表、元组*复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 案例: 合并 代码: # …

微机原理_9

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。 1.当运算结果的最高位为1时,标志位() A. CF1 B. OF1 C. SF1 D. ZF1 2、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可…

windows安装maven,配置环境变量

官网下载: 其他版本找 Other Releases 配置环境变量 1、解压缩之后开始配置环境变量 2、右键此电脑,选中属性->高级系统设置->高级->环境变量。 3、①和②任选一个都可 ①在系统变量那边增加MAVEN_HOME,路径是解压缩后的文件路径。…

如何使用 Github Action 管理 Issue

本文作者为 360 奇舞团前端开发工程师 Daryl 前言 很多小伙伴打开 github 上的仓库都只使用Code查看代码,或者只是把 github 当成一个代码仓库,但是 github 还提供了很多好用的功能。 其中,GitHub Action就是一个很好用的功能,本文…

双点重发布路由策略实验

任务&IP分配如下: 双点重发布实验 第一步:配置IP地址&环回地址 以R1为例,R2、R3、R4同理 interface GigabitEthernet 0/0/0 ip address 12.0.0.1 24 interface GigabitEthernet 0/0/1 ip address 13.0.0.1 24 interface LookBack …

[Unity3D] C# 十进制、二进制、十六进制 之间进制的转换

//十进制 --> 二进制 int data 100; string bin Convert.ToString(data, 2); // “1100100”//十进制 --> 十六进制 int data 100; string hex “”;hex Convert.ToString(data, 16); // “64” hex “0X” Convert.ToString(data, 16); // “0X64” hex string.…

ubuntu下C++调用matplotlibcpp进行画图(超详细)

目录 一、换源 二、安装必要的软件 三、下载matplotlibcpp 四、下载anaconda 1.anaconda下载 2.使用anaconda配置环境 五、下载CLion 1.下载解压CLion 2.替换jbr文件夹 3.安装CLion 4.激活CLion 5.CLion汉化 6.Clion配置 六、使用CLion运行 七、总结 我的环…

demo(二)eurekaribbon----服务注册、提供与消费

前一篇实现了服务注册中心的搭建,并提供服务注册到注册中心上。在之前的基础上,实现服务消费。 一、相关介绍 1、RestTemplate工具 2、LoadBalanced注解 二、ribbon示例: 先启动eureka-service注册中心,再将eureka-client修改…