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 门控的解释。
这里我上传了模拟结果。在突出显示的部分,它应该将 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 门控的解释。