明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 6422|回复: 0

【FPGA至简设计原理与应用】第一篇 第三章硬件描述语言Verilog第5节高组态

[复制链接]
发表于 2020-9-7 18:46:44 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本案例的编号为:001500000134,如果有疑问,请按编号在下面贴子查找答案:MDY案例交流【汇总贴】_FPGA-明德扬科教 (mdy-edu.com)
本文为明德扬原创及录用文章,转载请注明出处

大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。


FPGA至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。





5.2.4高阻态

本文档编号:001100000061
需要看对应的视频,请点击视频编号:001100000057
1.本节主要进行组合逻辑的介绍,包括:程序语句(assign语句、always语句),数字进制(二进制、不定态、高阻态),算数运算符(加、减、乘、除运算符),逻辑运算符(逻辑与、或、非运算符),按位逻辑运算符(单目按位与、或、非运算符,双目按位与、或、异或运算符),关系运算符,移位运算符(左移、右移运算符),条件运算符(三目运算符、if语句、case语句、选择语句等),拼接运算符;
2. ALTERA和VIVADO文档


Z态,一般称之为高阻态,表示设计者不驱动这个信号(既不给0也不给1),通常用于三态门接口当中。


上图就是三态总线的应用案例,图中的连接总线对于CPUFPGA来说既为输入又为输出,是双向接口。一般的硬件电路中会将该线接上一个上拉电阻(弱上拉)或下拉电阻(弱下拉)。

CPUFPGA都不驱动该总线时,A点保持为高电平。当FPGA不驱动该总线,CPU驱动该总线时,A点的值就由CPU决定。当CPU不驱动该总线,FPGA驱动该总线时,A点的值就由FPGA决定。但FPGACPU不能同时驱动该总线,否则A的电平就不确定了,通常FPGACPU何时驱动总线是按事先协商的协议进行工作。


上图是典型的I2C的时序。I2C的总线SDA就是一个三态信号。I2C协议已规定好上面的时间中,哪段时间是由主设备驱动,哪段时间是由从设备驱动,双方都要遵守协议,不能存在同时驱动的情况。那么FPGA在设计中是如何做到“不驱动”这一行为呢?这是因为FPGA内部有三态门。


三态门是一个硬件,上图是它的典型结构。三态门有四个接口,如上图所示的写使能wr_en、写数据wr_data、读数据rd_data以及与外面器件相连的三态信号data

需要注意的是写使能信号,当该信号有效时三态门会将wr_data的值赋给三态线data,此时data的值由wr_data决定,当wr_data0data值为0;当wr_data1data值为1。而当写使能信号无效时,则不论wr_data值是多少都不会对外面的data值有影响,也就是不驱动。
Verilog中以上功能是通过如下代码实现的:
1
  
2
assign data    = (wr_en==1)?wr_data:1'bz;
  
assign rd_data = data;


当综合器看到这两行代码则知道要综合成三态门了,高阻z的作用正在于此。此外可以注意到硬件上用三态线是为了减少管脚,而在FPGA内部没有必要减少连线,所以使用三态信号是没有意义的。因此,笔者建议各位读者在进行设计时不要在FPGA内部使用高阻态“z”,因为没有必要给自己添加“思考”的麻烦。当然,如果设计中使用了高阻态也不会报错,也可以实现功能。

总的来说高阻态“z”是表示“不驱动总线”这个行为,实际上数字电路就是高电平或者低电平,不存在其他电平的情况。





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-22 18:08 , Processed in 0.076021 second(s), 30 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表