我是靠谱客的博主 懦弱眼神,最近开发中收集的这篇文章主要介绍Verilog inout端口使用详解理解测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

deaa3f2fdf01e74d71e1de1cae4457f1.png

理解

来源特权同学-https://www.eefocus.com/ilove314/blog/11-09/231507_10e01.html

inout用法浅析

 

有感于之前IIC通信中第一次使用verilog的inout端口,早就想写点什么。有些人可能会认为所谓的inout端口FPGA会自己处理,你要它做INPUT的时候从它读数据,你要它OUTPUT的时候给它赋值就行。问题可不是这么简单!

我先送上一个表格吧,正好今天在一本书上看到了。这个表格表示的是在同等驱动强度下,两个驱动源驱动的wire型和tri型变量的真值表。

![](https://files.mdnice.com/user/17442/4e985ea4-1698-48f1-844f-18bf9a02bed6.png)

发现问题了吧!如果某时刻inout口有输入,此时你又正好要拿这个inout口做输出那么冲突是在所难免的,会出现什么样的结果可以参考上面的表。另外看这个表,你就应该明白双向口该怎么处理了吧。下面是一种典型的用法:

inout io_data;    //inout口

reg out_data;     //需要输出的数据

reg io_link;      //inout口方向控制

assign io_data = io_link ? out_data:1'bz; //这个是关键

当inout的口要做输入时,记得一定要把它置为高阻态z,此时你就可以把inout口当作平常的input口用了。

测试

下面我们用三种方法去实现inout,先说明一下,第一种方法的结果与其他两种方法不一样,估计有问题,不推荐使用。

第一种方法和第二种方法的区别是inout作输入时的写法不一样。第三种方法针对Xilinx FPGA,直接使用原语IOBUF。

代码如下,综合工具Vivado 2015.3,器件选择k7325tffg900-2。

module inout_def(
input clk,
input z,
inout dinout,
input z2,
inout dinout2,
input z3,
inout dinout3,
output  reg  led_r1,
output  reg  led_r2,
output  reg  led_r3
    );
    
reg dout = 0;
wire din;
assign dinout = z?1'bz:dout;
assign din = z?dinout:1'bz;

 always @(posedge clk)
begin
   if(din)
       led_r1 <= 1;
   else
       led_r1 <= 0;
end 

reg dout2 = 0;
wire din2;
assign dinout2 = z2?1'bz:dout2;
assign din2 = dinout2;

 always @(posedge clk)
 begin
    if(din2)
        led_r2 <= 1;
    else
        led_r2 <= 0;
 end 

reg dout3 = 0;
wire din3;

IOBUF IOBUF(
.I(dout3),
.O(din3),
.T(z3),
.IO(dinout3)
);

 always @(posedge clk)
 begin
    if(din3)
        led_r3 <= 1;
    else
        led_r3 <= 0;
 end 
 
endmodule

对代码进行综合,结果如下图所示,可以看到,第二种方法和第三种方法综合出来的结果是相同的,第一种方法的结果与其他两种不同。所以inout作输入时直接assign就行了。

ad7adc10eb4026c5a4cd499918a323c3.png

放大IOBUF可以看到,IOBUF实际上由一个OBUFT和一个IBUF组成。

21b2b11f008c3dcbf0426b52bd183392.png

IBUF是输入缓冲器,这个不多说。OBUFT是三态输出缓冲器,其结构和真值表如下图所示,可以看到,当T为1时,输出是高阻态。当T为0时,输出与输入结果相同。

daa1eeba850bd3cac4dc3837e10ce22a.png c748e92a9d6a8666cc68143828af6234.png

所谓高阻态,百度百科是这样说的:电路分析时高阻态可做开路理解。你可以把它看作输出(输入)电阻非常大。它的极限状态可以认为悬空(开路)。也就是说理论上高阻态不是悬空,它是对地或对电源电阻极大的状态。而实际应用上与引脚的悬空几乎是一样的。

我们想象一下,OBUFT为高阻态时相当于开路,那dinout3和IBUF组成的通路和一般的输入通路岂不是完全相同,所以此时可以当Input来用。

下面进行implementation,我们看dinout3实现的结果,可以看到IOBUF的IBUF和OBUFT以及相应的联结关系。OBUFT的TRI对应的是z3。IBUF的OUT对应的是led_r3_reg。

88e79cde50d8c3ae57c761041a120f36.png

最后,考虑到代码的通用性,在使用inout端口的时候还是推荐用第二种方法。

2148adab019e46ee0c75b0fcb6e90c14.gif

NOW

学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

文件名主标题内容简单介绍是否有中文版
UG4767 Series FPGAs GTX/GTH  TransceiversGTX和GTH介绍,PCIe、serdes等学习必备
UG4717 Series FPGAs SelectIO Resources描述 7 系列 FPGA 中可用的 SelectIO资源。
UG1114PetaLinux Tools DocumentatonPetaLinux 工具文档 参考指南是,V2019.2
UG949UltraFAST 设计方法指南(适用于 Vivado  Design Suite)赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标是,V2018.1
IP手册pg057FIFO GeneratorFIFO生成器IP使用手册
pg104Complex Multiplier复数乘法器IP使用手册
pg122RAM-Based Shift Register 移位寄存器IP使用手册

3817793a103cf034073d1f7e3244dc10.png

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【Vivado使用误区与进阶】总结篇

【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

SystemVerilog数字系统设计_夏宇闻 PDF

图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

简谈:如何学习FPGA

1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程

Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

AD936x+ZYNQ搭建收音机(一)

AD936x+ZYNQ搭建OpenWIFI

无招胜有招-Vivado非工程模式下的详细设计

面试中经常会遇到的FPGA基本概念,你会几个?

Vivado ML(机器学习) 2021尝鲜

推荐一些可以获取免费的国外的原版书籍(电子版)网站

【Vivado那些事】FPGA的配置方式

FPGA 的重构

浅析FPGA局部动态可重构技术

ISP(图像信号处理)算法概述、工作原理、架构、处理流程

国产CPU概括

从电子游戏历史看IC发展的助推剂

80年代电子游戏及电脑游戏的发展历史

PCIe总线的基础知识

万字长文带你回顾电子游戏的七十多年历史(完整版)

FPGA中异步复位,同步释放的理解

OpenFPGA系列文章总结

用Verilog设计一个16 位 RISC 处理器

介绍一些新手入门FPGA的优秀网站(新增)

Verilog数字系统基础设计-CR

FPGA 的布局规划艺术

Verilog数字系统基础设计-奇偶校验

建立和保持时间及时序简单理解

(Xilinx)FPGA中LVDS差分高速传输的实现

Xilinx Multiboot实例演示

高速串行通信常用的编码方式-8b/10b编码/解码
Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路

再说System Verilog 与 Verilog 的关系

图书推荐|一本图像/视频处理的强大工具书

Verilog HDL-同步技术

再说System Verilog 与 Verilog 的关系

数模混合信号建模语言Verilog-AMS

数字系统重要指标-吞吐率和时延

Verilog数字系统基础设计-数据转换器

【Vivado那些事儿】强制修改打开Vivado工程使用的Vivado版本

最后

以上就是懦弱眼神为你收集整理的Verilog inout端口使用详解理解测试的全部内容,希望文章能够帮你解决Verilog inout端口使用详解理解测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(180)

评论列表共有 0 条评论

立即
投稿
返回
顶部