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

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?, Общий вопрос от начинающего
Modernoff
сообщение Apr 9 2017, 16:52
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 9-04-17
Пользователь №: 96 425



ПРивет!
Написал кусок VHDL кода, где в списке чувствительности процесса находятся не только тактовые сигналы, но и другие сигналы, на изменения которых хочу реагировать. Некоторые говорят, что в списке чувствительности надо должен быть только sys_clk сигнал и всё, иначе при реализации могут быть проблемы. И у меня возник вопрос, если код VHDL компилируется (и даже временные диаграммы показывают, что всё окей), то нормально ли он будет работать на реальной ПЛИС? Или это компилирующийся код еще не гарантирует корректность работы?
Go to the top of the page
 
+Quote Post
hsoft
сообщение Apr 9 2017, 18:01
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 190
Регистрация: 13-02-17
Пользователь №: 95 415



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

Сообщение отредактировал hsoft - Apr 10 2017, 05:37
Go to the top of the page
 
+Quote Post
iosifk
сообщение Apr 9 2017, 19:33
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 3 641
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(hsoft @ Apr 9 2017, 21:01) *
Это будет работать, но идеологически неверно.

И я еще добавлю. Входные асинхронные сигналы надо обрабатывать по идеологии пересечения клоковых доменов. Если в коде этого нет, то получите зависания или сбои...
Сигналы на входах, на которых есть дребезг, тоже надо обрабатывать...
И вообще вопрос выглядит так: я написал буквы без ошибок, много букв, но получится ли из этого "война и мир", как у Толстого?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Apr 9 2017, 21:39
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 409
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(Modernoff @ Apr 9 2017, 19:52) *
ПРивет!
Написал кусок VHDL кода, где в списке чувствительности процесса находятся не только тактовые сигналы, но и другие сигналы, на изменения которых хочу реагировать. Некоторые говорят, что в списке чувствительности надо должен быть только sys_clk сигнал и всё, иначе при реализации могут быть проблемы. И у меня возник вопрос, если код VHDL компилируется (и даже временные диаграммы показывают, что всё окей), то нормально ли он будет работать на реальной ПЛИС? Или это компилирующийся код еще не гарантирует корректность работы?

А приведите пример, где в процессе описается комбинационная логика, но требуется внести в список чувствительности сигналы, не участвующие в этом процессе ?
Вообще список чувствительности нужен только для моделирования. По сигналам, указанным в списке чувствительности, запускается процесс на моделирование.
На то, что "зашивается" в ПЛИС список чувствительности не влияет никак...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Apr 9 2017, 21:49
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 3 641
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Flip-fl0p @ Apr 10 2017, 00:39) *
Вообще список чувствительности нужен только для моделирования. По сигналам, указанным в списке чувствительности, запускается процесс на моделирование.
На то, что "зашивается" в ПЛИС список чувствительности не влияет никак...

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Apr 10 2017, 04:59
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 409
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(iosifk @ Apr 10 2017, 00:49) *
Трижды подумайте Flip-fl0p, прежде чем такое написать в следующий раз!!!
ТС - на такие высказывания не обращайте внимания, Flip-fl0p еще не волшебник, только учится...

А в чём я не прав ?
Во всех книгах по VHDL пишут именно так. Неоднократно на этом-же форуме про это писали. Практика показывает, что это так.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 10 2017, 05:37
Сообщение #7


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

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



Цитата(hsoft @ Apr 9 2017, 21:01) *
в т.ч. и RESET не заводятся в список чувствительности.
Если reset синхронный.

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

А теперь ответ на вопрос TS: "Любой ли синтаксически верный код VHDL будет корректно работать на реальной ПЛИС?". Нет, не любой. Во-первых, VHDL язык с широкими возможностями. Он делится на два подмножества: синтезируемое и несинтезируемое. То есть то, что может быть реализовано в железе и что не может. Ко второму относится, например, работа с файлами.
Во-вторых, существует аппаратное ограничение. Вы можете описать триггер, который работает по обоим фронтам тактового сигнала, и триггер, работающий по двум и более тактовым сигналам. Но таких триггеров может не быть в вашей целевой платформе.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 10 2017, 07:04
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 222
Регистрация: 17-02-06
Пользователь №: 14 454



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


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

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

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


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

Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 10 2017, 08:23
Сообщение #9


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

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



Цитата(Golikov A. @ Apr 10 2017, 10:04) *
Отсюда кстати растет и совет только клок использовать в процессе, чтобы просто тупо сделать весь дизайн синхронным,
Мне кажется, что такие советы дают те, кто недопонимает, что есть процесс в 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;

то у меня синхронный дизайн вдруг превращается в частично асинхронный?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 10 2017, 11:47
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 222
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

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

Кстати, поднята интересная тема, а что же такое процесс в VHDL?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Apr 10 2017, 12:16
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 409
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(Golikov A. @ Apr 10 2017, 14:47) *
Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна%sm.gif...

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


Я думаю, что процесс надо рассматривать одновременно с понятием дельта-задержки.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 10 2017, 12:33
Сообщение #12


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

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



Цитата(Golikov A. @ Apr 10 2017, 14:47) *
Ну тут надо ввести понятия синхронного и асинхронного мультиплексора, и частично асинхронного дизайна% sm.gif ...
s/мультиплексора/процесса? Да. Описание в виде процесса логики, расположенной между двумя регистрами, не делает дизайн асинхронным.

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

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

Цитата
Кстати, поднята интересная тема, а что же такое процесс в VHDL?
Это часть схемы, активизируящаяся при любом изменении каких-либо сигналов. Каких сигналов -- определяет список чувствительности. Как реагировать на изменения -- определяет тело процесса. Если вы внесёте в список чувствительности лишние сигналы, то в принципе ничего плохого не случится -- работать будет так, как ожидается, только процесс будет вхолостую запускаться лишние разы. А вот если не допишите -- то поведение будет неожиданным.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 10 2017, 14:08
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 222
Регистрация: 17-02-06
Пользователь №: 14 454



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


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

Go to the top of the page
 
+Quote Post
Мур
сообщение Apr 10 2017, 14:55
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Тот самый случай, когда в HDL приходят программисты контроллеров...
Им бы любую конструкцию получить в синтезе!..
...Может когда нибудь такое и будет, если синтезаторы станут обладать интеллектом (кое-какие уже умеют такое, чего другим не под силу).. Живет миф пор Simplify...
А пока HDL-дизайн не есть программирование, а есть схемотехника...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 10 2017, 15:07
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 222
Регистрация: 17-02-06
Пользователь №: 14 454



Поясните свой тезис пожалуйста.
С каким из утверждений вы не согласны?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd October 2017 - 09:59
Рейтинг@Mail.ru


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