0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog中的三态门与双向信号详解

sanyue7758 来源: 芯片验证日记 2024-01-11 10:10 次阅读

1.前言

数字电路中,逻辑输出有两个正常态:低电平状态(对应逻辑0)和高电平状态(对应逻辑1)。此外,电路还有不属于0和1状态的高阻态,高阻态常用字母 Z 表示。

高阻态可做开路理解。可以把它看作输出(输入)电阻非常大,它的极限状态可以认为悬空(开路)。也就是说理论上高阻态不是悬空,它是对地或对电源电阻极大的状态。而实际应用上与引脚的悬空几乎是一样的。或者可以理解为输出与电路是断开的。高阻抗状态将器件与电路的其余部分电路隔离。高阻态时引脚对地电阻无穷,此时读引脚电平就可以读到真实的电平值。高阻态的重要作用就是I/O口在用作输入(input)时读入外部电平。

一般门与其它电路的连接,无非是两种状态,0或者1,在比较复杂的系统中,为了能在一条传输线上传送不同的信号,研制了相应的逻辑器件称为三态门。三态门是一种控制开关。

三态门主要是用于总线的连接,因为总线只允许同时只有一个器件使用。通常在数据总线上接有多个器件,每个器件通过OE/CE之类的信号选通。如果器件没有选通的话它就处于高阻态,相当于没有接在总线上,不影响其它器件的工作。三态逻辑门允许许多设备连接到相同的数据线上,例如数据和地址总线。然而,任何时候只有一个设备“连接”,所有其他设备都处于高阻抗状态,因此电气断开。

双向信号本质上是由一个三态门组成,具体细节参见后面的描述。

2. 三态门

2.1示意图、真值表

Verilog中有四个元件模型来表示三态门电路,分别是bufif1,bufif0,notif1,notif0。三态门的示意图、真值表分别如下图所示:

wKgZomWfTnGARksXAAF8IjlLlyk078.jpg

wKgZomWfTnKAXBWaAAX2CniIRKE180.png

wKgZomWfTnGAJdwTAAT7_qFNgq8342.png

2.2 三态门结构

三态门电路的输出结构和普通门电路的输出结构有很大的不同,因为它在电路中增加了一个输出控制端。

2.2.1 单向三态门

单向三态门的结构示意图如下:

wKgaomWfTnGABEBtAAArpehC60o101.png

由上图看出,在单向三态门中,当E为高电平时,B与A相连,数据流向是A-->B;而当E为低电平时,B的输出为高阻态,相当于B侧电路与A侧电路之间的连线断开,此时可以从外部向B驱动信号,实现相反方向的数据流向(B-->A)。

2.2.1 双向三态门

当信号线存在双向IO时,可以有两个三态门来控制,一个控制输出,一个控制输入,双向三态门的结构示意图如下:

wKgZomWfTnKAAyjMAABLtt8ciGM843.png

当E1=1,E2=0时,双向三态门的电路传输方向是 A -> B;
当E1=0,E2=1时,双向三态门的电路传输方向是 B -> A;

2.3 三态门建模

三态门的RTL建模方式如下所示

//Tristate Buffer
moduletristate_buffer(input_x,enable,output_x);
inputinput_x;
inputenable;
output output_x;


assign output_x = enable? input_x : 'bz;


endmodule

testbench如下:

module tb();   
reg r_in_x;   
reg w_enable;  
wire w_output_x;


initial begin $display("----------------------
Tri-State Buffer
----------------------
"); 
$monitor("input_x = %b, enable = %b, output_x = %b", r_in_x, w_enable, w_output_x); 
// Generation of stimulus
r_in_x = 0; w_enable= 0;       
# 10  r_in_x = 0;# 10  r_in_x = 1; 
# 10  w_enable = 1; 
# 10  r_in_x = 1; 
# 10  r_in_x = 0; 
end


// Tri-state buffer instantiation
tristate_buffer u_tristate_buffer( 
  .input_x (r_in_x), 
  .enable  (w_enable),  
  .output_x (w_output_x));
endmodule

仿真结果

wKgZomWfTnGAIr1GAABA5dkEWik021.png

3. 双向信号

芯片验证的过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号)。比如,IIC总线中的SDA信号就是一个双向信号,QSPI Flash的四线操作的时候四根信号线均为双向信号。在Verilog中用关键字inout定义双向信号。

如下图所示,双向信号的本质是由一个三态门组成的,三态门可以输出高电平、低电平和高阻态三种状态,其结构大致如下图所示:

wKgaomWfTnGAaWayAAAhRxY2WYE886.png

描述这个逻辑的Verilog代码如下:

module inout_top
(
input       I_data_in        ,
inout       IO_data          ,
output     O_data_out     ,
input       Control
);


assign IO_data = Control ? I_data_in : 1‘bz ;
assign O_data_out = IO_data ;


endmodule    


当Control为1时,IO_data为输出,输出I_data_in的值

当Control为0时,IO_data为输入,把输入的信号赋值给O_data_out。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109308
  • 逻辑器件
    +关注

    关注

    0

    文章

    82

    浏览量

    19947
  • 三态门
    +关注

    关注

    0

    文章

    30

    浏览量

    18679
  • 数字电路
    +关注

    关注

    192

    文章

    1397

    浏览量

    79752

原文标题:Verilog中的三态门与双向信号

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是三态和OC

    三态和OC一、OC实际使用,有时需要两个或两个以上与非门的输出端连接在同一条导线上,将这些与非门上的数据(状态)用同一条导线输送出去
    发表于 05-26 13:01

    Verilog inout 双向口使用和仿真

    芯片外部引脚很多都使用inout类型的,为的是节省管腿。一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态
    发表于 01-17 10:08

    Verilog inout 双向口使用和仿真-转载

    芯片外部引脚很多都使用inout类型的,为的是节省管腿。一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态
    发表于 02-01 11:16

    【经典】集电极开路,漏极开路,推挽,上拉电阻,弱上拉,三态...

    本帖最后由 gk320830 于 2015-3-4 23:25 编辑 【经典】集电极开路,漏极开路,推挽,上拉电阻,弱上拉,三态,准双向
    发表于 07-29 21:17

    74HC244内部的三态是如何实现缓冲和驱动的?

    上才都有显示,这时测出的电压是5V上面的是用proteus仿真的情况,在实际,我看jtag模块上都有一个74HC244这种芯片,我上网搜了一下,说244是三态8同相缓冲/驱动器,说是增加什么驱动
    发表于 07-20 11:49

    VERILOG关于三态

    inout Key_inout;wire Key_input;//输入reg Key_output;//输出reg Key_Ctr;//三态控制assign Key_inout=Key_Ctr
    发表于 09-23 15:34

    集电极开路 漏极开路 推挽 上拉电阻 弱上拉 三态双向

    集电极开路 漏极开路 推挽 上拉电阻 弱上拉 三态双向
    发表于 06-02 16:22

    三态输入和输出之间接电阻是什么用法?

    三态输入信号和输出信号之间接电阻是什么用法?
    发表于 04-09 19:36

    高阻三态的电路原理分析

    处于断开状态)。三态是一种扩展逻辑功能的输出级,也是一种控制开关。主要是用于总线的连接,因为总线只允许同时只有一个使用者。通常在数据总线上接有多个器件,每个器件通过OE/CE之类的信号选通。如器件
    发表于 01-08 11:03

    【梦翼师兄今日分享】 三态程序设计讲解

    等,要求信号三态类型,也就是我们所说的输入输出(inout)类型。那么,本节梦翼师兄将和大家一起来探讨三态的用法。项目需求设计一个三态
    发表于 12-12 16:11

    请教技术大佬 三态与高阻是个撒子东西?

    新人在工作中经常碰到三态与高阻;请教技术大佬,这两个到底是什么东西 ?
    发表于 04-07 06:59

    三态的工作原理是什么?

    三态的工作原理是什么?
    发表于 05-20 06:55

    三态单片机IO的三态是指什么

    一、三态单片机IO的三态是指:高电平(1)、低电平(0)、高组态(Z)。二、高阻高阻i是一种电路状态.既不是高电平,也不是低电平,以高阻对下级电路输出,下级电路什么影响也没有.高阻
    发表于 11-25 06:42

    请问这个三态为什么不能实现非功能?

    请问这个三态为什么不能实现非功能?它的逻辑表达式不应该是A非吗?
    发表于 04-26 11:49

    请问这个三态为什么不能实现非功能?

    请问这个三态为什么不能实现非功能?它的逻辑表达式不应该是A非吗?
    发表于 05-10 17:44