Перейти к содержанию
    

VHDL. Что же такое процесы?

Пытаюсь въехать в VHDL. Пока только бездумно использую стандартные конструкции типа кейсов, процессов, генерейтов и т. д. Поначалу, чисто интуитивно, сложилось такое впечатление, что процессы это своего рода защёлки. Т. е., то, что происходит внутри, остаётся в этом состоянии до следующего изменения сигналов из списка чувствительности. Но тогда как взять в толк такое обстоятельство, что кейсы могут быть только внутри процессов?! Если речь идёт об автомате, тут оно понятно - автомат должен сохранять своё состояние до прихода следующего клока. Ну, а если я, к примеру, строю мультиплексор, или дешифратов с использованием кейса, то это же, всё равно - чистой воды комбинаторика. Почему тут обязательно нужен процесс? И что это за сущность такая, "process"?

Изменено пользователем Штабскапитан Овечкин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытаюсь въехать в VHDL. Пока только бездумно использую стандартные конструкции типа кейсов, процессов, генерейтов и т. д. Поначалу, чисто интуитивно, сложилось такое впечатление, что процессы это своего рода защёлки. Т. е., то, что происходит внутри, остаётся в этом состоянии до следующего изменения сигналов из списка чувствительности. Но тогда как взять в толк такое обстоятельство, что кейсы могут быть только внутри процессов?! Если я, к примеру, строю мультиплексор, или дешифратов с использованием кейса, то это же, всё равно - чистой воды комбинаторика. Почему тут обязательно нужен процесс? И что это за сущность такая, "process"?

 

http://electronix.ru/forum/index.php?showt...p;#entry1174145

 

Тут книжек возьмите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если совсем по простому - process нужен для описания поведения какого нибудь кусочка схемы. В итоге получается кубик с известными входными/выходными сигналами, который можно легко использовать например в более крупных блоках. А внутри процесса описывать можно по разному, можно не использовать тактовые сигналы-получится голая комбинаторика, можно использовать тактовые сигналы - в итоге синтезируется набор логических элементов и триггеров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. Это пока то, что я и сам успел уловить. А вот как на счёт кейса? Пчему он не может существовать вне процесса? Комбинаторика же!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..Почему он не может существовать вне процесса? Комбинаторика же!

Потому что так написано в IEEE Std 1076, раздел 8. Стандарт языка однако.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тэ-э-к-с....

 

"Вы в каком полку служили?" © :) То есть, какую литературу для начала почитали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому что так написано в IEEE Std 1076, раздел 8. Стандарт языка однако.
Дык это-то и так понятно. Написано-то почему? Не от фонаря же придумано, наверное? В чём философский смысел? Хочется не просто знать, что "это так, потому что где-то записано". Если это не из пальца высосано, то причинно-следственная связь должна быть обратной - "так записано, потому что это так ПО СМЫСЛУ". Вот этот смысел-то и хочется уловить, почувствовать организмом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой глубинный смысл вы ищете здесь? Так условились описывать 2 различных синтаксических конструкции с близкой алгоритмикой, но разными областями применимости и конечным смыслом/поведением - CASE для внутренностей процессов в их sequential выражениями, и SELECT WITH (так, кажется) - для concurrent выражений вовне процессов. И то, и то может описывать абсолютно одинаковую сущность (мультиплексор, например). Но в разных случаях предпочтительнее оказывается что-то одно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. Это пока то, что я и сам успел уловить. А вот как на счёт кейса? Пчему он не может существовать вне процесса? Комбинаторика же!

 

В VHDL есть много всего необъяснимого. Т.е. объяснимого, но только при помощи отправки автора вопросов к стандарту на язык.

 

Асинхронный мультиплексор можно сделать и без процесса:

 

Z <= A when (M="00") else

B when (M="01") else

C when (M="10") else

D when (M="11") else

A;

 

В то же время синхронный счетчик тоже можно сделать без процесса:

 

cnt = cnt + '1' when rising_edge(clk);

 

Такие вот дела.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В VHDL есть много всего необъяснимого. Т.е. объяснимого, но только при помощи отправки автора вопросов к стандарту на язык.

 

Асинхронный мультиплексор можно сделать и без процесса:

 

 

 

В то же время синхронный счетчик тоже можно сделать без процесса:

 

 

 

Такие вот дела.

 

 

Кстати, по поводу rising_edge маленькая выдержка - почему лучше использовать именно (rising_edge/falling_edge)

 

...But there is a little advantage using the rising_edge and falling_edge functions.

 

It is not necessary for the clock that it should to '1' from '0'. It might can also go to '1' from 'X' or 'Z'. In that case the clock is not stabled.

Stable clock should swing between '0' and '1'. Just imagine a scenario, you have bug on clock line so the clock looks like this 1,x,1,x,1,x.

"clk'event and clk=1" implementaion would consider this as a clock. But rising_edge function will not...

 

Дык это-то и так понятно. Написано-то почему? Не от фонаря же придумано, наверное? В чём философский смысел? Хочется не просто знать, что "это так, потому что где-то записано". Если это не из пальца высосано, то причинно-следственная связь должна быть обратной - "так записано, потому что это так ПО СМЫСЛУ". Вот этот смысел-то и хочется уловить, почувствовать организмом.

 

Возможно корни лежат в языке ADA (прости Господи :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В вот на счёт "rising_edge/falling_edge" это, хоть и не в тему, но, пожалуй очень кстати. Эти rising_edge и falling_edge, стало быть, имеют в виду чистые фронты 0/1 и 1/0, тогда как "clk'event" это переход между 2мя любыми состояниями, возможными для std_logic? Если это, действительно, так, то я просто в отчаянии!!! Это значит, что VHDL это просто минное поле. Делая любой шаг, будь готов к тому, что тебя сейчас разнесёт в клочья. И ты так никогда и не узнаешь, на что напоролся. Ведь до чего же всё неочевидно и интуитивно непонятно!!! Я бы назвал такую идеологию вражественным интерфейсом (в отличии от дружественного, когда разработчик стремится к максимальной прозрачности и наглядности).

Изменено пользователем Штабскапитан Овечкин

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В вот на счёт "rising_edge/falling_edge" это, хоть и не в тему, но, пожалуй очень кстати. Эти rising_edge и falling_edge, стало быть, имеют в виду чистые фронты 0/1 и 1/0, тогда как "clk'event" это переход между 2мя любыми состояниями, возможными для std_logic? Если это, действительно, так, то я просто в отчаянии!!! Это значит, что VHDL это просто минное поле. Делая любой шаг, будь готов к тому, что тебя сейчас разнесёт в клочья. И ты так никогда и не узнаешь, на что напоролся. Ведь до чего же всё неочевидно и интуитивно непонятно!!! Я бы назвал такую идеологию вражественным интерфейсом (в отличии от дружественного, когда разработчик стремится к максимальной прозрачности и наглядности).

 

Все там нормально...

Just imagine a scenario, you have bug on clock line so the clock looks like this 1,x,1,x,1,x.

 

Это просто выдержка. Надо очень постараться, чтобы это сделать не специально :)

 

Встречал мнение, что rising_edge/falling_edge в свою очередь может тормозить симуляцию (т.к. является функцией),

но реально с таким не сталкивался. Наверное на современных PC неактуально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"clk'event" это переход между 2мя любыми состояниями, возможными для std_logic? Если это, действительно, так,
Это так.

то я просто в отчаянии!!! Это значит, что VHDL это просто минное поле. Делая любой шаг, будь готов к тому, что тебя сейчас разнесёт в клочья. И ты так никогда и не узнаешь, на что напоролся. Ведь до чего же всё неочевидно и интуитивно непонятно!!!
Это всё неправда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если это, действительно, так, то я просто в отчаянии!!! Это значит, что VHDL это просто минное поле. Делая любой шаг, будь готов к тому, что тебя сейчас разнесёт в клочья. И ты так никогда и не узнаешь, на что напоролся. Ведь до чего же всё неочевидно и интуитивно непонятно!!! Я бы назвал такую идеологию вражественным интерфейсом (в отличии от дружественного, когда разработчик стремится к максимальной прозрачности и наглядности).

VHDL действительно не всегда интуитивно понятен, в отличие от Verilog/SystemVerilog.

Не буду распространятся на тему VHDL vs Verilog/SystemVerilog, приведу пример

always_ff @ (posedge clk) a <= b;

posedge clk в явном виде говорит, что переключение происходит оп переднему фронту clk.

always_ff (аналог process в VHDL) горит, что это синхронный элемент.

Always также может быть always_comb и always_latch.

 

А по поводу, что многое неочевидно и интуитивно непонятно, то все приходит с опытом.

Если хватит терпения провести достаточно времени с симулятором и синтезатором, то все всанет на свои места.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

VHDL действительно не всегда интуитивно понятен, в отличие от Verilog/SystemVerilog.

Не буду распространятся на тему VHDL vs Verilog/SystemVerilog, приведу пример

always_ff @ (posedge clk) a <= b;

 

Если поменять местами VHDL и Verilog то полностью соглашусть с автором. Я в ужасе от конструкций Verilog; Приведённый пример на VHDL выглядит так:

 

 

a <= b  when rising_edge( clk );

 

Всё понятно и без комментариев.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...