реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> VHDL event, лист чувствительности
Claw
сообщение Oct 16 2011, 15:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 13-11-10
Из: Могилёв
Пользователь №: 60 868



.....
process (mod)

begin

if mod'event mod ='1' then
.....

Не совсем понятно выделенное жирным шрифтом, это значит: если событие произошло? т.е. mod стал раным 1? Не встречала раньше такого нигде. И ещё вопрос, что такое лист чувствительности?

к примеру bool: process(clk_in, clk_out)
....

значит, что процесс будет изменяться по изменению этих двух сигналов? для чего это нужно?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Oct 17 2011, 04:45
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Claw @ Oct 16 2011, 19:51) *
.....
process (mod)

begin

if mod'event mod ='1' then

Не совсем понятно выделенное жирным шрифтом, это значит: если событие произошло? т.е. mod стал раным 1?
атрибут 'event возвращает значение типа boolean, которое говорит о том, изменился ли сигнал или нет. Не важно, как изменился, важен сам факт изменения.

В процитированном коде скорее всего ошибка. Должно быть так:
Код
   if mod'event and mod ='1' then

Это детектор восходящего фронта. Да, во многих книгах пишут так, но лучше использовать стандартную функцию rising_edge. Соответственно, falling_edge для фронта спадающего (среза).

Цитата
Не встречала раньше такого нигде. И ещё вопрос, что такое лист чувствительности?
Много раз на форуме объяснялось. Не ленитесь пользоваться поиском.

Цитата
к примеру bool: process(clk_in, clk_out)
....

значит, что процесс будет изменяться по изменению этих двух сигналов? для чего это нужно?
Это нужно, например, для описания триггера с асинхронным сбросом:
Код
   process (Reset, Clk)
   begin
       if (Reset = '1') then
           q <= '0'; -- асинхронный сброс
       elsif (rising_edge (Clk)) then
           q <= d; -- по восходящему фронту Clk сигнал с входа передаётся на выход
       end if;
   end process;
Go to the top of the page
 
+Quote Post
Claw
сообщение Oct 17 2011, 17:46
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 13-11-10
Из: Могилёв
Пользователь №: 60 868



Спасибо! if mod'event mod ='1' then, ошибка, точно)

Сообщение отредактировал Claw - Oct 17 2011, 17:48
Go to the top of the page
 
+Quote Post
whiteTigr
сообщение Oct 19 2011, 07:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 25-07-11
Пользователь №: 66 407



Цитата(Claw @ Oct 16 2011, 19:51) *
Не совсем понятно выделенное жирным шрифтом, это значит: если событие произошло? т.е. mod стал раным 1? Не встречала раньше такого нигде. И ещё вопрос, что такое лист чувствительности?

к примеру bool: process(clk_in, clk_out)
....

значит, что процесс будет изменяться по изменению этих двух сигналов? для чего это нужно?

Лист чувствительности нужен исключительно для моделирования. Он говорит модели (testbench) в какие процессы нужно заглядывать по изменению сигналов и моделировать код оттуда.

Для синтеза и зашива проекта в плату можно писать
Код
process
begin
-- ...
end process;



P.S.:
Код
   if mod'event and mod ='1' then

А мне больше нравится немного другой вариант, который преобразуется в тоже самое
Код
if rising_edge(mod) then

Go to the top of the page
 
+Quote Post
Claw
сообщение Oct 19 2011, 20:55
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 13-11-10
Из: Могилёв
Пользователь №: 60 868



Спасибо и Вам! a14.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016