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.900毫秒