Итак, в основном я пытаюсь активировать и деактивировать часы по истечении определенного времени. Вот небольшой пример того, что я ищу: `
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). Я хочу что-то вроде этого:
флип-флоп
Спасибо за вашу помощь, надеясь, что я найду решение.