VHDL:无法将系统时钟 (Sys_Clk) 分配给信号

VHDL: Unable to assign System clock (Sys_Clk) to Signal

这里我上传了模拟结果。在突出显示的部分,它应该将 sys_clk 分配给两个信号

我已经编写了 vhdl 代码以在定义的 sclk_1 和 sclk_2 信号延迟一段时间后分配系统时钟 (Sys_clk)。

当代码运行执行时,在计数器计数25次后的模拟中,这两个信号的状态只是显示为高(逻辑电平高)而不是系统时钟(Sys_Clk)。

我使用的是 Artix 7 Basys -3 板,它有 100MHZ 系统时钟。

任何人都可以帮助我如何在定义的信号上分配系统时钟 (Sys_Clk) ??

architecture Behavioral of Power_Sequence is
signal counter : integer := 0;
signal sclk_1 : std_logic := '0';
signal sclk_2 : std_logic := '0';

begin

process(Sys_Clk)

begin

    if(Sys_Clk 'event and Sys_Clk = '1') then
        if(resetb = '0')then
            sclk_1 <= '0';
            sclk_2 <= '0';
        else
            counter <= counter + 1;
            if (counter > 24 and counter < 50) then
            sclk_1 <= Sys_Clk;
            sclk_2 <= Sys_Clk;
            end if;
        end if;
     end if;    
end process;
end Behavioral;

您的代码无法运行。 行之间的代码:

    if(Sys_Clk 'event and Sys_Clk = '1') then
...
    end if;

会在Sys_clk上升时执行。此时 Sys_Clk 的值为 '1' !然后,如果您在信号 sclk_tp 和 sclk_bt 上复制它,它将始终复制“1”。

要使其正常工作,您必须在异步过程中分配 sclk_tp 和 sclk_bt 信号,如下所示:

sclk_tp <= Sys_Clk when (counter > 24 and counter < 50) else '0';

并且只用同步进程来计数。

[编辑]

正如 paebbels 所解释的那样,上面的行不是制作时钟门控的好解决方案。您可以在 this Whosebug response 上找到有关 colck 门控的解释。