在FPGA設(shè)計中,雙向IO(輸入輸出引腳)是一個比較麻煩的東西,但是信號線用作總線等雙向數(shù)據(jù)傳輸時就要用到inout類型。
以下用液晶的的數(shù)據(jù)線用作雙向IO示例:
說是雙向IO端口,其實(shí)輸入和輸出不是同時進(jìn)行的,需要有一個控制信號out_en來控制端口什么時候為輸出,什么時候為輸入。
那這里就需要引入一個三態(tài)門結(jié)構(gòu)電路。
三態(tài)門結(jié)構(gòu)
那么三態(tài)門的結(jié)構(gòu)是怎樣的呢?
三態(tài)門電路的輸出結(jié)構(gòu)和普通門電路的輸出結(jié)構(gòu)有很大的不同,因為它在電路中增加了一個輸出控制端EN。
由上圖看出,在單相三態(tài)門中,當(dāng)EN=1時,對原電路無影響,電路的輸出符合原來電路的所有邏輯關(guān)系,即A可以輸出到B。當(dāng)EN= 0時,電路內(nèi)部的所有輸出與外部將處于一種關(guān)斷狀態(tài)。
因此,當(dāng)FPGA的信號線存在雙向IO時,可以有兩個三態(tài)門來控制,一個控制輸出,一個控制輸入,結(jié)構(gòu)如下:
當(dāng)ENout=1,ENin=0時,雙向三態(tài)門的電路傳輸方向是A->B;
當(dāng)ENout=0,ENin=1時,雙向三態(tài)門的電路傳輸方向是B->A;
模型分析
下面簡單做個簡易模型來說明雙向IO如何分別實(shí)現(xiàn)作為輸入端口和輸出端口的功能,模塊圖如下:
模型引腳定義
(1)輸入口A定義:當(dāng)雙向端口dinout作為輸出口時,我們將A端口輸入數(shù)據(jù)傳到模塊中,讓數(shù)據(jù)從dinout口出來。
(2)輸出端口B定義:當(dāng)當(dāng)雙向端口dinout作為輸入口時,我們將dinout端口輸入數(shù)據(jù)傳到模塊中,讓數(shù)據(jù)從B口出來。
(3)EN控制信號定義:當(dāng)EN=1時,開通三態(tài)門,將dinout作為輸出口使用,當(dāng)EN=0時,把三態(tài)門置為高阻態(tài),這時dinout作為輸入口用。
代碼展示
編譯分析后查看RTL視角邏輯電路,符合原有模型設(shè)計。
總結(jié)說明
(1)FPGA內(nèi)部不允許傳遞雙向IO信號,只有FPGA對外部才能定義為雙向IO端口,即只有在頂層輸出的信號才可以被賦值為高阻態(tài)。
(2)在結(jié)構(gòu)化建模的過程中,一個模塊一個功能的建模,當(dāng)涉及到內(nèi)部模塊的端口是雙向IO端口時,然后根據(jù)一個雙向IO對應(yīng)一個輸入,一個輸出和一個使能控制,把模塊中雙向IO的輸出用輸出端口代替,雙向IO的輸入用輸入端口代替,引出使能信號,并把對應(yīng)assign中賦值的高阻態(tài)z根據(jù)實(shí)際情況給出0或1,來解決FPGA內(nèi)部雙向IO連接問題。
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1629文章
21738瀏覽量
603463 -
電路
+關(guān)注
關(guān)注
172文章
5915瀏覽量
172268 -
信號線
+關(guān)注
關(guān)注
2文章
172瀏覽量
21471
原文標(biāo)題:FPGA雙向IO使用之三態(tài)門說明
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論