Board logo

标题: [求助]新手求助,如何用CPLD设计双向开关 [打印本页]

作者: bemoon    时间: 2006-3-2 04:56     标题: [求助]新手求助,如何用CPLD设计双向开关

本人新手入门,初学VerilogHDL,芯片用Xilinx XC9536XL。开发环境用ISE7.1i + Synplify pro 8.1+ ModelSim SE6.1。


想用CPLD的3个IO做一个双向开关,使能时导通,反之断开,功能类似于CD4066。本来Verilog有原语 tranif0或者tranif1,可以直接实现,问题是大多数综合器都不支持这个原语。为了实现目的,我自己尝试了用三态门组合等等几种方法,效果很不理想。从原理上和CPLD的结构上看,都应该很容易实现这个功能,但是至今仍是一头雾水,恳请各位大侠不吝赐教,如何用简单的方法实现这样的双向开关呢?


非常感谢!!


作者: 恶魔之吻    时间: 2006-3-2 22:02

我还不懂哦
作者: fenglouto    时间: 2006-3-3 11:19

你描述的功能是三态门吧?
使能时直接赋值,否则高阻,这样可以吗?
作者: bemoon    时间: 2006-3-3 11:59

谢谢版主关注!
可能是我描述的不够清楚,我想做的是个双向开关。
使能端有效时,双向导通,两边都既能输入又能输出,互为驱动。使能无效时,相当于断开,两端都输出高阻。
Verilog有原语tranif0或者tranif1描述这种东西,但是手上的XST Synplify 和来昂那多都无法支持综合这个原语,查阅ISE附带的原语列表,也没有发现XC9500XL系列支持类似的开关。有2款简单的芯片能实现这个功能:CD4016和CD4066。但是因为用在手持设备,体积有限,尽量不想增加芯片。恳请大家帮忙!
作者: fenglouto    时间: 2006-3-6 15:20

CD4066应该是模拟开关吧?你用三态门试试,使能时是inout型,看可以不?
作者: bemoon    时间: 2006-3-6 18:54

多谢版主,我刚才用三态门试了一下,一个三态门的数据流向是单向的,声明成inout型也只能单向导通,所以至少要用2个三态门,但是这样就必须关心某时刻的数据流向来控制2个三态门的通断,不太容易实现。恳请大家帮忙看看还有没有什么好办法!!
作者: fenglouto    时间: 2006-3-6 19:43

process(en_1,en_2,a,b)
begin
if en_1='1' then
a<=b;
elsif en_2='1' then
b<=a;
else a<='Z';
b<='Z';
end if;
end process;

这样能满足你的要求吗?
作者: bemoon    时间: 2006-3-6 20:10

先谢谢版主一直热心关注!
这样的确可以满足双向传输,但是必须判断某个时刻数据的传输方向才能确定en_1 en_2的值,而我的电路里面数据流长度不固定,实时的判断方向实现起来十分复杂。
我曾经按照这样的思路写了一个不需要人为关心传输方向,可以自动切换en_1 en_2值的传输门。原理是把a,b端口的值做异或,为0时说明导通方向正常不需要改变2个使能值,为1时说明导通方向错误交换使能端值。但是这样的设计在电路上不工作,原因可能是当线上处于高阻态时扇出为0,无法驱动异或门。
小弟为此困扰多日,如有高见,恳请不吝赐教!!谢谢!!
作者: 陈石亮    时间: 2006-3-11 10:05

en_1 en_2肯定要用外电路控制。
否则这个IC也太智能了吧。
你先研究CD4066如何使用再来考虑如何写这个CPLD。
作者: bemoon    时间: 2006-3-11 16:52

CD4066是双向开关,原理是用mos管组合逻辑,这个原理很简单。如果任何的综合器支持Verilog里面nmos pmos这样的原语,问题也就解决了,但是同tranif0 tranif1一样几乎没有综合器支持这些原语。
作者: wuhao2000    时间: 2006-8-2 15:47

楼主~~~~~
我了碰到和你一样的问题~~~使用的CPLD是XC9572,请问问题解决没有~~~~有好的方案给你一个EMAIL,ymwuhao@126.com,谢谢了~~~~~~
作者: bemoon    时间: 2006-8-6 17:41

不好意思,到现在还没有好办法呢,都要关心传输的方向。
作者: wuhao2000    时间: 2006-8-14 17:51

我验证了多次就是不能实现,双向传输必须要控制方向,我现在在改电路,要使模拟开关才能实现,不过不是谢谢楼主~~~~~~~
作者: wuhao2000    时间: 2006-8-14 17:55

错~~是还是要谢谢楼主~~~~~~太不小心了打错字





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0