FPGA中实现三态缓冲器

摘要:
目录1.为什么要使用三态逻辑电路2.如何在FPGA中实现三态逻辑线路3.FPGA中I2C总线的接口处理4.如何在三态逻辑回路中输出高电平5.如何避免在I2C三态缓冲器中输出高电平时1.为什么要在信息的双向传输中使用三态电路。图12.如何在FPGA中实现三态逻辑电路最近,一位学生问如何实现三态缓冲器/逆变器(如下图所示)?如果三态缓冲器在I2C输出1时输出1,则它可能被总线上的其他设备短路到0输出。I2C输出1由缓冲器的外部上拉电阻器获得,因此不存在短路。

目录

1. 为何要使用三态逻辑电路

信息双向传输的时候需要(I2C属于半双工)。 也就是引脚定义为inout的时候。
图1
img

2. FPGA里面如何实现三态逻辑电路

最近有学生问tri-state buffer / Inverter(如下图)怎么实现?有两种办法:
图2
image-20210409162050483

  1. 用Verilog语句 Vo = ( Enable) ?~A: 1'bz ; 实现该硬件电路:
    图3
    img

  2. 或是直接在Quartus 工具里面调用 74240 :
    图4
    img

3. FPGA中I2C总线的接口处理

Intel 的 IP 文档:

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_embedded_ip.pdf
图5
img
所以我在我的工程里面添加了altera_avalon_i2c IP以后,我的top.v文件要这样处理:
图6
image-20210409174325939

4. 三态逻辑电路如何输出高电平

可能大家会好奇,上面I2C三态逻辑 直接给了1'b0,怎么输出高电平1呢?

图7
img
dir 是1时, out = sda,dir 是 0 时,三态门输出高阻, 也就是电阻无限大 相当于断开, 然后 外部加上拉电阻,于是输出是1。

所以FPGA和外设之间要有个上拉电阻。
图8
img

5. I2C的 三态缓冲器避免输出高电平

原则是: I2C输出1 的时候三态缓冲器应该是输出 highz。 I2C输出0 的时候三态缓冲器输出0。
如果I2C输出1的时候 三态缓冲器输出1 了, 则可能会和总线上其他设备 输出的0 短路。

而I2C的输出1 由缓冲器外部上拉电阻得到就不会存在短路情况。

所以只需要给 1'b0 , 当要I2C输出0的时候 三态缓冲器输出0 。 I2C要输出1的时候,直接关掉三态缓冲器使能。

如果图7 拿I2C 的应用举例的话,实际要更进一步保证不能输出1才行,底层代码也没处理输出 1的话, 那这种方式做成的 i2c 只适用于 一个master 对一个 slave。 多个master的时候可能会出现短路烧掉IO。

免责声明:文章转载自《FPGA中实现三态缓冲器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇修改MySQL的默认数据存储引擎Java运行时栈帧结构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

DEP(数据执行保护)介绍

数据执行保护是一组软件和硬件技术,可以对内存执行额外检查,以帮助防止恶意代码在系统上运行。硬件实现DEP来检测从这些位置运行的代码,并在发现执行时抛出异常。此功能也称为非执行和执行保护。为了与DEP合作,AMD和微软共同设计并开发了AMD的新芯片功能“增强病毒防护”。[1] DEP的安全机制,即“数据执行保护”,是一种Windows安全机制,主要用于防止病毒...

Idea常用插件整合

官方网站:https://plugins.jetbrains.com/plugin/228-sql-query-plugin6.IdeaVim基于IntelliJ的Vim仿真插件。注意:如果打开WebInspector,那么CSS/JavaScript同步和元素高亮显示不起作用“pluginisdebuggingthistab”信息栏的可用性问题官方网站:h...

(二)Jenkins配置主从节点实例

4.从节点配置和相关配置中从节点机创建jenkins用户,并从一些环境配置中创建jenkings用户的ssh密钥,用于指定上述配置界面的ssh启动模式;在配置启动模式和项目源代码管理中从远程仓库获取源代码;创建Jenkins用户并使用root登录到远程子节点计算机。#adduserjenkins#passwdjenkins生成Jenkins用户的ssh密钥。...

【Lua】使用随机数(转)

游戏中有一个用于创建角色的随机命名功能,它使用随机数。我在网上找到一篇关于在Lua使用随机数的文章。标记它。Lua需要两个函数来生成随机数:数学。randomseed,数学。数学随机种子接收整数n作为随机序列种子。将系统时间视为随机种子是很自然的,也就是说,数学随机——然后连续生成i=1,5do打印结束的随机数,但问题出现了。如果程序在短时间内运行几次,您得...

vue的富文本编辑器使用,并且添加显示当前输入字数

{模块:{工具栏:{标题:{script://indent〔{direction:text align:background:}.editor{line-height:}.ql editor{line-high:content:padding right:...

Vue跨层级传递slot的方法

但是我需要通过插槽在父组件中指定一个模板,而B组件引用C组件。组件C的部分模板需要在组件A中配置。模板引用A组件:{{node.text}}<模板引用B组件:spanslot=“nodeMenu”slot scope=“{node}”>node=“node”>/span>/div>2.2如...