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

问题描述 投票:0回答:1

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

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

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

我正在使用Artix 7 Basys -3 Board,它有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;
vhdl fpga xilinx hdl
1个回答
2
投票

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

    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 stackoverflow response找到关于colck gating的解释。

© www.soinside.com 2019 - 2024. All rights reserved.