systemverilog:interface中的modport用法

        使用modport可以将interface中的信号分组并指定方向,方向是从modport连接的模块看过来的。简单示例如下:

interface cnt_if (input bit clk);logic rstn;logic load_en;logic [3:0] load;logic [7:0] count;modport TEST (input  clk, count,output rstn,load_en,load);modport  DUT  (input clk,rstn,load_en,load,output count);endinterfacemodule Design(clk,rstn,load_en,load,count );input clk,rstn,load_en,load;
output reg [7:0] count;always @(posedge clk or negedge rstn)if(!rstn)count<=0;else count<=count+1;endmoduleclass  AA;virtual cnt_if.DUT this_s;function new(virtual cnt_if.DUT if_inst);this_s=if_inst;
endfunctiontask assig();this_s.rstn=0;repeat(100) @(posedge this_s.clk);this_s.rstn=1;this_s.load_en=0; this_s.load=1; this_s.count='d56;repeat(100) @(posedge this_s.clk);this_s.rstn=0; this_s.load_en=1; this_s.load=0; this_s.count='d34;endtaskendclass module tb;logic clk;initial begin clk=0; endalways #5 clk=~clk;//cnt_if.DUT if_instance (clk);cnt_if if_instance (clk);AA ainstance=new(if_instance.DUT);//Design(clk,rstn,load_en,load,count );Design design_inst(.clk(if_instance.DUT.clk), .rstn(if_instance.DUT.rstn) ,.load_en(if_instance.DUT.load_en ), .load(if_instance.DUT.load) ,.count(if_instance.DUT.count)  );initial beginainstance.assig;endendmodule

注意:
(1)在interface中使用modport将信号分组后,在tb中例化时,直接例化interface的实例,不能例化interface中modport的实例;
(2)在calss中直接例化interface中modport的实例;
(3)在tb中实例化interface的实例后,将interface的实例的modport通过点运算符传递给DUT。

仿真波形如下:

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

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

相关文章

接口自动化测试用例编写规范

一、接口自动化测试用例设计方法 1.1接口参数覆盖 接口测试通过输入使用参数组合&#xff0c;获得服务器返回值&#xff0c;并根据预先设定的规则判断是否符合预期值。在接口测试中&#xff0c;根据接口的功能不同&#xff0c;需要侧重检测的方面也不同。主要从以下几个方面考…

python 基础语法 (常常容易漏掉)

同一行显示多条语句 python语法中要求缩进&#xff0c;但是同一行可以显示多条语句 在 Python 中&#xff0c;可以使用分号 (;) 将多个语句放在同一行上。这样可以在一行代码中执行多个语句&#xff0c;但需要注意代码的可读性和维护性。 x 5; y 10; z x y; print(z) 在…

Docker Compose详细教程(从入门到放弃)

对于现代应用来说&#xff0c;大多都是通过很多的微服务互相协同组成的一个完整应用。例如&#xff0c; 订单管理、用户管理、品类管理、缓存服务、数据库服务等&#xff0c;它们构成了一个电商平台的应 用。而部署和管理大量的服务容器是一件非常繁琐的事情。而 Docker Compos…

LabVIEW中NIPackageManager功能介绍

LabVIEW中PackageManager功能介绍 使用NIPackage Manager可安装、更新、修复和删除NI软件。 安装NI软件 使用PackageManager浏览和安装NI软件。 1. 在浏览产品选项卡上&#xff0c;单击产品类别以显示该类别中的可用产品。 2. 选择要安装的产品&#xff0c;然后单击…

后端接口错误总结

今天后端错误总结&#xff1a; 1.ConditionalOnExpression(“${spring.kafka.exclusive-group.enable:false}”) 这个标签负责加载Bean&#xff0c;因此这个位置必须打开&#xff0c;如果这个标签不打开就会报错 问题解决&#xff1a;这里的配置在application.yml文件中 kaf…

时间序列预测-Transformer,Informer,Autoformer,FEDformer复现结果

实验环境硬件规格或软件版本号CPUInter Xeon E5-2678 v3 2.50GHzGPUNVIDIA TITAN X (Pascal)内存32.0GBPython3.7.3Pytorch1.2.0CUDA11.6 实验结果 可视化实验结果 见资源

tracert命令

前言&#xff1a;今天在阅读“Web性能权威指南”这本书的时候&#xff0c;发现 tracert 这个命令挺有意思的&#xff0c;在分析网络性能瓶颈的时候也能使用的到&#xff0c;在此就小记一笔以备后用。 1&#xff1a;作用 tracert 是一个简单的网络诊断工具&#xff0c;可以列出…

深入解析JavaScript中的变量作用域与声明提升

JS中的变量作用域 背景&#xff1a; ​ 之前做js逆向的时候&#xff0c;有一个网站很有意思&#xff0c;就是先出现对其赋值&#xff0c;但是后来的变量赋值没有对其发生修改&#xff0c;决定说一下js中的作用域问题. 全局作用域&#xff1a; ​ 全局作用域的变量可以在任何…

【力扣题:循环队列】

文章目录 一.题目描述二. 思路解析三. 代码实现 一.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好…

什么是CSV文件,以及如何打开CSV文件格式

​CSV代表Comma Separated Values。CSV文件是一种纯文本文件&#xff0c;用于存储表格和电子表格信息。内容通常是由文本、数字或日期组成的表格。使用将数据存储在表中的程序可以轻松导入和导出CSV文件。 CSV文件格式 通常CSV文件的第一行包含表格列标签。后面的每一行表示表…

【探索Linux】—— 强大的命令行工具 P.15(进程间通信 —— system V共享内存)

阅读导航 引言一、system V的概念二、共享内存(1) 概念(2) 共享内存示意图(3) 共享内存数据结构 三、共享内存的使用1. 共享内存的使用步骤&#xff08;1&#xff09;包含头文件&#xff08;2&#xff09;获取键值&#xff08;ftok函数&#xff09;&#xff08;3&#xff09;创…

设备报修流程要怎么优化?工单管理系统如何提高设备维修效率?

在当今快速发展的数字化时代&#xff0c;传统的设备报修流程已经难以满足企业的需求。纸质记录、电话通知等传统方式不仅效率低下&#xff0c;而且容易造成信息遗漏和错误。为了解决这些问题&#xff0c;企业需要引入一种更加高效、便捷的维修管理系统——的修工单管理系统。  …