Coo1Runner-Ⅱ器件實現雙向多路選擇器
發布時間:2008/9/19 0:00:00 訪問次數:929
該范例的設計與實現如下。
(1)cpld設計
cpld設計實際上是一個雙向多路選擇器,主機通過“select”信號選擇sd卡。一旦選中,cpld會自動檢測數據流的方向并建立通信。不必用專門的引腳來指定傳輸方向,用非常方便,如圖1所示。
如圖1 雙向多路選擇器
主機可以訪問其中任何一塊sd卡,而不會影響其他卡。如果主機和sd卡都沒有驅動總線,則總線為高阻狀態。
如圖2所示為用于實現雙卡的多路選擇器,在初始或mle狀態,主機host和sd卡均
處于弱上拉狀態。因此如2圖所示電路設置為開路輸出,外部上拉電阻起作用。上電時,寄存器a和b初始化為“0”。當“select”為“0”,sdi被選中;當“select”為“1”,sd2被選中。為了方便,以下討論假定主機與sdi卡通信。
如圖2 雙卡的多路選擇器
自動檢測數據流方向的思路為本設計的重點,host或sdi驅動總線為低,將會啟動一次數據傳輸。例如,如果host要發送數據給sdi,當host驅動a端為低電平時,bi門輸出高電平。三態buffer使能端有效,也輸出低電平到sdi端。同時a_reg的clock端會出現一個上升沿,從而a_reg的q端輸出高電平。此高電平禁止了三態buffera和b_reg端出現clock的有效沿。這樣一來,使sdi端跟蹤了host端的變化。
相反,如果host端驅動為高電平,門bi輸出低電平,從而強制b輸出高電平(通過外部上拉電阻)。一旦a端和b端都輸出高電平,a_reg和b_reg均復位為低電平。
以上過程周而復始地進行,如果數據傳輸方向是從sdi到host,上述傳輸過程恰好相反。另外,host與sd2之間的通信與host與sdi之間的通信類似。不再贅述。
(2)設計范例
源代碼及測試程序可從xilinx網站下載,如圖3所示為仿真波形。
如圖3 modelsim仿真波形
仿真時,首先是sel為低電平,host發數據給sdi。sdi收到數據后發給host,圖中虛線表示高阻狀態。之后sel為高電平,host與sd2之間通信。如表所示為設計實現后的資源使用情況。
如表 設計實現后的資源使用情況
該范例的設計與實現如下。
(1)cpld設計
cpld設計實際上是一個雙向多路選擇器,主機通過“select”信號選擇sd卡。一旦選中,cpld會自動檢測數據流的方向并建立通信。不必用專門的引腳來指定傳輸方向,用非常方便,如圖1所示。
如圖1 雙向多路選擇器
主機可以訪問其中任何一塊sd卡,而不會影響其他卡。如果主機和sd卡都沒有驅動總線,則總線為高阻狀態。
如圖2所示為用于實現雙卡的多路選擇器,在初始或mle狀態,主機host和sd卡均
處于弱上拉狀態。因此如2圖所示電路設置為開路輸出,外部上拉電阻起作用。上電時,寄存器a和b初始化為“0”。當“select”為“0”,sdi被選中;當“select”為“1”,sd2被選中。為了方便,以下討論假定主機與sdi卡通信。
如圖2 雙卡的多路選擇器
自動檢測數據流方向的思路為本設計的重點,host或sdi驅動總線為低,將會啟動一次數據傳輸。例如,如果host要發送數據給sdi,當host驅動a端為低電平時,bi門輸出高電平。三態buffer使能端有效,也輸出低電平到sdi端。同時a_reg的clock端會出現一個上升沿,從而a_reg的q端輸出高電平。此高電平禁止了三態buffera和b_reg端出現clock的有效沿。這樣一來,使sdi端跟蹤了host端的變化。
相反,如果host端驅動為高電平,門bi輸出低電平,從而強制b輸出高電平(通過外部上拉電阻)。一旦a端和b端都輸出高電平,a_reg和b_reg均復位為低電平。
以上過程周而復始地進行,如果數據傳輸方向是從sdi到host,上述傳輸過程恰好相反。另外,host與sd2之間的通信與host與sdi之間的通信類似。不再贅述。
(2)設計范例
源代碼及測試程序可從xilinx網站下載,如圖3所示為仿真波形。
如圖3 modelsim仿真波形
仿真時,首先是sel為低電平,host發數據給sdi。sdi收到數據后發給host,圖中虛線表示高阻狀態。之后sel為高電平,host與sd2之間通信。如表所示為設計實現后的資源使用情況。
如表 設計實現后的資源使用情況
上一篇:數字時鐘管理器