首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | 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;

你把“DOUT<=DDD”去掉,直接把DDD替换为DOUT试试看
美梦成真-->噩梦降临!
ELSIF (DLE='1' AND DOE='1') THEN
DDD<="ZZZZ";
ELSIF (DLE='0' AND DOE='1') THEN
DDD<="ZZZZ";
这里两句有点问题呀 你自己好好看看咯
还有就是这ELSIF写完之后后面要接个
else
ddd<="????"; 其中的问号要看你实际电路了呀 着说名当DDD为其他状态时 怎么赋值呀
stone斑竹玩换头像啊??

楼上说得没错
最后要加一个else

╔☆→────────────────←☆╗
┊寻觅在电子中, , , 寻求适合自己的一席┊┊┊┊
┊也许生活本忙碌,  想享受安逸只能是心态了吧┊
╚☆→────────────────←☆╝      &
应该与高阻状态有关
因为如果你将ZZZZ换成数值的话
不用加else也可以,因为dout会保持输出最后一个数值的数,
但dout应该不能保持输出ZZZZ
所以最后要加多一个else,将你所有情况下,都给dout一个数值输出
╔☆→────────────────←☆╗
┊寻觅在电子中, , , 寻求适合自己的一席┊┊┊┊
┊也许生活本忙碌,  想享受安逸只能是心态了吧┊
╚☆→────────────────←☆╝      &
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 状态该怎样保持?再谢!
就如A398356557所说的,在你发的程序里面加
else
ddd<="ZZZZ"; 就可以了,其他不需要改
╔☆→────────────────←☆╗
┊寻觅在电子中, , , 寻求适合自己的一席┊┊┊┊
┊也许生活本忙碌,  想享受安逸只能是心态了吧┊
╚☆→────────────────←☆╝      &
楼上所说仅仅改为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编辑过]

是数据时保持当前输出的数据,是Z状态保持Z状态之前的数据

这样的话,试试在else里面加个条件来实现吧
╔☆→────────────────←☆╗
┊寻觅在电子中, , , 寻求适合自己的一席┊┊┊┊
┊也许生活本忙碌,  想享受安逸只能是心态了吧┊
╚☆→────────────────←☆╝      &
问题是我该在ELSE里加个什么语句来判断当前是数据还是Z状态,请高手指点迷津,我已经试了几天了,谢! 能不能说得具体点,或者用MAXPLUS仿真一下试试,再告诉我该怎么做,能想到的办法我都试了,刚学这个,不大懂。
不是我换头像玩,现在论坛好像出了点问题,每个帖子都以不同的头像发四次,正在解决;你的程序我拿去试一下
美梦成真-->噩梦降临!
我试过了,只要加上else就可以的
美梦成真-->噩梦降临!
你试试
else
当ddd=din时,dout=din
否则dout=ZZZZ
╔☆→────────────────←☆╗
┊寻觅在电子中, , , 寻求适合自己的一席┊┊┊┊
┊也许生活本忙碌,  想享受安逸只能是心态了吧┊
╚☆→────────────────←☆╝      &
返回列表