Electronics 版 (精华区)
发信人: zjliu (秋天的萝卜), 信区: Electronics
标 题: VHDL中双向口驱动问题的探讨 zz
发信站: 哈工大紫丁香 (Wed Apr 14 20:45:26 2004), 站内信件
发信站: BBS 蓝色星空站
先简要说明下,我的文档还没有整理好。
在使用MAX PLUS II仿真双向口的时候,发现其仿真的结果与要求有很大的差别,产生了
由总线竞
争引起的数字信号的畸变。
当两个驱动器设备试图同时使用同一总线时,就产生了总线竞争现象,它会导致信号畸变
。正常情况下,当一个驱动器传送数据时,另一个驱动器应进入高阻抗状态。但如果高阻
抗的设备不能及时切换,就会出现两个驱动器竞争用总线的情况。由于两个驱动器信号都
不能通过,故迫使总线形成不确定的振幅,这样就可能达不到逻辑电路的阈值电压。表现
在VHDL描述上,由于IF语句判断的不完整,导致在某些情况下三态门不能正确地导通或截
至。
下面是一个简单的典型双向缓冲器,有两个数据端,A和B,一个方向控制端DIR和一个选通
端EN。EN=0时双向缓冲器选通,若DIR=0,则A<=B;反之,B<= A。
IF en = '0' THEN
IF dir = '0' THEN
a <= b;
b <= 'Z';
ELSE
b <= a;
a <='Z';
END IF;
ELSE
a <= 'Z';
b <= 'Z';
END IF;
这样来写,逻辑是正确的。如果是:
IF en = '0' THEN
IF dir = '0' THEN
a <= b;
ELSE
b <= a;
END IF;
ELSE
a <= 'Z';
b <= 'Z';
END IF;
当B的输入值改变时,A和B的输出值都处于不定状态。当en=0,dir=0,A<=B时,驱动b端口
的三态门仍处于选通状态,未能及时截至;同理,当en=0,dir=1,B<=A时,驱动a端口的
三态门同样未能及时截至。
如果是:
oe <= (NOT en) AND dir;
PROCESS(oe,b)
BEGIN
IF oe = '0' THEN
a <= b;
ELSE
a <= 'Z';
END IF;
END PROCESS;
PROCESS(oe,a)
BEGIN
IF oe = '1' THEN
b <= a;
ELSE
b <= 'Z';
END IF;
END PROCESS;
当en=0,即缓冲器使能时,逻辑电路的数据传输时正确的;但是,当en=1,即缓冲器被
禁止时,端口b的数据仍然发送到端口a,此时,如果端口a也有数据输入,又会出现总线冲
突的现象,a端口出现不定状态。
--
╔═══════════════════╗
║★★★★★友谊第一 比赛第二★★★★★║
╚═══════════════════╝
※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 202.118.229.162]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.190毫秒