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

Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?

ПРивет!

Написал кусок VHDL кода, где в списке чувствительности процесса находятся не только тактовые сигналы, но и другие сигналы, на изменения которых хочу реагировать. Некоторые говорят, что в списке чувствительности надо должен быть только sys_clk сигнал и всё, иначе при реализации могут быть проблемы. И у меня возник вопрос, если код VHDL компилируется (и даже временные диаграммы показывают, что всё окей), то нормально ли он будет работать на реальной ПЛИС? Или это компилирующийся код еще не гарантирует корректность работы?

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


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

потер...

вот топик где тема раскрывается https://electronix.ru/forum/index.php?showtopic=92126

Изменено пользователем hsoft

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


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

Это будет работать, но идеологически неверно.

И я еще добавлю. Входные асинхронные сигналы надо обрабатывать по идеологии пересечения клоковых доменов. Если в коде этого нет, то получите зависания или сбои...

Сигналы на входах, на которых есть дребезг, тоже надо обрабатывать...

И вообще вопрос выглядит так: я написал буквы без ошибок, много букв, но получится ли из этого "война и мир", как у Толстого?

 

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


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

ПРивет!

Написал кусок VHDL кода, где в списке чувствительности процесса находятся не только тактовые сигналы, но и другие сигналы, на изменения которых хочу реагировать. Некоторые говорят, что в списке чувствительности надо должен быть только sys_clk сигнал и всё, иначе при реализации могут быть проблемы. И у меня возник вопрос, если код VHDL компилируется (и даже временные диаграммы показывают, что всё окей), то нормально ли он будет работать на реальной ПЛИС? Или это компилирующийся код еще не гарантирует корректность работы?

А приведите пример, где в процессе описается комбинационная логика, но требуется внести в список чувствительности сигналы, не участвующие в этом процессе ?

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

На то, что "зашивается" в ПЛИС список чувствительности не влияет никак...

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


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

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

На то, что "зашивается" в ПЛИС список чувствительности не влияет никак...

Трижды подумайте Flip-fl0p, прежде чем такое написать в следующий раз!!!

ТС - на такие высказывания не обращайте внимания, Flip-fl0p еще не волшебник, только учится...

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


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

Трижды подумайте Flip-fl0p, прежде чем такое написать в следующий раз!!!

ТС - на такие высказывания не обращайте внимания, Flip-fl0p еще не волшебник, только учится...

А в чём я не прав ?

Во всех книгах по VHDL пишут именно так. Неоднократно на этом-же форуме про это писали. Практика показывает, что это так.

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


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

в т.ч. и RESET не заводятся в список чувствительности.
Если reset синхронный.

 

Когда Вы добавляете другие сигналы в список чувствительности, это означает что они вламываются в дизайн и хлопают асинхронно части схемы,что вступает в конфликт с CLK и Вы получаете то, с чем жестоко борятся меняя клоковые домены, с метастабильностью.

Оно Вам надо? А так то да, работать будет, но очень ненадежно.

Что вы несёте... Никогда никому этого больше не говорите.

 

А теперь ответ на вопрос TS: "Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?". Нет, не любой. Во-первых, VHDL язык с широкими возможностями. Он делится на два подмножества: синтезируемое и несинтезируемое. То есть то, что может быть реализовано в железе и что не может. Ко второму относится, например, работа с файлами.

Во-вторых, существует аппаратное ограничение. Вы можете описать триггер, который работает по обоим фронтам тактового сигнала, и триггер, работающий по двум и более тактовым сигналам. Но таких триггеров может не быть в вашей целевой платформе.

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


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

Думаю ТС интересовало не это, такого рода ошибки он отловит еще на попытки запихать что-то в плис. Если оно запихалось то все ок, с этой частью проблем нет.

 

 

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

 

Отсюда кстати растет и совет только клок использовать в процессе, чтобы просто тупо сделать весь дизайн синхронным, и чтобы как можно больше всего попало под временной анализ, правда беда что асинхронные входы это все равно не победит, так что этот совет мало помогает в реалии:)

 

А в чём я не прав ?

Во всех книгах по VHDL пишут именно так. Неоднократно на этом-же форуме про это писали. Практика показывает, что это так.

 

Интересный факт, но флип-флоп реально прав. В VHDL список чувствительности влияет на совпадение синтезируемой и симулируемой схемы, то есть реальная схема в железе всегда будет одной для любого списка, будут отличатся результаты симуляции. Поэтому данный список важен, и важно писать его правильно, но только для того чтобы железо и симуляция совпадали. Во всяком случае для современных синтезаторов. Интересная зависимость....

 

 

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


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

Отсюда кстати растет и совет только клок использовать в процессе, чтобы просто тупо сделать весь дизайн синхронным,
Мне кажется, что такие советы дают те, кто недопонимает, что есть процесс в 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;

то у меня синхронный дизайн вдруг превращается в частично асинхронный?

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


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

Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна%:)...

 

у вас в обоих описаниях есть синхронный элемент o который защелкивает входное значение. И его входное значение которое формируется через мультиплексор из i1 и i2 по сигналу ce. И в обоих случаях результирующая схема абсолютно одинаковая. Введение дополнительного сигнала i только изменяет читаемость. Вы точно также можете его добавить в первое описание отдельным процессом.

 

Или вы думаете что при описании в один блок у вас появляется какой-то специальный мультиплексор с клоком?

 

Кстати, поднята интересная тема, а что же такое процесс в VHDL?

 

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


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

Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна%:)...

 

у вас в обоих описаниях есть синхронный элемент 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;

 

Я думаю, что процесс надо рассматривать одновременно с понятием дельта-задержки.

 

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


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

Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна% :) ...
s/мультиплексора/процесса? Да. Описание в виде процесса логики, расположенной между двумя регистрами, не делает дизайн асинхронным.

 

И в обоих случаях результирующая схема абсолютно одинаковая.
Разумеется. Именно это я и пытаюсь донести на всякие инсинуации "только клок использовать в процессе".

 

Или вы думаете что при описании в один блок у вас появляется какой-то специальный мультиплексор с клоком?
Разумеется нет.

 

Кстати, поднята интересная тема, а что же такое процесс в VHDL?
Это часть схемы, активизируящаяся при любом изменении каких-либо сигналов. Каких сигналов -- определяет список чувствительности. Как реагировать на изменения -- определяет тело процесса. Если вы внесёте в список чувствительности лишние сигналы, то в принципе ничего плохого не случится -- работать будет так, как ожидается, только процесс будет вхолостую запускаться лишние разы. А вот если не допишите -- то поведение будет неожиданным.

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


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

Это часть схемы, активизируящаяся при любом изменении каких-либо сигналов. Каких сигналов -- определяет список чувствительности. Как реагировать на изменения -- определяет тело процесса. Если вы внесёте в список чувствительности лишние сигналы, то в принципе ничего плохого не случится -- работать будет так, как ожидается, только процесс будет вхолостую запускаться лишние разы. А вот если не допишите -- то поведение будет неожиданным.

 

Вот тут как я вижу есть фундоментальное расхождение:) Все выше сказанное верно лишь для симулятора. Именно он так рассматривает и так работает с процессами. Но схема порожденная описанием для VHDL получается не зависит от списка чувствительности. И единственный для чего важно задавать правильный список чувствительности это для того чтобы симулятор не разошелся с реальной схемой. При этом можно всегда указывать в список все сигналы, просто беда в том что это будет слишком долго симулится.

 

 

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


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

Тот самый случай, когда в HDL приходят программисты контроллеров...

Им бы любую конструкцию получить в синтезе!..

...Может когда нибудь такое и будет, если синтезаторы станут обладать интеллектом (кое-какие уже умеют такое, чего другим не под силу).. Живет миф пор Simplify...

А пока HDL-дизайн не есть программирование, а есть схемотехника...

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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