Inout雙向埠的用法

admin @ 2014-03-26 , reply:0

概述
如果data_inout不是高阻態,則用作輸出,無法做輸入的,否則兩者豈不有了衝突?inout埠信號做輸入時,觀察例子中的輸出data_out_t就應該是高阻態的.見許多問這個問題的,總結一下大家的貼……

如果data_inout不是高阻態,則用作輸出,無法做輸入的,否則兩者豈不有了衝突?
inout埠信號做輸入時,觀察例子中的輸出data_out_t就應該是高阻態的.


見許多問這個問題的,總結一下大家的貼子,希望能對大家有點用處,如果有不對的地方,歡迎指出.
晶元外部引腳很多都使用inout類型的,為的是節省管腿。就是一個埠同時做輸入和輸出。 inout在具體實現上一般用三態門來實現。三態門的第三個狀態就是高阻'Z'。當inout埠不輸出時,將三態門置高阻。這樣信號就不會因為兩端同時輸出而出錯了,更詳細的內容可以搜索一下三態門tri-state的資料.
1 使用inout類型數據,可以用如下寫法:
inout data_inout;
input data_in;
reg data_reg;//data_inout的映象寄存器
reg link_data;
assign data_inout=link_data?data_reg:1'bz;//link_data控制三態門

//對於data_reg,可以通過組合邏輯或者時序邏輯根據data_in對其賦值.通過控制link_data的高低電平,從而設置data_inout是輸出數據還是處於高阻態,如果處於高阻態,則此時當作輸入埠使用.link_data可以通過相關電路來控制.
2 編寫測試模塊時,對於inout類型的埠,需要定義成wire類型變數,而其它輸入埠都定義成reg類型,這兩者是有區別的.
當上面例子中的data_inout用作輸入時,需要賦值給data_inout,其餘情況可以斷開.此時可以用assign語句實現:assign data_inout=link?data_in_t:1'bz;其中的link ,data_in_t是reg類型變數,在測試模塊中賦值.
另外,可以設置一個輸出埠觀察data_inout用作輸出的情況:
Wire data_out;
Assign data_out_t=(!link)?data_inout:1'bz;




[admin via 研發互助社區 ] Inout雙向埠的用法已經有3470次圍觀

http://cocdig.com/docs/show-post-43523.html