首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:CPLD里Z状态如何实现74373

求助:CPLD里Z状态如何实现74373

各位大侠,兄弟我想编一个74373三态门逻辑锁存器的VHDL程序,可是Z状态总是通不过,MAXPLUS出现8条提示说是“TRI OR OPNDRN buffer':169' already OUTPUT pin,ti cannot also drive other types of primitives”请问这是为什么,难度只能用原理图方式输入?


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_UNSIGNED.all;


ENTITY M_74373 is
 ORT(DIN  :IN  STD_LOGIC_VECTOR(3 DOWNTO 0) ;
         DLE  :IN  STD_LOGIC ;
   DOE  :IN  STD_LOGIC ;
         DOUT  :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)         );
END M_74373 ;
ARCHITECTURE B OF M_74373 IS
SIGNAL DDD: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
 ROCESS (DLE,DOE)
--VARIABLE TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); 
BEGIN
  IF (DLE='1' AND DOE='0') THEN
DDD<=DIN;
  ELSIF (DLE='1' AND DOE='1') THEN
DDD<="ZZZZ";
  ELSIF (DLE='0' AND DOE='1') THEN
DDD<="ZZZZ";
  END IF;
END PROCESS ;
DOUT<=DDD;
END B;

1、把DDD改为DOUT,看起来没作用
2、ELSE 后是希望当(DLE='0' AND DOE='0')时保持当前输出(即使是 Z 状态时也要保持),不知该怎么写,另外我把OUT端口改为INOUT属性,就没有“TRI OR OPNDRN buffer':169' already OUTPUT pin,ti cannot also drive other types of primitives”提示了,但是不知道这样有没有问题,这样改后Z状态仍然没有保持,变成X状态了?
3、Z 状态该怎样保持?再谢!
楼上所说仅仅改为else
ddd<="ZZZZ"; 是不对的,因为在(DLE='0' AND DOE='0')时锁存输出(是数据时保持当前输出的数据,是Z状态保持Z状态之前的数据),具体请参考74373真值表,如果照楼上说的改就都成了Z状态。另外我把程序改成下面了,ELSE之后希望程序能判断当前输出是否是数据,如果是数据就保持,但是程序没有正确判断。请指点,另外如果您有MAXPLUS的话请在机子上仿真一下,看是否符合74373的逻辑图,急切等待中。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_UNSIGNED.all;
ENTITY M_74373 is
PORT(DIN :IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
DLE :IN STD_LOGIC ;
DOE :IN STD_LOGIC ;
DOUT :INOUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END M_74373 ;
ARCHITECTURE A OF M_74373 IS
SIGNAL S1,S2,S3: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS (DLE,DOE,DIN)
VARIABLE T1,T2: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
S3<=DIN;
IF(DLE='1' AND DOE='0') THEN
S1<=DIN;
ELSIF (DLE='1' AND DOE='1') THEN
S1<="ZZZZZZZZ";
ELSIF (DLE='0' AND DOE='1') THEN
S1<="ZZZZZZZZ";
ELSE
IF (S2>="00000000" AND S2<="11111111") THEN
S1<=S2;
ELSE
S1<="ZZZZZZZZ";
END IF;
END IF;
END PROCESS ;
S2<=S1;
DOUT<=S1;
END A;

[此贴子已经被作者于2006-6-13 10:44:01编辑过]

问题是我该在ELSE里加个什么语句来判断当前是数据还是Z状态,请高手指点迷津,我已经试了几天了,谢! 能不能说得具体点,或者用MAXPLUS仿真一下试试,再告诉我该怎么做,能想到的办法我都试了,刚学这个,不大懂。
返回列表