Modernoff 0 9 апреля, 2017 Опубликовано 9 апреля, 2017 · Жалоба ПРивет! Написал кусок VHDL кода, где в списке чувствительности процесса находятся не только тактовые сигналы, но и другие сигналы, на изменения которых хочу реагировать. Некоторые говорят, что в списке чувствительности надо должен быть только sys_clk сигнал и всё, иначе при реализации могут быть проблемы. И у меня возник вопрос, если код VHDL компилируется (и даже временные диаграммы показывают, что всё окей), то нормально ли он будет работать на реальной ПЛИС? Или это компилирующийся код еще не гарантирует корректность работы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hsoft 0 9 апреля, 2017 Опубликовано 9 апреля, 2017 (изменено) · Жалоба потер... вот топик где тема раскрывается https://electronix.ru/forum/index.php?showtopic=92126 Изменено 10 апреля, 2017 пользователем hsoft Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 9 апреля, 2017 Опубликовано 9 апреля, 2017 · Жалоба Это будет работать, но идеологически неверно. И я еще добавлю. Входные асинхронные сигналы надо обрабатывать по идеологии пересечения клоковых доменов. Если в коде этого нет, то получите зависания или сбои... Сигналы на входах, на которых есть дребезг, тоже надо обрабатывать... И вообще вопрос выглядит так: я написал буквы без ошибок, много букв, но получится ли из этого "война и мир", как у Толстого? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 9 апреля, 2017 Опубликовано 9 апреля, 2017 · Жалоба ПРивет! Написал кусок VHDL кода, где в списке чувствительности процесса находятся не только тактовые сигналы, но и другие сигналы, на изменения которых хочу реагировать. Некоторые говорят, что в списке чувствительности надо должен быть только sys_clk сигнал и всё, иначе при реализации могут быть проблемы. И у меня возник вопрос, если код VHDL компилируется (и даже временные диаграммы показывают, что всё окей), то нормально ли он будет работать на реальной ПЛИС? Или это компилирующийся код еще не гарантирует корректность работы? А приведите пример, где в процессе описается комбинационная логика, но требуется внести в список чувствительности сигналы, не участвующие в этом процессе ? Вообще список чувствительности нужен только для моделирования. По сигналам, указанным в списке чувствительности, запускается процесс на моделирование. На то, что "зашивается" в ПЛИС список чувствительности не влияет никак... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 9 апреля, 2017 Опубликовано 9 апреля, 2017 · Жалоба Вообще список чувствительности нужен только для моделирования. По сигналам, указанным в списке чувствительности, запускается процесс на моделирование. На то, что "зашивается" в ПЛИС список чувствительности не влияет никак... Трижды подумайте Flip-fl0p, прежде чем такое написать в следующий раз!!! ТС - на такие высказывания не обращайте внимания, Flip-fl0p еще не волшебник, только учится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Трижды подумайте Flip-fl0p, прежде чем такое написать в следующий раз!!! ТС - на такие высказывания не обращайте внимания, Flip-fl0p еще не волшебник, только учится... А в чём я не прав ? Во всех книгах по VHDL пишут именно так. Неоднократно на этом-же форуме про это писали. Практика показывает, что это так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба в т.ч. и RESET не заводятся в список чувствительности.Если reset синхронный. Когда Вы добавляете другие сигналы в список чувствительности, это означает что они вламываются в дизайн и хлопают асинхронно части схемы,что вступает в конфликт с CLK и Вы получаете то, с чем жестоко борятся меняя клоковые домены, с метастабильностью. Оно Вам надо? А так то да, работать будет, но очень ненадежно. Что вы несёте... Никогда никому этого больше не говорите. А теперь ответ на вопрос TS: "Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?". Нет, не любой. Во-первых, VHDL язык с широкими возможностями. Он делится на два подмножества: синтезируемое и несинтезируемое. То есть то, что может быть реализовано в железе и что не может. Ко второму относится, например, работа с файлами. Во-вторых, существует аппаратное ограничение. Вы можете описать триггер, который работает по обоим фронтам тактового сигнала, и триггер, работающий по двум и более тактовым сигналам. Но таких триггеров может не быть в вашей целевой платформе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Думаю ТС интересовало не это, такого рода ошибки он отловит еще на попытки запихать что-то в плис. Если оно запихалось то все ок, с этой частью проблем нет. А вот поведение асинхронных сигналов, мета-стабильность, гонки сигналов на самом деле не моделируются, даже при пост синтез и пост рут колдунствах. Более того они в силу асинхронности выпадают из временного анализа, поэтому эта часть остается на совести и опыте разработчика. В симуляторе все будет красиво, а в реальном железе будет работать не стабильно. Отсюда кстати растет и совет только клок использовать в процессе, чтобы просто тупо сделать весь дизайн синхронным, и чтобы как можно больше всего попало под временной анализ, правда беда что асинхронные входы это все равно не победит, так что этот совет мало помогает в реалии:) А в чём я не прав ? Во всех книгах по VHDL пишут именно так. Неоднократно на этом-же форуме про это писали. Практика показывает, что это так. Интересный факт, но флип-флоп реально прав. В VHDL список чувствительности влияет на совпадение синтезируемой и симулируемой схемы, то есть реальная схема в железе всегда будет одной для любого списка, будут отличатся результаты симуляции. Поэтому данный список важен, и важно писать его правильно, но только для того чтобы железо и симуляция совпадали. Во всяком случае для современных синтезаторов. Интересная зависимость.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Отсюда кстати растет и совет только клок использовать в процессе, чтобы просто тупо сделать весь дизайн синхронным,Мне кажется, что такие советы дают те, кто недопонимает, что есть процесс в VHDL. Давайте посмотрим на процесс: process (clk) begin if (rising_edge (clk)) then if (ce = 1') then o <= i1; else o <= i2; end if; end if; end process; (Тут предполагается, что ce, i1 и i2 идут с триггеров, но я их не написал, чтобы не загромождать код). В этом процессе у нас не только синхронный элемент (триггер), но и асинхронный (мультиплексор). И мне хотят сказать, что если я разобью этот процесс на два: process (ce, i1, i2) begin if (ce = 1') then i <= i1; else i <= i2; end if; end process; process (clk) begin if (rising_edge (clk)) then o <= i; end if; end process; то у меня синхронный дизайн вдруг превращается в частично асинхронный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна%:)... у вас в обоих описаниях есть синхронный элемент o который защелкивает входное значение. И его входное значение которое формируется через мультиплексор из i1 и i2 по сигналу ce. И в обоих случаях результирующая схема абсолютно одинаковая. Введение дополнительного сигнала i только изменяет читаемость. Вы точно также можете его добавить в первое описание отдельным процессом. Или вы думаете что при описании в один блок у вас появляется какой-то специальный мультиплексор с клоком? Кстати, поднята интересная тема, а что же такое процесс в VHDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна%:)... у вас в обоих описаниях есть синхронный элемент o который защелкивает входное значение. И его входное значение которое формируется через мультиплексор из i1 и i2 по сигналу ce. И в обоих случаях результирующая схема абсолютно одинаковая. Введение дополнительного сигнала i только изменяет читаемость. Вы точно также можете его добавить в первое описание отдельным процессом. Или вы думаете что при описании в один блок у вас появляется какой-то специальный мультиплексор с клоком? Кстати, поднята интересная тема, а что же такое процесс в VHDL? Более того, можно вообще вот так описать всё: i <= i1 WHEN (ce = '1') ELSE i2; process (clk) begin if (rising_edge (clk)) then o <= i; end if; end process; Я думаю, что процесс надо рассматривать одновременно с понятием дельта-задержки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна% :) ...s/мультиплексора/процесса? Да. Описание в виде процесса логики, расположенной между двумя регистрами, не делает дизайн асинхронным. И в обоих случаях результирующая схема абсолютно одинаковая.Разумеется. Именно это я и пытаюсь донести на всякие инсинуации "только клок использовать в процессе". Или вы думаете что при описании в один блок у вас появляется какой-то специальный мультиплексор с клоком?Разумеется нет. Кстати, поднята интересная тема, а что же такое процесс в VHDL?Это часть схемы, активизируящаяся при любом изменении каких-либо сигналов. Каких сигналов -- определяет список чувствительности. Как реагировать на изменения -- определяет тело процесса. Если вы внесёте в список чувствительности лишние сигналы, то в принципе ничего плохого не случится -- работать будет так, как ожидается, только процесс будет вхолостую запускаться лишние разы. А вот если не допишите -- то поведение будет неожиданным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Это часть схемы, активизируящаяся при любом изменении каких-либо сигналов. Каких сигналов -- определяет список чувствительности. Как реагировать на изменения -- определяет тело процесса. Если вы внесёте в список чувствительности лишние сигналы, то в принципе ничего плохого не случится -- работать будет так, как ожидается, только процесс будет вхолостую запускаться лишние разы. А вот если не допишите -- то поведение будет неожиданным. Вот тут как я вижу есть фундоментальное расхождение:) Все выше сказанное верно лишь для симулятора. Именно он так рассматривает и так работает с процессами. Но схема порожденная описанием для VHDL получается не зависит от списка чувствительности. И единственный для чего важно задавать правильный список чувствительности это для того чтобы симулятор не разошелся с реальной схемой. При этом можно всегда указывать в список все сигналы, просто беда в том что это будет слишком долго симулится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Тот самый случай, когда в HDL приходят программисты контроллеров... Им бы любую конструкцию получить в синтезе!.. ...Может когда нибудь такое и будет, если синтезаторы станут обладать интеллектом (кое-какие уже умеют такое, чего другим не под силу).. Живет миф пор Simplify... А пока HDL-дизайн не есть программирование, а есть схемотехника... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 апреля, 2017 Опубликовано 10 апреля, 2017 · Жалоба Поясните свой тезис пожалуйста. С каким из утверждений вы не согласны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться