FPGA双向电路设计经验

FPGA双向电路设计经验,第1张

 

  在工程应用中,双向电路是设计者不得不面对的问题.在实际应用中,数据总线往往是双向的.如何正确处理数据总线是进行时序逻辑电路设计的基础.在程序设计过程中,关键技术在于:实体部分必须对端口属性进行申明,端口属性必须为Inout类型,在构造体需要对输出信号进行有条件的高阻控制.在双向电路的处理问题上,常用的处理方式有两种,在介绍双向电路的处理方式之前,先看看双向电路的基本格式:

  ENTITY Bidir_pin IS

  (

  Bidir : INOUT Std_logic;

  Oe, Clk, From_core : IN Std_logic;

  To_core : OUT Std_logic;

  ……

  END Bidir_pin;

  ARCHITECTURE Behavior OF Bidir_pin IS

  BEGIN

  Bidir <= From_core WHEN Oe=‘1’ ELSE “ZZZZ”;

  To_core <= Bidir;

  _

  _

  _

  END Behavior;

  该程序揭示了双向电路的处理技巧,首先在实体部分Bidir属于双向信号,在端口定义时,端口属性为Inout类型,即把Bidir信号作为输入三态输出. 语句“Bidir <= From_core WHEN Oe=‘1’ ELSE “ZZZZ”;”表示Bidir信号三态输出,语句”To_core <= Bidir;”把Bidir信号作为输入信号.

  由此可见,双向电路在程序设计中,Didir输入当着普通的In类型,而在输出时,需要加一定的控制条件,三态输出.问题的关键在于:如何确定这个条件?

  1)双向信号作一个信号的输入,作另一信号的输出

  ENTITY Bidir IS

  PORT(

  Bidir : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0);

  Oe, Clk : IN STD_LOGIC;

  From_core : IN STD_LOGIC_VECTOR (7 DOWNTO 0);

  To_core : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)

  );

  END Bidir;

  ARCHITECTURE Logic OF Bidir IS

  SIGNAL A : STD_LOGIC_VECTOR (7 DOWNTO 0);

  SIGNAL B : STD_LOGIC_VECTOR (7 DOWNTO 0);

  BEGIN

  PROCESS (Clk)

  BEGIN

  IF Clk = ''1'' AND Clk''EVENT THEN

  A <= From_core;

  To_core <= B;

  END IF;

  END PROCESS;

  PROCESS (Oe, Bidir)

  BEGIN

  IF( Oe = ''0'') THEN

  Bidir <= "ZZZZZZZZ";

  B <= Bidir;

  ELSE

  Bidir <= A;

  B <= Bidir;

  END IF;

  END PROCESS;

  END Logic;

  这种设计方式叫做寄存双向信号的方法.本设计中Bidir为双向信号,From_core为数据输入端,To_core为数据输出端,Oe为三态输出使能,Clk为读写数据的时钟.在程序设计中,需要定义两个Signal A和B信号.A信号用于输入数据From_core的寄存器,B用于输出数据To_core的寄存器.采用寄存器的方法需要设计两个进程,一个进程把A, B信号在时钟的控制下负责端口的输入信号From_core和端口输出信号To_core的连接,这一步实现了寄存双向的功能.另外一个进程则负责信号 A,B和双向口之间的赋值关系.本设计只揭示了简单的双向信号 *** 作方式,即Bidir既可以作为From_core的输出,又可以作为To_core的输入

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2448864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-03
下一篇 2022-08-03

发表评论

登录后才能评论

评论列表(0条)

保存