搜索
bottom↓
回复: 2

如何处理bidir(inout)端口才能让输出数据稳定?

[复制链接]

出0入0汤圆

发表于 2013-5-21 11:40:06 | 显示全部楼层 |阅读模式
最近做flash读写,用到了altera的inout端口,发现了一个奇怪的问题,纠结了好几天
使用inout端口输出数据时,使用SignalTAP观察到inout口的数据有跳变,如下图:


data_to_flash 端口的数据,直接赋给f_io,但是遇到高四位包含0010或者0001数据的,都会自动变成0000,例如:
图中
11H-->01H
22H-->02H
33H,44H就是正确的
55H-->45H
66H-->46H
......
最后总结出,第6 5为是10 或01的时候就会变成00,11的时候正常
0001-->0000
0010-->0000
0101-->0100
0110-->0100
1001-->1000
1101-->1100
1110-->1100

当我将inout口直接修改为output时,数据完全正确,如下图:

reg_a是f_io输出缓冲寄存器,是为了观察数据是否在模块内部就发生了变化(后附代码)

确定问题是inout口引起的后,将管脚类型改回inout,但是只作为输出口用,结果依然正确

在网上查询资料后,在altera官网上他们给出了bidir口的使用例子,如下:
---------------------------------------------------------------------------------------------------------------
idir.vhd (Tri-state bus implementation)        LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
        ENTITY bidir IS
    PORT(
        bidir   : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0);
        oe, clk : IN STD_LOGIC;
        inp     : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
        outp    : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END bidir;
        ARCHITECTURE maxpld OF bidir IS
SIGNAL  a  : STD_LOGIC_VECTOR (7 DOWNTO 0);  -- DFF that stores
                                             -- value from input.
SIGNAL  b  : STD_LOGIC_VECTOR (7 DOWNTO 0);  -- DFF that stores
BEGIN                                        -- feedback value.
    PROCESS(clk)
    BEGIN
    IF clk = '1' AND clk'EVENT THEN  -- Creates the flipflops
        a <= inp;                    
        outp <= b;                  
        END IF;
    END PROCESS;   
    PROCESS (oe, bidir)          -- Behavioral representation
        BEGIN                    -- of tri-states.
        IF( oe = '0') THEN
            bidir <= "ZZZZZZZZ";
            b <= bidir;
        ELSE
            bidir <= a;
            b <= bidir;
        END IF;
    END PROCESS;
END maxpld;
---------------------------------------------------------------------------------------------------------------

我根据例子自己编写了对应的代码,应该说就是复制粘贴,如下:


但是在实际的观察中,数据的错误依旧存在,如下:


观察综合后的电路如下:



自己总结:
1.是否是io口数据变化太快,我的数据变化是10MHz——但是单纯output口输出是同样的速度,也没有错误
2.是否综合出的电路有错?
3.是否flash损坏?——但是数据可以正常读写,只是读出的错误数据都是发生跳变的数据

这个问题已经好几天没有解决了,希望大家可以给点建议,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-5-22 08:37:08 | 显示全部楼层
没人关注啊

出0入0汤圆

发表于 2013-5-23 09:15:33 | 显示全部楼层
inout端口把我也折磨死了。
我看你两个进程中的敏感信号不一样哦!你试着同步一下!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表