在这里,我上传了模拟结果。在突出显示的部分,它应该将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;
你的代码无法运行。行之间的代码:
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的解释。