1.前言
在數(shù)字電路中,邏輯輸出有兩個正常態(tài):低電平狀態(tài)(對應(yīng)邏輯0)和高電平狀態(tài)(對應(yīng)邏輯1)。此外,電路還有不屬于0和1狀態(tài)的高阻態(tài),高阻態(tài)常用字母 Z 表示。
高阻態(tài)可做開路理解。可以把它看作輸出(輸入)電阻非常大,它的極限狀態(tài)可以認(rèn)為懸空(開路)。也就是說理論上高阻態(tài)不是懸空,它是對地或?qū)?a target="_blank">電源電阻極大的狀態(tài)。而實(shí)際應(yīng)用上與引腳的懸空幾乎是一樣的?;蛘呖梢岳斫鉃檩敵雠c電路是斷開的。高阻抗?fàn)顟B(tài)將器件與電路的其余部分電路隔離。高阻態(tài)時引腳對地電阻無窮,此時讀引腳電平就可以讀到真實(shí)的電平值。高阻態(tài)的重要作用就是I/O口在用作輸入(input)時讀入外部電平。
一般門與其它電路的連接,無非是兩種狀態(tài),0或者1,在比較復(fù)雜的系統(tǒng)中,為了能在一條傳輸線上傳送不同的信號,研制了相應(yīng)的邏輯器件稱為三態(tài)門。三態(tài)門是一種控制開關(guān)。
三態(tài)門主要是用于總線的連接,因?yàn)榭偩€只允許同時只有一個器件使用。通常在數(shù)據(jù)總線上接有多個器件,每個器件通過OE/CE之類的信號選通。如果器件沒有選通的話它就處于高阻態(tài),相當(dāng)于沒有接在總線上,不影響其它器件的工作。三態(tài)邏輯門允許許多設(shè)備連接到相同的數(shù)據(jù)線上,例如數(shù)據(jù)和地址總線。然而,任何時候只有一個設(shè)備“連接”,所有其他設(shè)備都處于高阻抗?fàn)顟B(tài),因此電氣斷開。
雙向信號本質(zhì)上是由一個三態(tài)門組成,具體細(xì)節(jié)參見后面的描述。
2. 三態(tài)門
2.1示意圖、真值表
Verilog中有四個元件模型來表示三態(tài)門電路,分別是bufif1,bufif0,notif1,notif0。三態(tài)門的示意圖、真值表分別如下圖所示:



2.2 三態(tài)門結(jié)構(gòu)
三態(tài)門電路的輸出結(jié)構(gòu)和普通門電路的輸出結(jié)構(gòu)有很大的不同,因?yàn)樗陔娐分性黾恿艘粋€輸出控制端。
2.2.1 單向三態(tài)門
單向三態(tài)門的結(jié)構(gòu)示意圖如下:

由上圖看出,在單向三態(tài)門中,當(dāng)E為高電平時,B與A相連,數(shù)據(jù)流向是A-->B;而當(dāng)E為低電平時,B的輸出為高阻態(tài),相當(dāng)于B側(cè)電路與A側(cè)電路之間的連線斷開,此時可以從外部向B驅(qū)動信號,實(shí)現(xiàn)相反方向的數(shù)據(jù)流向(B-->A)。
2.2.1 雙向三態(tài)門
當(dāng)信號線存在雙向IO時,可以有兩個三態(tài)門來控制,一個控制輸出,一個控制輸入,雙向三態(tài)門的結(jié)構(gòu)示意圖如下:

當(dāng)E1=1,E2=0時,雙向三態(tài)門的電路傳輸方向是 A -> B;
當(dāng)E1=0,E2=1時,雙向三態(tài)門的電路傳輸方向是 B -> A;
2.3 三態(tài)門建模
三態(tài)門的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
仿真結(jié)果

3. 雙向信號
在芯片驗(yàn)證的過程中,有時候會遇到雙向信號(既能作為輸出,也能作為輸入的信號叫雙向信號)。比如,IIC總線中的SDA信號就是一個雙向信號,QSPI Flash的四線操作的時候四根信號線均為雙向信號。在Verilog中用關(guān)鍵字inout定義雙向信號。
如下圖所示,雙向信號的本質(zhì)是由一個三態(tài)門組成的,三態(tài)門可以輸出高電平、低電平和高阻態(tài)三種狀態(tài),其結(jié)構(gòu)大致如下圖所示:

描述這個邏輯的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
當(dāng)Control為1時,IO_data為輸出,輸出I_data_in的值
當(dāng)Control為0時,IO_data為輸入,把輸入的信號賦值給O_data_out。
審核編輯:湯梓紅
-
Verilog
+關(guān)注
關(guān)注
30文章
1374瀏覽量
114704 -
邏輯器件
+關(guān)注
關(guān)注
0文章
108瀏覽量
20764 -
三態(tài)門
+關(guān)注
關(guān)注
1文章
34瀏覽量
19158 -
數(shù)字電路
+關(guān)注
關(guān)注
193文章
1666瀏覽量
83521
原文標(biāo)題:Verilog中的三態(tài)門與雙向信號
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
什么是三態(tài)門和OC門?
集電極開路 漏極開路 推挽 上拉電阻 弱上拉 三態(tài)門 準(zhǔn)雙向口
高阻態(tài)與三態(tài)門的電路原理分析
【夢翼師兄今日分享】 三態(tài)門程序設(shè)計(jì)講解
什么是三態(tài)門? 三態(tài)邏輯與非門電路以及三態(tài)門電路
三態(tài)門邏輯功能的Multisim仿真方案
三態(tài)門有哪三態(tài)_三態(tài)門有什么特點(diǎn)
三態(tài)門怎么理解
FPGA之三態(tài)門
三態(tài)門的用法及模塊功能介紹
三態(tài)門原理HDL語言DSP和ARM總線的仿真及Modelsim使用教程資料
Verilog中的三態(tài)門與雙向信號詳解
評論