Re: [問題] verilog 語法 inout
※ 引述《ccjin (別活在自己的地獄裡)》之銘言:
: 請教各位 假設inout 合成會變成 three-state logic (也許是我搞錯了)
: 但是如何做到雙向呢 因為就算是 three-state logic 感覺也不能雙向溝通
: 還有請教
: module bidir_port(oe, clk, bidir)
: input oe; // 即你所寫的oe
: input clk;
: inout bidir;
: wire a; // 要丟出去的資料
: reg b; // 讀資料進來處理的位置
: assign bidir = oe ? a : 1'bZ;
: always @(posedge clk)
: begin
: b <= birdir;
: end
: 對於上式 oe = 0; 輸出等於高阻抗 不會跟 input 相衝突
: 但是面對 oe = 1; 不就出現 內部資料想輸出 但是外部資料也輸入
: 這不是就會造成衝突 ?
: 也許這是很簡單的問題 卻困擾我很久 想請教一下
: 或是有比較好的資料 可提供 我自己研究也可以 謝謝
雙向 IO 一定要在通訊的portocol做一些BUS 使用權的規定才能使用
比方說 low pin count 匯流排 他在他的bus cycle上有明確規定何時是
Host 發資料 何時是 slave發資料 並不會兩端同時寫入資料的情形發生
另外考慮到延遲問題 當兩邊換手時也許有一端的OE開關較快 導致另一端
還沒關掉時會有兩邊都導通衝突的情形發生 為了避免這個問題 有些雙向
匯流排的protocol 會定義換手時間 在某幾個clock cycle 內兩邊oe皆不許打開
讓bus淨空 用這方式等大家都把oe關起來後才換手讓別人使用
所以若不在操作的協議上規定操作方式 雙向匯流排燒掉機率很大 (RESET時間也
很重要 , 之前我再弄PCI 因為RESET信號沒弄好 差點版板子燒了 = =)
另外在保險一點就是在匯流排上加電阻 或是使用 open drain
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.21.138.103
推
11/02 21:58, , 1F
11/02 21:58, 1F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):