[an error occurred while processing this directive]
Обычный суммирующий счетчик пишется так:
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено andrew_b 09 сентября 2003 г. 12:32
В ответ на: делаю так -> отправлено Bug 09 сентября 2003 г. 12:01

...
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: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru