modelsim之inout类型tb文件编写及仿真
很久没更新了,这边文章是笔者在隔离期间写的,之前接触过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文件编写及仿真相关推荐
- Questasim仿真工具do文件编写说明
1 Vivado中编译Questasim仿真需要的基础库 Questasim作为一个第三方的仿真工具,如果需要仿真Vivado中的工程,则需要将Vivado中的仿真库编译一下,为能够在Questasi ...
- Modelsim自动化仿真及do文件编写
基于脚本的modelsim自动化仿真是提高工作效率的大杀器,此文基于此做了些记录汇总,基于脚本的modelsim自动化仿真的一些知识和模板,同时可以参照给的例程进行练习学习下载双击 .bat 文件就会 ...
- FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真
系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...
- 下面的log变量记录了云服务器上 当天上传的文件信息 其中第一列是文件名,第二列是文件大小 请编写一个程序,统计出不同类型的 文件的大小总和
下面的log变量记录了云服务器上 当天上传的文件信息 其中第一列是文件名,第二列是文件大小 请编写一个程序,统计出不同类型的 文件的大小总和 比如: jpeg 9988999 json 324324 ...
- modelsim do文件简介及仿真波形分析注意事项
目录 前言 Modelsim指令介绍 步骤一:创建run_wave.do 步骤二:打开Modelsim 步骤三:do run_wave.do 步骤4:run_sim.bat 补充介绍 参考 前言 本 ...
- makefile文件编写教程
技术交流QQ群:1027579432,欢迎你的加入! 1.make介绍 gcc:编译器(gcc根据菜谱进行编译) make: linux自带的构建器(相当于一个菜谱) 构建的规则(菜谱)在makefi ...
- 函数||值传递||函数的常见样式||函数的声明||函数的分文件编写
概述 作用:将一段经常使用的代码封装起来,减少重复代码 一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能. 函数的定义 函数的定义一般主要有5个步骤: 1.返回值类型 2.函数名 3.参数 ...
- class ts 扩展方法_ts类型声明文件的正确使用姿势
ts类型声明文件的正确使用姿势 ts声明文件类型 npm install @types/jquery --save-dev 与npm一同发布 解释: package.json 中有 types 字段, ...
- C++阶段01笔记06【函数(概述、定义、调用、值传递、常见样式、声明、分文件编写)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 6 函数 6.1 概述 6.2 函数的定义 函数的语法 示例:加法函数 6.3 函数的调用 示例 6.4 值传递 示例 6.5 ...
最新文章
- 看菲菲详解如何快速获取linux命令帮助
- FreeBSD长模式不兼容
- ubuntu 12.04 nginx+ mono-fastcgi-server
- Turbo码:3GPP TS 36.212
- VMware NSX词汇表
- 运行错误代码_Win7系统提示错误代码0xc0000135应该如何解决?
- 容器大小_C++复习篇(7)序列式容器vector
- 纽微特纪事:改个字串,竟然成了“二期工作”,还拖了几个月
- 2019华为软件精英挑战赛总结
- 权重的计算(熵权法)
- 数字 显示为LED 字体
- STM32 姿态传感器mpu6050的使用
- Why it occurs this error [The JSON value could not be converted to System.Nullable]
- win10系统在文件夹中图片不显示内容问题
- 我的疫情时代——记在家的那个学期
- 黑马登录案例验证码无法正常显示原因
- 纯CSS手里剑绘制优化1
- Spring使用标签aop:aspectj-autoproxy 出的一些错
- 微信公众号自定义菜单如何添加特殊符号?
- camera驱动电源配置_Camera driverV4L2驱动架构介绍