我试图创建一个具有复位启用和同步数据加载的触发器。它在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;
如何修复此错误以使代码可合成并且与我编写的代码等效?
答案 0 :(得分:1)
指向正确的方向:当同时复位和clk边缘时会发生什么?
解决方案:
if (reset = '1' and reset_enable = '1') then
q <= '0';
elsif (clk'event and clk = '1') then
q <= d;
end if;