Verilog中三态门(高阻态)的理解与例子

本文介绍了高阻态在数字电路中的概念及其在Verilog实现单端口SRAM中的应用。通过使用高阻态,可以实现在不占用总线时释放总线,确保输入输出逻辑互不影响。文章详细阐述了如何利用三态逻辑解决输出部分电路设计对输入逻辑的影响,并提供了具体的Verilog代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

link

以前只知道电路的输出有高阻态,但是对高阻态的理解不够,对高阻态的用法也不清楚,直到用Verilog实现单端口SRAM时,才有了一个进一步的认识,记录如下;

Verilog实现单端口SRAM的内容见:Verilog实现RAM(2-单端口同步读写SRAM)  此处不再赘述

一、百度百科概念照搬

高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。

简介:在电子学中,高阻态(英语:High impedance)表示电路中的某个节点具有相对电路中其他点相对更高的阻抗。这个概念在三态逻辑上拉电阻中有所涉及。在硬件描述语言(如Verilog HDLVHDL)中,高阻态通常用字母z来表示。

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

意义:当门电路的输出上拉管导通而下拉管截止时,输出为高电平;反之就是低电平;如上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制 。

表示方法:高阻态常用字母 Z 表示。

典型应用 实例1:在总线连接的结构上。总线上挂有多个设备,设备与总线以高阻的形式连接。这样在设备不占用总线时自动释放总线,以方便其他设备获得总线的使用权。

典型应用 实例2:大部分单片机I/O使用时都可以设置为高阻输入,如凌阳,AVR等等。高阻输入可以认为输入电阻是无穷大的,认为I/O对前级影响极小,而且不产生电流(不衰减),而且在一定程度上也增加了芯片的抗电压冲击能力。

三态逻辑:在数字电路中,三态逻辑(英语:Three-state logic)允许输出端在0和1两种逻辑电平之外呈现高阻态,等效于将输出的影响从后级电路中移除。这允许多个电路共同使用同一个输出线(例如总线)。

三态输出在寄存器总线以及7400系列、4000系列等各型号的逻辑IC发挥着重要的作用,并常常内置在其他各种集成电路。除此之外,三态逻辑的典型应用还包括微处理器存储设备、外设的内部和外部总线。许多设备提供一个OE(Output Enable)用于在低电平时才令输出使能,而在不使能时保持高阻态。

二、单端口SRAM中的应用

d为inout端口,如果在输出的时候简单使用

assign d = (输出) ? reg_d : 0;//写逻辑时d作为数据输入,而输出逻辑将d置数;

还是

assign d =  reg_d;//写逻辑时d作为数据输入,而输出逻辑将d与reg_d连接;

可见,输出部分电路设计势必对输入部分逻辑产生影响;

因此应利用三态逻辑中高阻态不占用总线这一逻辑,实现输入输出的交替逻辑,使得两者互不影响;实现代码如下


    
  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer: guoliang CLL
  5. //
  6. // Create Date: 2020/02/23 12:06:07
  7. //
  8. module sram_sp_srsw
  9. #(parameter DW = 8, AW = 4)
  10. (
  11. input [ AW -1: 0]a, //address
  12. input clk,
  13. input cs, // chip select
  14. input oe, // output enable
  15. input we, // write enable
  16. inout [ DW -1: 0]d // data
  17. );
  18. //
  19. parameter DP = 1 << AW; // depth
  20. reg [ DW -1: 0]mem[ 0: DP -1];
  21. reg [ DW -1: 0]reg_d;
  22. //initialization
  23. // synopsys_translate_off
  24. integer i;
  25. initial begin
  26. for(i= 0; i < DP; i = i + 1) begin
  27. mem[i] = 8'h00;
  28. end
  29. end
  30. // synopsys_translate_on
  31. //
  32. always@(posedge clk)
  33. begin
  34. if(cs & we) //write declaration
  35. begin
  36. mem[a] <= d;
  37. end
  38. else if(cs & !we & oe)
  39. begin
  40. reg_d <= mem[a];
  41. end
  42. else
  43. begin
  44. mem[a] <= mem[a];
  45. reg_d <= reg_d;
  46. end
  47. end
  48. //
  49. assign d = (cs & !we & oe) ? reg_d : { DW{ 1'bz}};
  50. endmodule

三、参考文献

高阻态

</article>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值