1.前言
在數(shù)字電路中,邏輯輸出有兩個(gè)正常態(tài):低電平狀態(tài)(對(duì)應(yīng)邏輯0)和高電平狀態(tài)(對(duì)應(yīng)邏輯1)。此外,電路還有不屬于0和1狀態(tài)的高阻態(tài),高阻態(tài)常用字母 Z 表示。
高阻態(tài)可做開路理解??梢园阉醋鬏敵觯ㄝ斎耄?a target="_blank">電阻非常大,它的極限狀態(tài)可以認(rèn)為懸空(開路)。也就是說理論上高阻態(tài)不是懸空,它是對(duì)地或?qū)?a target="_blank">電源電阻極大的狀態(tài)。而實(shí)際應(yīng)用上與引腳的懸空幾乎是一樣的。或者可以理解為輸出與電路是斷開的。高阻抗?fàn)顟B(tài)將器件與電路的其余部分電路隔離。高阻態(tài)時(shí)引腳對(duì)地電阻無窮,此時(shí)讀引腳電平就可以讀到真實(shí)的電平值。高阻態(tài)的重要作用就是I/O口在用作輸入(input)時(shí)讀入外部電平。
一般門與其它電路的連接,無非是兩種狀態(tài),0或者1,在比較復(fù)雜的系統(tǒng)中,為了能在一條傳輸線上傳送不同的信號(hào),研制了相應(yīng)的邏輯器件稱為三態(tài)門。三態(tài)門是一種控制開關(guān)。
三態(tài)門主要是用于總線的連接,因?yàn)榭偩€只允許同時(shí)只有一個(gè)器件使用。通常在數(shù)據(jù)總線上接有多個(gè)器件,每個(gè)器件通過OE/CE之類的信號(hào)選通。如果器件沒有選通的話它就處于高阻態(tài),相當(dāng)于沒有接在總線上,不影響其它器件的工作。三態(tài)邏輯門允許許多設(shè)備連接到相同的數(shù)據(jù)線上,例如數(shù)據(jù)和地址總線。然而,任何時(shí)候只有一個(gè)設(shè)備“連接”,所有其他設(shè)備都處于高阻抗?fàn)顟B(tài),因此電氣斷開。
雙向信號(hào)本質(zhì)上是由一個(gè)三態(tài)門組成,具體細(xì)節(jié)參見后面的描述。
2. 三態(tài)門
2.1示意圖、真值表
Verilog中有四個(gè)元件模型來表示三態(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)樗陔娐分性黾恿艘粋€(gè)輸出控制端。
2.2.1 單向三態(tài)門
單向三態(tài)門的結(jié)構(gòu)示意圖如下:
由上圖看出,在單向三態(tài)門中,當(dāng)E為高電平時(shí),B與A相連,數(shù)據(jù)流向是A-->B;而當(dāng)E為低電平時(shí),B的輸出為高阻態(tài),相當(dāng)于B側(cè)電路與A側(cè)電路之間的連線斷開,此時(shí)可以從外部向B驅(qū)動(dòng)信號(hào),實(shí)現(xiàn)相反方向的數(shù)據(jù)流向(B-->A)。
2.2.1 雙向三態(tài)門
當(dāng)信號(hào)線存在雙向IO時(shí),可以有兩個(gè)三態(tài)門來控制,一個(gè)控制輸出,一個(gè)控制輸入,雙向三態(tài)門的結(jié)構(gòu)示意圖如下:
當(dāng)E1=1,E2=0時(shí),雙向三態(tài)門的電路傳輸方向是 A -> B;
當(dāng)E1=0,E2=1時(shí),雙向三態(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. 雙向信號(hào)
在芯片驗(yàn)證的過程中,有時(shí)候會(huì)遇到雙向信號(hào)(既能作為輸出,也能作為輸入的信號(hào)叫雙向信號(hào))。比如,IIC總線中的SDA信號(hào)就是一個(gè)雙向信號(hào),QSPI Flash的四線操作的時(shí)候四根信號(hào)線均為雙向信號(hào)。在Verilog中用關(guān)鍵字inout定義雙向信號(hào)。
如下圖所示,雙向信號(hào)的本質(zhì)是由一個(gè)三態(tài)門組成的,三態(tài)門可以輸出高電平、低電平和高阻態(tài)三種狀態(tài),其結(jié)構(gòu)大致如下圖所示:
描述這個(gè)邏輯的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時(shí),IO_data為輸出,輸出I_data_in的值
當(dāng)Control為0時(shí),IO_data為輸入,把輸入的信號(hào)賦值給O_data_out。
審核編輯:湯梓紅
-
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110100 -
邏輯器件
+關(guān)注
關(guān)注
0文章
88瀏覽量
20099 -
三態(tài)門
+關(guān)注
關(guān)注
1文章
34瀏覽量
18826 -
數(shù)字電路
+關(guān)注
關(guān)注
193文章
1605瀏覽量
80622
原文標(biāo)題:Verilog中的三態(tài)門與雙向信號(hào)
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論