打印

跪求VHDL输出高阻态问题!在线等待

[复制链接]
3975|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiubing65|  楼主 | 2008-8-19 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
--2008-08-18:AM
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY EXP02 IS

    PORT
    (
        CLK                : IN    STD_LOGIC;
        RESET           : IN    STD_LOGIC;
        DERECTION        : IN    STD_LOGIC;
        CS1                : IN    STD_LOGIC;
        CS2                : IN    STD_LOGIC;
        WR                : IN    STD_LOGIC;
        DAT8            : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)
        
    );
END EXP02;
ARCHITECTURE A OF EXP02 IS
    SIGNAL CONT14: STD_LOGIC_VECTOR(13 DOWNTO 0);
    
    
BEGIN
CONT:Process (CLK,RESET,DERECTION)         --可逆计数器
     begin
        if RESET='0' then
            CONT14<=(others=>'0');
        elsif clk'event and clk='1' then
            if DERECTION='1' then
               CONT14<=CONT14+1;
            elsif DERECTION='0' then
               CONT14<=CONT14-1;
            end if;
        end if;
    end Process CONT ;
    
LD:Process (CS1,CS2,WR)         --可逆计数器
     begin
     if WR'event and WR='0' then
            if CS1='0' and CS2='1' then
           DAT8<=CONT14(7 DOWNTO 0);
       elsif CS1='1' and CS2='0' then 
           DAT8(5 DOWNTO 0)<=CONT14(13 DOWNTO 8);
       --else               
           --DAT8<="ZZZZZZZZ";
           end if;
     end if;
    end Process LD ;
END A

要是取消下面两行就通不过编译,郁闷啊!
       --else               
           --DAT8<="ZZZZZZZZ";
谁能帮帮我啊,在线等待~~~~~~~~~

相关帖子

沙发
putiandiao| | 2008-8-20 22:02 | 只看该作者

看不懂!!水平不行!!

但是程序里的——是注释不会编译的!

使用特权

评论回复
板凳
xusnwise| | 2008-8-21 16:26 | 只看该作者

111

使用特权

评论回复
地板
xusnwise| | 2008-8-21 16:27 | 只看该作者

LZ如果不想要这两句话

LZ如果不想要这两句话, 可以把DAT8声明为OUTPUT,
 如:
     module  expo2 (cs0, cs1, wr,clk, reset, dat8);

     output  [7:0] dat8;

     reg    [7:0]  dat8;

使用特权

评论回复
5
dragon_hn| | 2008-8-21 23:12 | 只看该作者

我的经验

对INOUT最好定义一个明确的方向控制信号.例如定义一个SIGNAL DOE.另外定义一个DAT8的输出状态变量,例如DAT8_OUT.

在所有处理中,DAT8用于输入,DAT8_OUT用于输出.

然后在PROCESS外面
      DAT8<=DAT8_OUT WHEN DOE='1' ELSE "ZZZZZZZZ";

这样做的好处一是程序条例清楚,二是很多编译器不是很完善,老是出现各种各样的警告,这样的话就没那些烦人的警告了.

使用特权

评论回复
6
haoren| | 2008-8-22 23:23 | 只看该作者

在ISE 10.1中没有问题

我试过了,在ISE10.1的版本中通过,不知道你用什么编译器!
当然你的代码的确是有点不敢恭维了,如果你做inout用强烈建议只对其进行一个赋值描述,同时在
 if CS1='0' and CS2='1' then
           DAT8<=CONT14(7 DOWNTO 0);
       elsif CS1='1' and CS2='0' then 
           DAT8(5 DOWNTO 0)<=CONT14(13 DOWNTO 8);
       --else               
           --DAT8<="ZZZZZZZZ";
           end if;
中需要对DAT8(6)进行操作,这样的话综合器才能最好的理解你的意思。

使用特权

评论回复
7
dynameo| | 2008-8-23 17:20 | 只看该作者

靠别人不如靠自己

    引用一句话:不要动不动就在网络上跪求跪求? 人要有尊严,在网络面前也不能把尊严丢了。

    baidu,google都是很好的搜索工具,好好利用,不要一过来就求,谁吃饱了专门给你写个程序,帮你看个程序的。大家都很忙!

使用特权

评论回复
8
jiligo| | 2008-8-31 11:06 | 只看该作者

看看

说说自己的看法哈
在你的程序设计中,作为INOUT类型的引脚,在输入的时候是可以不加限制的,作为输出的时候,在默认或者是无输出的情况下,要做高阻输出,这样才不会影响你的总线状态

也就是你的else dat8<=zzzzz是必不可少的
或者看你的代码直接定义为输出类型就好的了

使用特权

评论回复
9
xiubing65|  楼主 | 2020-11-24 19:23 | 只看该作者
haoren 发表于 2008-8-22 23:23
我试过了,在ISE10.1的版本中通过,不知道你用什么编译器!当然你的代码的确是有点不敢恭维了,如果你做ino ...

好久没来了,太久没弄VHDL了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

71

帖子

1

粉丝