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

    文章

    1343

    浏览量

    109952
  • 逻辑器件
    +关注

    关注

    0

    文章

    88

    浏览量

    20084
  • 三态门
    +关注

    关注

    1

    文章

    34

    浏览量

    18793
  • 数字电路
    +关注

    关注

    193

    文章

    1599

    浏览量

    80466

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

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

收藏 人收藏

    评论

    相关推荐

    什么是三态和OC

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

    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

    高阻三态的电路原理分析

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

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

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

    三态的工作原理是什么?

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

    什么是三态? 三态逻辑与非门电路以及三态门电路

    什么是三态? 三态,是指逻辑的输出除有高、低电平两种状态外,还有第种状态——高阻状态的
    发表于 05-26 12:48 4.7w次阅读
    什么是<b class='flag-5'>三态</b><b class='flag-5'>门</b>? <b class='flag-5'>三态</b>逻辑与非门电路以及<b class='flag-5'>三态</b>门电路

    三态的组成及工作原理

    三态的组成及工作原理
    发表于 02-28 19:13 2.5w次阅读
    <b class='flag-5'>三态</b><b class='flag-5'>门</b>的组成及工作原理

    三态逻辑功能的Multisim仿真方案

    介绍了用Multisim仿真软件分析三态工作过程的方法,目的是探索三态工作波形的仿真实验技术,即用Multisim仿真软件的字组产生器
    发表于 05-06 15:59 0次下载
    <b class='flag-5'>三态</b><b class='flag-5'>门</b>逻辑功能的Multisim仿真方案

    三态有哪三态_三态有什么特点

    本文开始介绍了三态的定义与三态的应用,其次对三态三态
    发表于 03-01 14:47 12.9w次阅读
    <b class='flag-5'>三态</b><b class='flag-5'>门</b>有哪<b class='flag-5'>三态</b>_<b class='flag-5'>三态</b><b class='flag-5'>门</b>有什么特点

    传输三态什么区别

    本文主要介绍了传输三态什么区别,三态就是指输出有种状态(0,1,高阻)的
    的头像 发表于 04-08 15:33 5.5w次阅读
    传输<b class='flag-5'>门</b>和<b class='flag-5'>三态</b><b class='flag-5'>门</b>什么区别

    三态怎么理解

    三态亦称“三态输出门”、“三态输出电路”。是一种重要的总线接口电路。具有高电平、低电平和高阻抗
    的头像 发表于 03-10 09:29 1.8w次阅读

    FPGA之三态

    三态电路可提供种不同的输出值:逻辑“0”,逻辑“1”和高阻。高阻主要用来将逻辑同系统的其他部分加以隔离。例如
    的头像 发表于 11-29 07:09 4459次阅读

    三态的用法及模块功能介绍

    三态电路可提供种不同的输出值:逻辑“0”,逻辑“1”和高阻。高阻主要用来将逻辑同系统的其他部分加以隔离。例如
    的头像 发表于 11-21 07:05 8632次阅读

    三态原理HDL语言DSP和ARM总线的仿真及Modelsim使用教程资料

    本文档的主要内容详细介绍的是三态原理HDL语言DSP和ARM总线的仿真及Modelsim使用教程资料主要内容包括了:1 ModelSimSE的使用流程,2 一个Verilog计数器仿真详细流程附
    发表于 07-09 16:49 10次下载
    <b class='flag-5'>三态</b><b class='flag-5'>门</b>原理HDL语言DSP和ARM总线的仿真及Modelsim使用教程资料