Inout雙向端口的用法
inout端口信號做輸入時(shí),觀(guān)察例子中的輸出data_out_t就應該是高阻態(tài)的.
見(jiàn)許多問(wèn)這個(gè)問(wèn)題的,總結一下大家的貼子,希望能對大家有點(diǎn)用處,如果有不對的地方,歡迎指出.
芯片外部引腳很多都使用inout類(lèi)型的,為的是節省管腿。就是一個(gè)端口同時(shí)做輸入和輸出。 inout在具體實(shí)現上一般用三態(tài)門(mén)來(lái)實(shí)現。三態(tài)門(mén)的第三個(gè)狀態(tài)就是高阻Z。 當inout端口不輸出時(shí),將三態(tài)門(mén)置高阻。這樣信號就不會(huì )因為兩端同時(shí)輸出而出錯了,更詳細的內容可以搜索一下三態(tài)門(mén)tri-state的資料.
1 使用inout類(lèi)型數據,可以用如下寫(xiě)法:
inout data_inout;
input data_in;
reg data_reg;//data_inout的映象寄存器
reg link_data;
assign data_inout=link_data?data_reg:1bz;//link_data控制三態(tài)門(mén)
//對于data_reg,可以通過(guò)組合邏輯或者時(shí)序邏輯根據data_in對其賦值.通過(guò)控制link_data的高低電平,從而設置data_inout是輸出數據還是處于高阻態(tài),如果處于高阻態(tài),則此時(shí)當作輸入端口使用.link_data可以通過(guò)相關(guān)電路來(lái)控制.
2 編寫(xiě)測試模塊時(shí),對于inout類(lèi)型的端口,需要定義成wire類(lèi)型變量,而其它輸入端口都定義成reg類(lèi)型,這兩者是有區別的.
當上面例子中的data_inout用作輸入時(shí),需要賦值給data_inout,其余情況可以斷開(kāi).此時(shí)可以用assign語(yǔ)句實(shí)現:assign data_inout=link?data_in_t:1bz;其中的link ,data_in_t是reg類(lèi)型變量,在測試模塊中賦值.
另外,可以設置一個(gè)輸出端口觀(guān)察data_inout用作輸出的情況:
Wire data_out;
Assign data_out_t=(!link)?data_inout:1bz;
評論