微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于Inout 加第三端问题

关于Inout 加第三端问题

时间:10-02 整理:3721RD 点击:
我现在有个Microprocessor去与寄存器进行inout数据交换,但是同时要将FIFO的数据单向写入Microprocessor里,这样的情况用Verilog怎么写?有一个片选信号,还有一个Microprocessor控制寄存器的读写端。

补充:FIFO和寄存器用的都是一个数据线传输

既然你有片选信号,那不就简单啦

问题描述不清楚。为什么问问题前不先整理下语言呢?

可以看一下论坛里边关于双向口的仿真,这个问题不是现在才有的啦。

小编,你说的是不是三态逻辑啊? 一般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;

希望对你有帮助~

补一个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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top