错误(10822):无法在此时钟边沿上为分配实现寄存器

时间:2014-06-27 03:20:14

标签: vhdl intel-fpga

我无法找到我做错的事情,如果有人可以帮助我,我会很高兴...

entity fsmF is
  port(S, R : in  std_logic;
       Q    : out std_logic);
end;

architecture FSM_beh of fsmF is
begin
  process(S, R)
  begin
    if S = '0' then
      Q <= '0';
    else
      if (R'event and R = '1' and S = '1') then  -- <= ERROR
        Q <= '0';
      else
        Q <= '1';
      end if;
    end if;
  end process;
end FSM_beh;

1 个答案:

答案 0 :(得分:1)

if部分根据QR'event and R = '1')和rising_edge(R)的上升沿指定S = '1'的分配,这是正常的。

问题在于,else部分会在没有Q时分配给else R和S的上升沿是&#39; 1&#39;。 Q部分需要一个可以的电路 更新过程灵敏度列表中的信号事件,然后检查 除了上升沿之外的其他事件,以便在这些事件中分配if (R'event and R = '1') then -- <= ERROR ... end if;

因此请将上升沿检测作为单独的条件和其他条件 下面,如:

{{1}}