Verilog筆記.4.inout端口


inout是一個雙向端口,實現為使用三態門,第三態為高阻態‘z’。

在實際電路中高阻態意味着響應的管腳懸空、斷開。

當三態門的控制信號為真時,三態門選通,作輸出端口使用;控制信號為假時,三態門是高阻態,作輸入端口用。

使用時,可用一下寫法

1  inout data_inout;
2  input data_in;
3  
4  reg data_reg;//data_inout的映象寄存器
5  reg link_data;
6  
7  assign data_inout=link_data?data_reg:1’bz;//link_data控制三態門
8 //對於data_reg,可以通過組合邏輯或者時序邏輯根據data_in對其賦值.
9 //通過控制link_data的高低電平,從而設置data_inout是輸出數據還是處於高阻態,
10 //如果處於高阻態,則此時當作輸入端口使用.link_data可以通過相關電路來控制.

模塊代碼

 1 module three_state(
 2                    //系統輸入
 3                    clk,//系統時鍾輸入
 4                    rst_n,//低電平復位信號
 5                    data_buf,
 6                    //系統輸出
 7                    sda//三態總線
 8                     );
 9 
10 //-------------------系統輸入-------------------
11 input clk;//系統時鍾輸入
12 input rst_n;//低電平復位信號
13 input data_buf;//待傳輸數據
14 //-------------------系統輸出-------------------
15 inout sda;//三態總線
16 //------------------寄存器定義------------------
17 reg flag;//三態門開關定義
18 reg [10:0]counter;//計數器定義
19 //------------------三態門賦值------------------
20 assign sda=(flag==1)?data_buf:1'bz;
21 //----------------開關控制計數器----------------
22 always@(posedge clk or negedge rst_n)
23      begin
24         if(!rst_n)
25             begin
26                 counter<=0;//計數器復位
27             end
28         else
29             begin
30                 if(counter<</span>25)//計數器范圍
31                     counter<=counter+1;//計數器累加
32                 else
33                     counter<=0;//計數器清零
34             end
35     end
36 //----------------開關/數據控制-----------------
37 always@(posedge clk or negedge rst_n)
38     begin
39         if(!rst_n)
40             begin
41                 flag<=0;//開關關閉
42             end
43         else
44             begin
45                 if(counter==25)
46                     flag<=~flag;//開關信號翻轉
47             end
48     end
49 endmodule        

相連的兩個inout端口由一對信號交叉控制:
在內部模塊中inout端口不能獨立存在,當一個模塊的inout端口作為輸出時,那么另一個模塊的inout端口必然作為輸入;反之,當一個模塊的inout端口作為輸入時,那么另一個模塊的inout端口必然作為輸出。因此,這兩個inout端口的控制信號實際上是由一對信號交叉控制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM