触发器在其时钟非​​边沿条件之前不保持值

时间:2017-05-22 20:06:47

标签: vhdl

我试图创建一个具有复位启用和同步数据加载的触发器。它在VHDL仿真中工作正常,但是当我尝试在ISE中合成它时,它给出了以下错误:

  

第24行:语句不可合成,因为它在NOT(时钟边缘)条件下不保持其值

以下是代码:

library ieee;  
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity D_FF is
port (D: in std_logic;
      clk: in std_logic;
      reset_enable: in std_logic;
      reset: in std_logic;
      Q: out std_logic:='0'
); 
end D_FF;    

architecture a1 of D_FF is
begin
  proc: process (D,clk,reset,reset_enable)
  begin
    if (reset_enable='1') then 
      if (reset='1') then
        q<='0';
      end if;
    end if;
    if (clk'event and clk='1') then -- Line 24
      q<=d; 
    end if; 
  end process proc;
end a1;

如何修复此错误以使代码可合成并且与我编写的代码等效?

1 个答案:

答案 0 :(得分:1)

指向正确的方向:当同时复位和clk边缘时会发生什么?

解决方案:

if (reset = '1' and reset_enable = '1') then
    q <= '0';
elsif (clk'event and clk = '1') then
    q <= d;
end if;