很久没更新了,这边文章是笔者在隔离期间写的,之前接触过inout类型的仿真,但很久未使用有些生疏了,查阅了相关资料编写了这篇文章,一来是当作笔记,忘记时随时查阅,二来是为了供广大FPGA爱好者学习参考,如有纰漏,请批评指正。

我们都知道,在电路中有输入端口(input)、输出端口(output)、双向口(inout)。像诸如I2C协议的器件都是采用两根线进行主从通讯,一个是时钟线sck,另一个是数据线sda。在主机与从机需要通讯时,主机就会往从机发生sck信号,若主机需要往从机发生数据,sda信号则从主机流向从机(如1流向),反之,主机需要得到从机的数据,sda信号则从从机流向主机(如2流向),I2C协议还有很多知识点,本文只对双向口仿真进行阐述。此时可以发现sda信号在读写两个状态时流向不同,那这种信号该如何仿真呢?

在写Verilog程序时,我们都知道reg类型只能在initial、always等里面赋值,而wire类型可以在assign里面赋值。作为双向口的sda信号我们既希望它作为输入,也希望它作为输出,因此wire类型最为合适。

对于双向口的仿真,我通常会在tb文件中这样定义:

reg  sck;
wire sda;
reg  sda_r;
reg  sda_en;
assign sda_r = (sda_en) ? mosi : 1'bz;
assign sda =sda_r;

当sda作为输入时,sda_en应为0,此时sda为高阻态,sda会相应外界连接的信号高低电平。当作为输出时,sda_en应为1,此时mosi作为要输出的sda的数据,根据时序对应写出仿真文件即可。

由于i2c的时序都是固定的,为了方便仿真文件的编写,我会采用task语句将时序打包,方便自己对程序的理解。

task task_name;input inputname1;input inputname2;..reg regname1;reg regname2;..begin...  //具体程序执行的内容...endendtask

在initial里面使用task_name(inputname1,inputname2,…);即可实现功能。

上图为我镶嵌的iicwp的测试代码,其中iic_m_write也是有task语句编写的函数,该功能会向iic中发送8’h04,8’h00,8’h00,8’h01,8’h01。

仿真截图如下:

今天的分享就到这里,如有错误,请指正,谢谢。
欢迎关注我的个人公众号,有问题可留言。

modelsim之inout类型tb文件编写及仿真相关推荐

  1. Questasim仿真工具do文件编写说明

    1 Vivado中编译Questasim仿真需要的基础库 Questasim作为一个第三方的仿真工具,如果需要仿真Vivado中的工程,则需要将Vivado中的仿真库编译一下,为能够在Questasi ...

  2. Modelsim自动化仿真及do文件编写

    基于脚本的modelsim自动化仿真是提高工作效率的大杀器,此文基于此做了些记录汇总,基于脚本的modelsim自动化仿真的一些知识和模板,同时可以参照给的例程进行练习学习下载双击 .bat 文件就会 ...

  3. FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  4. 下面的log变量记录了云服务器上 当天上传的文件信息 其中第一列是文件名,第二列是文件大小 请编写一个程序,统计出不同类型的 文件的大小总和

    下面的log变量记录了云服务器上 当天上传的文件信息 其中第一列是文件名,第二列是文件大小 请编写一个程序,统计出不同类型的 文件的大小总和 比如: jpeg 9988999 json 324324 ...

  5. modelsim do文件简介及仿真波形分析注意事项

    目录 前言 Modelsim指令介绍 步骤一:创建run_wave.do 步骤二:打开Modelsim 步骤三:do  run_wave.do 步骤4:run_sim.bat 补充介绍 参考 前言 本 ...

  6. makefile文件编写教程

    技术交流QQ群:1027579432,欢迎你的加入! 1.make介绍 gcc:编译器(gcc根据菜谱进行编译) make: linux自带的构建器(相当于一个菜谱) 构建的规则(菜谱)在makefi ...

  7. 函数||值传递||函数的常见样式||函数的声明||函数的分文件编写

    概述 作用:将一段经常使用的代码封装起来,减少重复代码 一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能. 函数的定义 函数的定义一般主要有5个步骤: 1.返回值类型 2.函数名 3.参数 ...

  8. class ts 扩展方法_ts类型声明文件的正确使用姿势

    ts类型声明文件的正确使用姿势 ts声明文件类型 npm install @types/jquery --save-dev 与npm一同发布 解释: package.json 中有 types 字段, ...

  9. C++阶段01笔记06【函数(概述、定义、调用、值传递、常见样式、声明、分文件编写)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 6 函数 6.1 概述 6.2 函数的定义 函数的语法 示例:加法函数 6.3 函数的调用 示例 6.4 值传递 示例 6.5 ...

最新文章

  1. 看菲菲详解如何快速获取linux命令帮助
  2. FreeBSD长模式不兼容
  3. ubuntu 12.04 nginx+ mono-fastcgi-server
  4. Turbo码:3GPP TS 36.212
  5. VMware NSX词汇表
  6. 运行错误代码_Win7系统提示错误代码0xc0000135应该如何解决?
  7. 容器大小_C++复习篇(7)序列式容器vector
  8. 纽微特纪事:改个字串,竟然成了“二期工作”,还拖了几个月
  9. 2019华为软件精英挑战赛总结
  10. 权重的计算(熵权法)
  11. 数字 显示为LED 字体
  12. STM32 姿态传感器mpu6050的使用
  13. Why it occurs this error [The JSON value could not be converted to System.Nullable]
  14. win10系统在文件夹中图片不显示内容问题
  15. 我的疫情时代——记在家的那个学期
  16. 黑马登录案例验证码无法正常显示原因
  17. 纯CSS手里剑绘制优化1
  18. Spring使用标签aop:aspectj-autoproxy 出的一些错
  19. 微信公众号自定义菜单如何添加特殊符号?
  20. camera驱动电源配置_Camera driverV4L2驱动架构介绍

热门文章

  1. 小白兔写话_二年级写话小白兔
  2. Windows下虚拟键盘鼠标(USB中文网)
  3. 抖音招商团长怎么做?怎么入驻?
  4. python生成指定长度的列表_python怎样创建具有一定长度和初始值的列表
  5. (hadoop02)配置hadoop--完全分布式配置
  6. VulnHub渗透测试实战靶场笔记(持续更新)
  7. i5-12400和i5-12400F有什么区别 i512400和12400f哪个好
  8. Wireshark使用详解
  9. 数据结构(一)——数据结构简介
  10. JavaScript-0818