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

Странности с симуляцией

Хочу обратить Ваше внимание на одну мелочь:имхо было бы логичнее pulse5 прописать также в конструкции асинхронного сброса:

а на мой взгляд эта переменная и так покрыта и сбрасывать её необязательнo

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


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

а на мой взгляд эта переменная и так покрыта и сбрасывать её необязательнo

Да я и не говорю, что это обязательно. Просто существует неочевидная связь между асинхронным сбросом bit_cnt и присвоением переменной pulse5 (разрешение записи).

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


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

Если нет события "rising_edge", то изменения сигналов cmd_gate и bit_cnt, присутствующих в списке чувствительности, только впустую запустят процесс, который ничего не выполнит. Так что все же лучше будет (для скорости моделирования) их туда не включать.

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

 

Например, если сигналы cmd_gate и bit_cnt изменятся незадолго до или же сразу вслед за событием "rising_edge", то это будет нарушением оговоренных спецификаций железа (времена сетап и холд). "Лишний" запуск процесса в принципе позволяет это обнаружить, тогда как при настоятельно мне советуемом "избегании ненужных запусков" обнаружить этого будет нельзя.

 

При условии, конечно, что Квартус и правда запускает процесс по указанному мной списку, в чем я лично сомневаюсь. Я подозреваю, что он достаточно умен, чтобы самому определить, когда запускать процесс, безотносительно к моему списку. А мой список использует только и исключительно для того, чтобы сравнить его с собственным списком (по которому процесс и будет запускаться на самом деле), и выдать ворнинг, мол, "что ж ты, блин, мне подсовываешь?" :)

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


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

Например, если сигналы cmd_gate и bit_cnt изменятся незадолго до или же сразу вслед за событием "rising_edge", то это будет нарушением оговоренных спецификаций железа (времена сетап и холд). "Лишний" запуск процесса в принципе позволяет это обнаружить, тогда как при настоятельно мне советуемом "избегании ненужных запусков" обнаружить этого будет нельзя.

"Незадолго до" "сразу вслед" - все равно события rising_edge нет, а значит if rising_edge не выполнится. Нет фронта - нет действий...

При условии, конечно, что Квартус и правда запускает процесс по указанному мной списку
Запускает. Иначе - беспредел. :)

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


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

Например, если сигналы cmd_gate и bit_cnt изменятся незадолго до или же сразу вслед за событием "rising_edge", то это будет нарушением оговоренных спецификаций железа (времена сетап и холд). "Лишний" запуск процесса в принципе позволяет это обнаружить, тогда как при настоятельно мне советуемом "избегании ненужных запусков" обнаружить этого будет нельзя.

Чепуха. Связи между списком чувствительности и анализом временных характеристик нет.

Это влияет только на ФУНКЦИОНАЛЬНОЕ(RTL) моделирование, и лишние сигналы зря запускают процесс.

 

Аналаз временных характеристик ведется на основании технологических примитивов после синтеза/разводки. Т.е. когда оригинальным кодом даже не пахнет.

Время установки и удержания сигнала считаются относительно источника сигнала (триггера, вывода ИС).

 

"Незадолго до" "сразу вслед" - все равно события rising_edge нет, а значит if rising_edge не выполнится. Нет фронта - нет действий...

А запуск процесса есть. И если это происходит часто(к примеру >10^6), то вы тратите время на обогрев помещения.

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


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

"Незадолго до" "сразу вслед" - все равно события rising_edge нет, а значит if rising_edge не выполнится. Нет фронта - нет действий...

 

А запуск процесса есть. И если это происходит часто(к примеру >10^6), то вы тратите время на обогрев помещения.

Конечно же запуск процесса есть! Только какие "нарушения времянок" он обнаружит, если ничего не выполнит...:)?

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


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

При анализе функциональной модели не происходит "нарушения времянок" т.к. все элементы идеальные! Пустая трата времени.

 

Дополнительно: ложное срабатывание процесса может привести к неправильной симуляции.

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

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


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

При анализе функциональной модели не происходит "нарушения времянок" т.к. все элементы идеальные! Пустая трата времени.

Я не пишу отдельно VHDL код для функциональной симуляции, пишу один код для всего проекта. Который используется и для функциональной симуляции (при отладке), и для живого кристалла, когда Квартус проверяет все времянки. Если Вы пишете другой код, поделитись, зачем это нужно, что при этом реально выигрывается, и как Вы потом разные коды сводите воедино? Неужели несколько долей секунды машинного времени, выигранные при функциональной симуляции, стоят траблов?

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


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

лишние сигналы зря запускают процесс.

Значит, чтобы сэкономить машинное время, я должен уметь безошибочно определять, какие сигналы в списке лишние, а какие нет? Что будет если я в список клок по ошибке не включу? Я предпочитаю чтобы компьютер экономил мое время :)

 

При условии, конечно, что Квартус и правда запускает процесс по указанному мной списку
Запускает. Иначе - беспредел. :)

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

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


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

Я всегда говорил. Начинать обучение надо с графического ввода. Прямыми линиями очень трудно написать слово процесс. Что нарисуете, то и получите.

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


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

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

Извините, это бред. То что Вы хотите увидеть "на самом деле", Вы видите при моделировании "после-трассировки", т.е. при моделировании синтезированной по коду схемы. В этом моделировании уже нет места списку чувствительности процесса: результат зависит от входного сигнала и временных характеристик элементов синтезированной схемы(см. сообщ. vetal).

А если моделирующий софт будет игнорировать Ваш список при моделировании до синтеза, то этим нарушит стандарт VHDL, который гласит, что процесс запускается при изменении любого из сигналов, присутствующих в списке чувствительности(если таковой есть).

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


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

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

просто 3.14-здец какой-то. удивительная настойчивость, фантастическая логика :)

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


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

То что Вы хотите увидеть "на самом деле", Вы видите при моделировании "после-трассировки", т.е. при моделировании синтезированной по коду схемы. В этом моделировании уже нет места списку чувствительности процесса: результат зависит от входного сигнала и временных характеристик элементов синтезированной схемы(см. сообщ. vetal).

Это не аргумент. Чем раньше вылавливаются ошибки, тем лучше. Лучше выловить их на стадии функционального моделирования.

 

А если моделирующий софт будет игнорировать Ваш список при моделировании до синтеза, то этим нарушит стандарт VHDL, который гласит, что процесс запускается при изменении любого из сигналов, присутствующих в списке чувствительности(если таковой есть).

Интересно. Ссылочку можете привести?

 

Насколько я понимаяю, ни один компилятор достаточного сложного языка реально не соответствует стандарту. Возьмите С++, полного соответствия нет ни у мелкософта, ни у GCC, не говоря уж о прочих. Квартус о своем неполном соответствии пишет черным по белому.

 

А главное - в чем все-таки преимущество такого запуска процесса строго по моему списку? Милливатт-часы? Вот это точно бред.

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


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

Я не пишу отдельно VHDL код для функциональной симуляции, пишу один код для всего проекта. Который используется и для функциональной симуляции (при отладке), и для живого кристалла, когда Квартус проверяет все времянки. Если Вы пишете другой код, поделитись, зачем это нужно, что при этом реально выигрывается, и как Вы потом разные коды сводите воедино? Неужели несколько долей секунды машинного времени, выигранные при функциональной симуляции, стоят траблов?

никто никакие коды никуда не сводит. код один - ваш собственный поведенческий - а точнее около-поведенческий (синтез чистого поведения - задача сложная).

компилятор (синтезатор) переводит ваше языковое описание в термины арxитектурных примитивов ПЛИС - и вы уже можите заливать эту прошивку - это о синтезе

теперь о верификации - этот же код который вы можете синтезировать - вы можете подвергнуть функциональной и временной верификации - при функциональной ваш код просто интерпретируется симулятором без структурного преобразования - речь о проверки каких-либо временных задержек в сxеме здесь не идёт.

другое дело временная симуляция - как и в случае синтеза компилятор переводит код в базис примитивов и потом автоматически создаёт файл на том же языке ХДЛ но уже в структурном описание (тот же код ХДЛ но напичканый инстансами логических ячеек, буфферов и т.д. соединённых проводочками) такой процесс называется обратной аннотацией (сами примитивы также описаны на языке - при том поведенчески) на эти примитивы по желанию и вешаются тайм чеки (при том тоже абсолютно автоматически) эта тема уже много раз обсуждалась на форуме.

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

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


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

хотя бы /pub/DOC/Books/VHDL/VHDL Standard.pdf

Это не аргумент. Чем раньше вылавливаются ошибки, тем лучше. Лучше выловить их на стадии функционального моделирования.
Конечно лучше, только список чувствительности в этом не поможет.

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


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

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

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

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

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

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

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

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

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

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