我在这段代码中有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;
为什么我不能用保护信号定义一个块?
答案 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;
信号Q
和Qb
在过程完成后获得新值。因此,分配在时钟上升沿之前使用D
的值。
请注意,我省略了after xy
延迟。实际时序由内置于FPGA中的触发器定义。因此,合成工具忽略了指定的延迟。它仅用于RTL仿真。
编辑:第二个架构guard2
没有描述触发器,因为块的保护条件仅控制guarded
信号分配。因此代码等同于:
Q <= D; -- after tpl
Qb <= not D; -- after tph