作者horsehead ( NNNN)
看板Electronics
标题Re: [问题] verilog 语法 inout
时间Mon Nov 2 09:57:39 2009
※ 引述《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
1F:推 ccjin:谢谢 11/02 21:58