在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2649|回复: 6

[求助] 关于Inout 加第三端问题

[复制链接]
发表于 2011-10-22 15:47:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
我现在有个Microprocessor去与寄存器进行inout数据交换,但是同时要将FIFO的数据单向写入Microprocessor里,这样的情况用Verilog怎么写?有一个片选信号,还有一个Microprocessor控制寄存器的读写端。
 楼主| 发表于 2011-10-22 15:48:28 | 显示全部楼层
补充:FIFO和寄存器用的都是一个数据线传输
发表于 2011-10-22 20:56:55 | 显示全部楼层
既然你有片选信号,那不就简单啦
发表于 2011-10-23 13:24:27 | 显示全部楼层
问题描述不清楚。为什么问问题前不先整理下语言呢?
发表于 2011-10-23 17:00:19 | 显示全部楼层
可以看一下论坛里边关于双向口的仿真,这个问题不是现在才有的啦。
发表于 2011-10-24 12:01:03 | 显示全部楼层
楼主,你说的是不是三态逻辑啊?? 一般fpga到mcu寄存器交互都用local bus总线,这上面就有个三态逻辑。
如果是xilinx的fpga,你直接用iobuf就可以了,你可以找下相关资料。如果是altera的片子,那下面这段逻辑你参考下,这个是带了一级锁存器的,(不带锁存器的就你把那个打一拍的process,就是那个creat flipflops的process,不要就可以了):
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;


希望对你有帮助~
发表于 2011-10-24 12:02:24 | 显示全部楼层
补一个verilog的,刚才没看到你要的是verilog的

module bidirec (oe, clk, inp, outp, bidir);

// Port Declaration

input   oe;
input   clk;
input   [7:0] inp;
output  [7:0] outp;
inout   [7:0] bidir;

reg     [7:0] a;
reg     [7:0] b;

assign bidir = oe ? a : 8'bZ ;
assign outp  = b;

// Always Construct

always @ (posedge clk)
begin
    b <= bidir;
    a <= inp;
end

endmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 02:07 , Processed in 0.026083 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表