块语句中是否不支持受保护的信号?

时间:2015-11-26 22:29:32

标签: vhdl

我在这段代码中有4个错误:

architecture guard of FlipFlop is
begin
    bb: block(clk='1' and not clk'stable) is   -- errorHDLParsers:1074 Guarded signal unsupported in block statement.
    begin
        Q <= guarded D after tpl;     -- errorHDLParsers:1024 Guarded unsupported in signal assignment.
        Qb <= guarded not D after tph;  -- errorHDLParsers:1024 Guarded unsupported in signal assignment.
    end block bb;
end guard;

architecture guard2 of FlipFlop is
begin
    bb: block(clk='1' and not clk'stable) is  -- errorHDLParsers:1074 Guarded signal unsupported in block statement.
    begin
        Q <= D after tpl;
        Qb <= not D after tph;
    end block bb;
end guard2;

为什么我不能用保护信号定义一个块?

1 个答案:

答案 0 :(得分:3)

您的综合工具似乎不支持此VHDL语句。我已经使用Quartus-II 13.1 Web Edition for Windows的集成合成器检查了第一个架构guard,它可以在这里工作。合成工具仅提供VHDL语言的子集并不罕见。

我更喜欢使用时钟流程:

process(clk)
begin
  if rising_edge(clk) then
    Q <= D;
    Qb <= not D;
  end if;
end process;

信号QQb在过程完成后获得新值。因此,分配在时钟上升沿之前使用D的值。

请注意,我省略了after xy延迟。实际时序由内置于FPGA中的触发器定义。因此,合成工具忽略了指定的延迟。它仅用于RTL仿真。

编辑:第二个架构guard2没有描述触发器,因为块的保护条件仅控制guarded信号分配。因此代码等同于:

Q <= D;      -- after tpl
Qb <= not D; -- after tph