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

systemverilog:interface中端口方向理解

(1)从testbench的角度看,tb中信号的输入输出方向与interface中信号输入输出方向一致
(2)从DUT角度看,DUT中信号输入输出方向与interface中信号输入输出方向相反。简单图示如下

代码示例如下:
 

interface my_if(input bit clk);bit write;bit [15:0] data_in;bit [7:0] address;logic [15:0] data_out;clocking cb @ (negedge clk);default input #1ns output #2ns;output  write;output  data_in;output   address;input data_out;endclockingmodport master(clocking cb);modport slave(input write, data_in, address, output data_out);endinterfacemodule master( clk,data_out  ,  write ,data_in,address );input logic clk,write;output logic [7:0] data_out;input logic [7:0] data_in ,address;always @(negedge clk)if(write==0)data_out<=0;else if (write==1)data_out<=data_in;endmoduleclass BB;virtual  my_if master_inst;function new(virtual interface  my_if a);master_inst=a;
endfunctiontask ass();master_inst.master.cb.write<=0;repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h12;repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h34;	repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h45;master_inst.master.cb.write<=1;repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h56;	repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h67;repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h52;	repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h81;repeat(10) @(posedge master_inst.clk);master_inst.master.cb.data_in<='h05;	endtaskendclassmodule slaver(my_if.slave sif);initial beginsif.data_out <= 16'h0;#275 sif.data_out <= 16'h1;end
endmodulemodule test;bit clk = 0;always #50 clk = ~clk;my_if regbus(clk);master m0(.clk(regbus.clk ), .address(regbus.address), .data_out(regbus.data_out), .data_in(regbus.data_in),.write(regbus.write));//slaver s0(regbus.slave);BB b_inst=new(regbus);initial begin#100 b_inst.ass();endendmodule 

注意:
(1)当interface中有modport或者clocking块时,在testbench中可以直接定义interface的实例,可以将其直接传递到class中,然后在class中的task中可以通过点运算法逐层次的访问modport或者clocking中的信号。也可以通过点运算符直接在tb中实例化interface中的modport对象,然后传递到class中。
(2)在class中的task中对clocking块中的信号赋值时,必须使用非阻塞赋值语句<=;
 

http://www.lryc.cn/news/233403.html

相关文章:

  • 【GUI】-- 08 JButton、JRadioButton、JCheckBox
  • 【postgresql】CentOS7 安装Pgweb
  • 基于python和定向爬虫的商品比价系统
  • 使用GPT-4训练数据微调GPT-3.5 RAG管道
  • 二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
  • 【Spring】加载properties文件
  • react中间件的理解
  • React函数组件状态Hook—useState《进阶-对象数组》
  • linux 网络 cat /proc/net/dev 查看测试网络丢包情况
  • 记录配置VS,使用opencv与Eigen
  • uart控制led与beep
  • Linux修改root密码
  • C/C++模板类模板与函数模板区别,以及用法详解
  • van-dialog弹窗异步关闭-校验表单
  • Dynamic Wallpaper 16.7中文版
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • 《网络协议》06. HTTP 补充 · HTTPS · SSL/TLS
  • Python winreg将cmd/PowerShell(管理员)添加到右键菜单
  • redis运维(九)字符串(二)字符串过期时间
  • 【C++】多线程的学习笔记(3)——白话文版(bushi
  • kotlin--3.集合操作
  • 自动驾驶-BEV感知综述
  • 面试题-3
  • C++ Core Guidelines 中文版 GSL
  • 同时显示上下两层凸包特征的可视化程序
  • Django框架之模型层(二)
  • C++之list
  • C语言日记——调试篇
  • 【python】Django——templates模板、静态文件、django模板语法、请求和响应
  • Android设计模式--观察者模式