[an error occurred while processing this directive]
|
...
signal cnt : std_logic_vector(1 downto 0);
...
process(Reset, Clk)
begin
if (Reset = '1) then
cnt <= (others => '0');
elsif (rising_edge(Clk)) then
cnt <= cnt + '1';
end if;
end process;
Если коэффициет деления --- степень 2, нужно взять нужный разрад cnt (или его инверсию).
Y <= cnt(cnt'left); -- деление в 4 раза
Если коэффициент деления --- не степень 2, то все немного усложняется.
...
signal cont : std_logic_vector(6 downto 0);
...
process(Reset, Clk)
begin
if (Reset = '1) then
cnt <= (others => '0');
Y <= '0';
elsif (rising_edge(Clk)) then
if (cnt = N) then
-- N - некоторое число
cnt <= (others => '0');
else
cnt <= cnt + '1';
end if;
if (cnt = N) then
Y <= '1';
else
Y <= '0';
end if;
end process;
Если нужен более долгий импульс, то нужно более сложное условие вместо "if (cnt = N) then"
То, что написано у вас (X'event) --- означает "любое изменение сигнала X". Для однобитового - это, в том числе, оба фронта. У вас есть триггер, который переключается по обоим фронтам?
E-mail: info@telesys.ru