文章目录

  • 一、Inout是什么?
  • 二、Ref是什么?
  • 1)代码结构的思路
  • 2)代码结构的说明
  • 三、两者区别是什么?
  • 四、两者联系/区别总结

一、Inout是什么?

inout百度翻译为“双向,双向总线”,顾名思义就是该类型端口既能做输入又能做输出。很多需要交互的芯片外部的有些管脚都会使用inout类型,尤其是需要与外界做双向通信的数据总线与地址总线。

在需要用到inout类型搭建仿真验证平台时,需要注意以下两个方面:

1.在例化端口时,需将顶层的inout型的信号必须变为wire型;
2.在编写assign语句时,其必须放在initial或always块外部。

想对inout型的信号进行读写操作时需使用assign语句,具体代码如下:

module TB();wire  data_inout;reg   data_reg;reg   db_link;initial begin..........endassign data_inout = db_link ? data_reg : 1'hz;endmodule

二、Ref是什么?

Ref为Reference的缩写,百度翻译为“参考,引用”。通过查阅资料,ref类型会使参数按照引用传递。下面为本人在验证工作时碰到的一个例子:

设计(DUT)源程序部分代码:

module DUT;endmodule

验证环境 (Test_Bench—cpu_mod) 部分代码:

`timescale 1ns/1ps
module cpu_mod;parameter cpu_period   = 33.33;parameter cpu_period*2 = 66.67;parameter cpu_period*9 = 299.97;   initial beginwrite_flag = 0;end   task automatic cpu_write (input [15:0] addr , input [15:0] data , ref logic cs);dut.if.ebi_rd_wr = 1'b1;cs               = 1   ;#cpu_period;dut.if.ebi_addr  = addr ;dut.if.ebi_rd_wr = 1'b0 ;      dut.if.ebi_ts    = 1'b0 ;cs               = 0    ;#cpu_period*2;dut.if.ebi_ts    = 1'b1 ;write_flag       = 1    ;cpu_wdata        = data ;dut.if.ebi_we_be0  = 1'b0 ;     dut.if.ebi_we_be1  = 1'b0 ;#cpu_period*9;dut.if.ebi_rd_wr   = 1'b1 ;dut.if.ebi_we_be0  = 1'b1 ;       dut.if.ebi_we_be1  = 1'b1 ;#cpu_period;write_flag         = 0     ;dut.if.ebi_addr    = 16'hz ;        cpu_wdata          = 16'h0 ;  cs                 = 1     ;endtask
endmodule

测试用例 (Test_Case) 部分代码:

`timescale 1ns/1psmodule testcase(interface dut_if);bit [15:0] cpu_addr1 = 16'h1803;bit [15:0] cpu_data1 = 16'h1234;initial begin#150ms;cpu_mod.cpu_write (cpu_addr1,cpu_data1,dut_if.ebi_cs3);   endendmodule

1)代码结构的思路

待更新

2)代码结构的说明

待更新


三、两者区别是什么?

当task和function的形式参数被声明为input类型时,input类型的形参只是进行了数值的拷贝;而当task和function的形式参数被声明为output类型时,output类型的形参会在return时刻将数值拷贝至接收方。这就不难得出 inout 类型不仅会在输入时进行数值的拷贝,而且会在输出时将数值拷贝至接收方。
Ref 类型的形参,我们做的不是拷贝,而是 引用 。对于task来讲,ref类型的参数,其外部是可见的,换句话说在外部对ref的形参数值进行的修改,task是可见且同步变化的;而inout类型的参数,task得到的仅仅是一个拷贝过来的数值,在整个task运行期间,外部的数值无论发生什么变化,对于task而言是未知的,同理task对该数值在其内部进行的修改,只有task运行结束后,外部才会获得该值。


四、两者联系/区别总结

  1. InoutRef 均可以在task与function中传入传出数据;
  2. Inout 在外部传递的参数改变时,其调用的task或function无法实时更新,只有当调用的task或function执行完毕后才会发生变化;
  3. Ref 在外部传递的参数改变时,其调用的task或function能够实时更新数值;
  4. Ref 操作不需要消耗仿真时间,而 Inout 则需要消耗仿真时间。

SVInout与Ref部分相关推荐

  1. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

  2. ref与out的区别

    前一段时间老用ref与out 感觉他们的效果差不多,就去网上查了一下他们的区别,网上说的概念性的东西太多了,后来通过自己的摸索发现他们有一个规律 ref: 在引用方法之外必须赋初值 static vo ...

  3. ref和out的区别

    ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键 ...

  4. C# ref和out关键字

    ref和out关键字初解     参数可以通过引用和值传递给方法.通过引用传递给方法的变量可以有调用它的方法作自由改变,所作的修改会影响原来的变量的值:在C#中,除非特别说明,所有的参数都是值传递. ...

  5. java g1 gc ref proc_java – 针对sparc T4 8核的正确G1 GC调优

    我的应用程序部署在Solaris上运行的weblogic上,采用双SPARC T4 8核3.0 GHz.这个weblogic实例正在使用g1 gc,我认为可以改进当前的配置: GC_OPTIONS=& ...

  6. react中ref的使用

    在react中获取真实dom的时候就需要用到ref属性,具体使用如下 var MyComponent = React.createClass({handleClick: function() {con ...

  7. ref和out 传递参数(C#)

    1.参数传递默认都是传递栈空间里面存储的内容 2.如果添加了ref那么传递的都是栈空间地址,而不再是栈空间里面的内容 3.如果添加了out,那么传递的也是栈空间的地址 1 //写一个方法计算一个int ...

  8. 【vue】vue中ref用法

    1.获取当前元素: 例子: <div class="pop pos-a" :style="{ left: pop_x + 'px' ,top: pop_y + 'p ...

  9. Vue教程3【使用Vue脚手架】render ref props minin scoped $emit $bus 消息订阅发布 动画

    npm全局安装 切换淘宝npm镜像 npm config set registry https://registry.npm.taobao.org全局安装 npm install -g @vue/cl ...

最新文章

  1. linux系统下文件命令详解
  2. 用eclipse创建动态web项目手动生成web.xml方法
  3. java 正则表达式 组合_java基础:5.1 面向对象、类的关联 聚合 组合、正则表达式...
  4. Eclipse报错:this compilation unit is not on the build path of a java project
  5. 不会PS抠图?免抠(扣)PNG图片网就解决了
  6. Docker学习总结(52)—— Docker容器环境变量相关知识点的总结
  7. R_多元相关和回归分析
  8. kettle执行组件时为什么使用克隆对象
  9. 联想计算机phoenix award bios,phoenix-Award BIOS
  10. 图解Windows下QT编程入门
  11. python破解wifi字典_利用Python自动生成暴力破解的字典
  12. 【有限元分析】有限元仿真分析与解析解的结果对比——以阶梯轴的静力分析为例
  13. 数据分析师的薪资怎么样?
  14. 参考线--深入了解字体
  15. Lumion 11.0:领先的建筑可视化工具再次升级!+全版本安装包
  16. Redis 设计与实现 读书笔记(菜鸟版)
  17. 小米将推出新款自研芯片
  18. 戴尔台式计算机怎么拆卸两块侧板,高效易用 戴尔OptiPlex 7050商用台式机评测
  19. 【UACME】在Win11上的发展
  20. ASP.NET 模拟测试001-100题

热门文章

  1. 微信小程序图片或视频保存到手机系统相册【转载】
  2. Android 蓝牙开发——蓝牙配对(五)
  3. Hive SQL转化为MapReduce的过程
  4. Python快速入门到就业
  5. java 乘法保留两位小数,Java保留两位小数的方法
  6. 文件共享服务器 利用445端口
  7. 主流路由器的dns设置
  8. 私有云Mariadb集群搭建
  9. [Mysql] CAST函数
  10. PyQt5基础知识 超详细!!!(含代码)