例如,ddr_dqs是inout类型的,在代码中尽量这么写:

assign ddr_dqs = ddr_dqs_write_en ? 4'dZ : ddr_dqs_write;

inout 在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻

'Z'。当 inout 端口不输出时,将三态门置高阻。

就遵从以上这种写法就行了,不要怀疑。不要纠结:

sdram_out_en是1的时候,ddr_dqs作为输入,当ddr_dqs_write_en为0时候,ddr_dqs作为输出。

接下来讲讲为什么尽量那么写:组合起来有4种写法:

(1)assign ddr_dqs = ddr_dqs_write_en ? ddr_dqs_write : 4'dZ;

1 output   0 input

(2)assign ddr_dqs = (!ddr_dqs_write_en) ? ddr_dqs_write : 4'dZ;

1 input   0 output

(3)assign ddr_dqs = (!ddr_dqs_write_en) ? 4'dZ : ddr_dqs_write;

1 output   0 input

(4)assign ddr_dqs = ddr_dqs_write_en ? 4'dZ : ddr_dqs_write;

1 input   0 output

通过撰写代码实际仿真可知:四种写法生成的三态门控制器一模一样:

这时候就比较纠结了,

(1)(3)ddr_dqs_write_en置1的时候inout作为输入,(2)(4)ddr_dqs_write_en置1为输出,三态门一模一样,那么问题来了,到底置1的时候输出还是应该输入呢?

然后你去CSDN一搜,比如比较经典的两个回答:

https://www.cnblogs.com/fimwest/p/7860465.html

https://www.eefocus.com/ilove314/blog/11-09/231507_10e01.html

两个讲解的都很清澈明了,但是:

明显第一个链接:使能信号置1位输入,第2个链接:使能信号置1为输出!!!

f......uck!!!

这些链接都只讲了皮毛,没有想到我说的问题。

这就很坑了。但是呢,实际上以上4种写法暗藏玄机:

虽然三态门长得一样,但是使能端T来的信号是不一样的:

(1)(3)使能信号出来的时候,经过了一个元器件:

而(2)(4)使能信号直接到达了三态门的T端:

然后通过查看原语:

ug471中:T为1,不使能Output buffer,而不是图中的O端口(这官方文档也是够坑的,真容易让人产生误解),所以此时IO端口作为输入,数据通过O端口给到FPGA code中。同理,也就是T为0的时候,不使能input buffer,而不是I端口,那么FPGA code从I端口输入信号,IO端口作为输出。

这也就是说:到达三态门的T端信号为1,inout是输入,为0,inout为输出。

这就和(2)(4)写法一致了,那么是不是说(1)(3)就错了呢?

也不是!

通过实际上板调试发现:(1)(3)的确使能信号为1做了输出

(2)(4)的确使能信号为0做了输出

蓝框里面:下面一条线为使能信号,为0的时候,上面数值改变了,做了输出

所以猜测多了元器件LUT1为取反功能:虽然你在代码里面写的是1,但是通过LUT1那么一个器件到达三态门的T端时候变成了0,这样就和原语规定的一致了。

继续上板抓取,果然,经过LUT1那个器件的信号取了反。

为什么说(1)(3)的使能信号变化了呢,你可以再看实际仿真中生成的三态门:

使能信号为1时候,你想把inout作为输出,但是为1的时候,根据原语,output buffer不使能了,那么数据只能通过io端口进来,从o端口出去,那么inout就是输入了,和你的预期不同,所以说实际上vivado生成电路的时候已经给你把使能值取反了。

至此,也就是4种写法都可以,但是为了和原语保持一致,避免产生歧义,就使用第4种写法就行了:

assign ddr_dqs = ddr_dqs_write_en ? 4'dZ : ddr_dqs_write;

别杠!!!就这么写,就行了。

如果代码中不将input类型用“? :”撰写,此处在代码中只用到输入,那么:

如图,ila链接为蓝色线,input类型生成的电路图只是一个输入电路而已。

不过有几个其他小问题:

以上都是添加ila 执行布线后的电路,但实际上不添加ila后,就乱了,比如(1)的LUT1在综合后有,布线后就没有了,能力不够,不知道为什么。

还有,没添加ila后,(4)在综合的时候居然有了LUT1这个东西,可能操作有问题吧。。。。

最清晰最全的inout类型使用方法相关推荐

  1. modelsim之inout类型tb文件编写及仿真

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

  2. 【学习教程】全系统各类型工程水土保持方案编制实践技术系列

    (内容涵盖八大专题:点型项目.市政工程.线型工程.矿山工程.水利工程.取土场/弃渣场.补报项目.水土保持监测验收) [学习教程]全系统各类型工程水土保持方案编制实践技术系列 (qq.com) 课程一: ...

  3. FPGA inout类型的使用总结

    因为项目需要,顶层模块的输入输出需要配置成同一个管脚,就需要用到inout类型了,在网上查阅大量资料以及自己实际使用inout类型后做个记录. verilog中input.output只能做单向的输入 ...

  4. 上手Redis系列(六):超全Geospatial特殊类型详解(地理位置)

    学习Redis之前,我还是觉得我务必跟你说一声,也是在我文章之中说的很多的一句话,我想也会适用于学习Redis,那就是在接触文章里的Reids命令时,不用试图去记这些命令 ,用到时去看API帮助文档即 ...

  5. 以verilog语言 inout类型赋值 为例深入理解wire线网数据类型

    inout类型的作用 inout 类型常出现于芯片外部引脚,为的是减少管腿个数,一个端口同时做输入和输出. 如32位半导体随机读写寄存器RAM,若分别使用input output,则仅数据管脚就有64 ...

  6. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)

    深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout ...

  7. FPGA中inout端口使用方法总结

     输入端口可以由wire/reg驱动,但输入端口只能是wire:输出端口可以使wire/reg类型,输出端口只能驱动wire:若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型.用关键 ...

  8. 数据采集之全埋点数据采集分析方法的一些整理

    数据采集之全埋点数据采集分析方法的一些整理,包含一些思路.方法逻辑的整理分析,供数据采集分析爱好者参考. 埋点的定义: 埋点分析,是网站分析的一种常用的数据采集方法.数据埋点分为初级.中级.高级三种方 ...

  9. 史上最全外链资源寻找方法

    很久没来A5发布文章了,期间都在从事seo培训工作,今天笔者在闲暇之余为大家分享一篇<史上最全外链资源寻找方法>的文章. 外链资源寻找的方法是数不胜数,大家只需百度一下便可以看到N个,但是 ...

最新文章

  1. ubuntu 图形化更换apt源
  2. bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】
  3. label自定义的惨痛教训
  4. 18110 Koishi's travel, Satori's travel
  5. 宜昌方言RAP 说唱 《在宜昌》
  6. android ndk opencv 3,opencv_and_opencv_contrib
  7. 同程艺龙10月初赴港IPO,小程序里又走出一家上市公司
  8. html购物车结算代码,JavaScript购物车结算案例
  9. 《算法导论》知识点总结
  10. python中requests设置代理服务器
  11. lwj_C#_作业 ListT应用
  12. php 前后端分离之rsa与des加密之旅
  13. 智慧城市:中国特色新型城镇化的发展方向
  14. IC 拔取器 rework station
  15. 第十三届蓝桥杯C++B组国赛D题——最大数字(AC)
  16. Mac 重置mysql的root 密码
  17. RN:蒲公英内测分发app
  18. Python中使用遍历在列表中添加字典的坑
  19. matlab怎么标记节点,为图节点和边添加标签
  20. 计算机国际会议 2017,2017计算机辅助设计与图形学国际会议(CAD/Graphics 2017)在张家界召开...

热门文章

  1. 有一种感动叫ACM(记陈立杰在成都赛区开幕式上的讲话)
  2. 电商网站Web自动化测试实战( 编写京东搜索脚本python+selenium框架)
  3. 利用python将二进制图片转化成图片并展示
  4. 策略梯度模型 (Policy Gradient)原理与实现
  5. 牛人(ZZH)推荐机器学习网站
  6. arguments,calleecaller
  7. 人为什么天生不爱学习?
  8. sp3无法安装IIS或者IIS安装进度条不动的解决方法
  9. 【论文复现】插秧机的任务规划
  10. 艾美捷细胞衰老β-半乳糖苷酶染色试剂盒说明书