1.前言
在數字電路中,邏輯輸出有兩個正常態:低電平狀態(對應邏輯0)和高電平狀態(對應邏輯1)。此外,電路還有不屬于0和1狀態的高阻態,高阻態常用字母 Z 表示。
高阻態可做開路理解??梢园阉醋鬏敵觯ㄝ斎耄?a target="_blank">電阻非常大,它的極限狀態可以認為懸空(開路)。也就是說理論上高阻態不是懸空,它是對地或對電源電阻極大的狀態。而實際應用上與引腳的懸空幾乎是一樣的?;蛘呖梢岳斫鉃檩敵雠c電路是斷開的。高阻抗狀態將器件與電路的其余部分電路隔離。高阻態時引腳對地電阻無窮,此時讀引腳電平就可以讀到真實的電平值。高阻態的重要作用就是I/O口在用作輸入(input)時讀入外部電平。
一般門與其它電路的連接,無非是兩種狀態,0或者1,在比較復雜的系統中,為了能在一條傳輸線上傳送不同的信號,研制了相應的邏輯器件稱為三態門。三態門是一種控制開關。
三態門主要是用于總線的連接,因為總線只允許同時只有一個器件使用。通常在數據總線上接有多個器件,每個器件通過OE/CE之類的信號選通。如果器件沒有選通的話它就處于高阻態,相當于沒有接在總線上,不影響其它器件的工作。三態邏輯門允許許多設備連接到相同的數據線上,例如數據和地址總線。然而,任何時候只有一個設備“連接”,所有其他設備都處于高阻抗狀態,因此電氣斷開。
雙向信號本質上是由一個三態門組成,具體細節參見后面的描述。
2. 三態門
2.1示意圖、真值表
Verilog中有四個元件模型來表示三態門電路,分別是bufif1,bufif0,notif1,notif0。三態門的示意圖、真值表分別如下圖所示:
2.2 三態門結構
三態門電路的輸出結構和普通門電路的輸出結構有很大的不同,因為它在電路中增加了一個輸出控制端。
2.2.1 單向三態門
單向三態門的結構示意圖如下:
由上圖看出,在單向三態門中,當E為高電平時,B與A相連,數據流向是A-->B;而當E為低電平時,B的輸出為高阻態,相當于B側電路與A側電路之間的連線斷開,此時可以從外部向B驅動信號,實現相反方向的數據流向(B-->A)。
2.2.1 雙向三態門
當信號線存在雙向IO時,可以有兩個三態門來控制,一個控制輸出,一個控制輸入,雙向三態門的結構示意圖如下:
當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
仿真結果
3. 雙向信號
在芯片驗證的過程中,有時候會遇到雙向信號(既能作為輸出,也能作為輸入的信號叫雙向信號)。比如,IIC總線中的SDA信號就是一個雙向信號,QSPI Flash的四線操作的時候四根信號線均為雙向信號。在Verilog中用關鍵字inout定義雙向信號。
如下圖所示,雙向信號的本質是由一個三態門組成的,三態門可以輸出高電平、低電平和高阻態三種狀態,其結構大致如下圖所示:
描述這個邏輯的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文章
1355瀏覽量
110870 -
邏輯器件
+關注
關注
0文章
88瀏覽量
20213 -
三態門
+關注
關注
1文章
34瀏覽量
18892 -
數字電路
+關注
關注
193文章
1633瀏覽量
81084
原文標題:Verilog中的三態門與雙向信號
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
VERILOG關于三態門
高阻態與三態門的電路原理分析
【夢翼師兄今日分享】 三態門程序設計講解
三態門邏輯功能的Multisim仿真方案

三態門原理HDL語言DSP和ARM總線的仿真及Modelsim使用教程資料

評論