因此,基本上我想做的是在一定时间后激活和停用时钟。这是我正在寻找的一个小例子:`
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.all;
entity example is
generic (
clk1 : in std_logic; --- 100hz
clk2 : in std_logic ; --- 10hz
);
end example;
architecture example_arch of example is
signal clk_count1, clk_count2 : integer range 0 to 1000:= 0;
signal clk_enable1 : std_logic := '1';
signal clk_enable2 : std_logic := '0';
begin
process (clk1)
begin
if rising_edge(clk1) and clk_enable1 = '1' then
if clk_count = 1000 then
clk_enable1 <= '0';
clk_enable2 <= '1';
clk_count1 <= 0;
else
clk_count1 <= clk_count1 + 1;
[...] --- do what you want to do while you are using clk1
end if;
end if;
end process;
process (clk2)
begin
if rising_edge(clk2) and clk_enable2 = '1' then
if clk_count2 = 1000 then
clk_enable1 <= '1';
clk_enable2 <= '0';
clk_count2 <= 0;
else
clk_count2 <= clk_count2 + 1;
[...] --- do what you want to do while you are using clk2
end if;
end if;
end process;
end example_arch;
` 因此,在此示例中,我们有两个时钟,其中clk1的频率大于clk2的频率。当clk_enable1为'1'时,我们正在处理第一个进程,而当clk_enable2为'1'时,我们正在处理第二个进程。
此代码的问题在于,即使我们知道clk_enable的值为'1',它仍然允许两个进程在两个时钟的每个时钟事件发生后自行执行。我正在尝试做的是在使用另一个时钟时停用时钟,这样就不会有与已停用时钟有关的时钟事件,因此我们在执行时钟时永远不会执行此时钟的过程。其他过程。换句话说,当时钟可以为1或0时,另一个处于高阻抗(Z)。我想要这样的东西:
感谢您的帮助,希望我能找到解决方案。